#p2p #networking #graph #toolkit #measure #matrix #degree

spectre

分析p2p网络拓扑的轻量级工具包

9个版本 (重大更改)

0.7.0 2023年5月15日
0.6.0 2023年2月27日
0.5.2 2023年1月23日
0.4.0 2022年5月22日
0.1.0 2022年2月7日

#948 in 算法

每月32次下载

MIT 协议

62KB
1K SLoC

Spectre

crates.io docs.rs

在法语中,矩阵的谱称为"spectre"。

这个微库包含了一个有助于分析网络拓扑的小型工具包。具体来说

  • 图的度、邻接矩阵和拉普拉斯矩阵。
  • 图的多种中心度度量。
  • 图的代数连通性(Fiedler)。

基本用法

该库围绕着Graph结构构建,它可以由一个或多个Edge实例构建。构建完成后,可以计算图的多种测量和矩阵表示。

use std::net::SocketAddr;

use spectre::edge::Edge;
use spectre::graph::Graph;

// Construct the graph instance.
let mut graph = Graph::new();

// Create some addresses to be part of a network topology.
let addrs: Vec<SocketAddr> = (0..3)
    .map(|i| format!("127.0.0.1:{i}").parse().unwrap())
    .collect();
let (a, b, c) = (addrs[0], addrs[1], addrs[2]);

// Insert some edges, note the IDs can be any type that is `Copy + Eq + Hash + Ord`.
graph.insert(Edge::new(a, b));
graph.insert(Edge::new(a, c));

// Compute some metrics on that state of the graph.
let density = graph.density();
let degree_centrality_delta = graph.degree_centrality_delta();

// Matrices can be pretty printed...
println!("{}", graph.laplacian_matrix());
// ...outputs:
//  ┌          ┐
//  │  2 -1 -1 │
//  │ -1  1  0 │
//  │ -1  0  1 │
//  └          ┘

依赖项

~3MB
~57K SLoC