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次下载
62KB
1K SLoC
Spectre
在法语中,矩阵的谱称为"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