2 个稳定版本
1.1.0 | 2022年3月20日 |
---|---|
1.0.0 | 2022年3月19日 |
0.1.0 |
|
#9 in #disjoint-set
21KB
338 行
cozad-union-find
并查集图算法的实现
快速开始
使用命名节点接口
对于相对较小的网络,您可以通过名称直接与节点交互。
extern crate cozad_union_find;
use cozad_union_find::union_find::client as ufclient;
fn main() {
let mut client = ufclient::Client::new();
client.add_node("A");
client.add_node("B");
client.add_node("C");
client.add_node("D");
client.add_node("E");
client.add_node("F");
client.add_node("G");
client.add_node("H");
client.add_node("I");
client.add_node("J");
client.connect_nodes("E", "D");
client.connect_nodes("D", "I");
client.connect_nodes("G", "F");
client.connect_nodes("J", "E");
client.connect_nodes("C", "B");
client.connect_nodes("I", "J");
client.connect_nodes("F", "A");
client.connect_nodes("H", "B");
client.connect_nodes("G", "B");
client.connect_nodes("B", "A");
client.connect_nodes("G", "H");
println!("\nDisjoint sets found: {}", client.disjoint_set_count());
}
输出
Disjoint sets found: 2
使用批量接口
当您需要处理大量连接时,您可以跳过与命名节点发生的查找,并使用批量接口。该过程包括提供一个节点名称向量,然后通过索引指定节点之间的连接。
extern crate cozad_union_find;
use cozad_union_find::union_find::client as ufclient;
use cozad_union_find::union_find::client::BulkConnection as ufconnection;
fn main() {
let mut bulk_client = ufclient::Client::new();
let nodes = vec![
String::from("A"),
String::from("B"),
String::from("C"),
String::from("D"),
String::from("E"),
String::from("F"),
String::from("G"),
String::from("H"),
String::from("I"),
String::from("J")
];
bulk_client.add_nodes_bulk(nodes);
let connections = vec![
ufconnection { a: 4, b: 3 },
ufconnection { a: 3, b: 8 },
ufconnection { a: 6, b: 5 },
ufconnection { a: 9, b: 4 },
ufconnection { a: 2, b: 1 },
ufconnection { a: 8, b: 9 },
ufconnection { a: 5, b: 0 },
ufconnection { a: 7, b: 2 },
ufconnection { a: 6, b: 1 },
ufconnection { a: 1, b: 0 },
ufconnection{ a: 6, b: 7 }
];
bulk_client.connect_nodes_bulk(connections);
println!("\nDisjoint sets found: {}", bulk_client.disjoint_set_count());
}
输出
Disjoint sets found: 2
概念
- 什么是并查集?
- 并查集中的每个集合之间没有共同的项目
- https://en.wikipedia.org/wiki/Disjoint_sets
- 为什么我会使用它?
- 您有一个大的无向图,并且想要找到非重叠的集合,例如
- 2D 和 3D 过滤
- 疾病暴露
- 接触追踪
- 标记聚类
- 我如何了解更多?
- https://algs4.cs.princeton.edu/15uf/
- 购买完整支持视频的访问权限
- 包括理论、代码和测试的详细覆盖
- 即将推出!
支持
- 我如何请求更改?
- 请提交一个问题或拉取请求
- 我的请求会被添加得多快?
- 由于此存储库由一位在职专业人士维护,因此对于支持包之外的要求可能不会很快添加
- 如果您需要快速、可预测的响应,请购买支持包
- 可以购买支持包吗?
- 是的,可以根据您的需求购买并定制各种支持包。支持区域包括
- 按需支持视频
- 1:1 和团队辅导
- 新功能和其他修改
依赖关系
~3MB
~61K SLoC