2 个稳定版本

1.1.0 2022年3月20日
1.0.0 2022年3月19日
0.1.0 2022年3月19日

#9 in #disjoint-set

MIT 协议

21KB
338

cozad-union-find

并查集图算法的实现

MIT License

快速开始

使用命名节点接口

对于相对较小的网络,您可以通过名称直接与节点交互。

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

概念

  • 什么是并查集?
  • 为什么我会使用它?
    • 您有一个大的无向图,并且想要找到非重叠的集合,例如
    • 2D 和 3D 过滤
    • 疾病暴露
    • 接触追踪
    • 标记聚类
  • 我如何了解更多?

支持

  • 我如何请求更改?
    • 请提交一个问题或拉取请求
  • 我的请求会被添加得多快?
    • 由于此存储库由一位在职专业人士维护,因此对于支持包之外的要求可能不会很快添加
    • 如果您需要快速、可预测的响应,请购买支持包
  • 可以购买支持包吗?
    • 是的,可以根据您的需求购买并定制各种支持包。支持区域包括
    • 按需支持视频
    • 1:1 和团队辅导
    • 新功能和其他修改

依赖关系

~3MB
~61K SLoC