gpt4 book ai didi

algorithm - 遍历连接的组件

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:59:08 25 4
gpt4 key购买 nike

我想遍历包含 ~107 个顶点的无向图的每个连通分量。即我想在每个向量 V1...Vk 上调用一些函数 f(Vi) ,其中 Vi 是一个向量,包含附加到图中第 i 个连通分量中每个节点的数据。

执行此操作最快的算法是什么?

我的第一个想法是:

  1. 将所有未访问的顶点存储在一个堆中,然后重复从堆中取出一个顶点,使用DFS找到它的连通分量Vi,调用f(Vi)并从堆中删除组件中的所有顶点。
  2. 找到联合查找不相交集的一个变体,它不仅支持有效的集合并集,而且可以高效地迭代集合并找到它们的成员。 (这可能吗?)

最佳答案

  1. 运行经典connected components algorithm .通常,这会操纵 disjoint-sets data structure .

  2. 创建一个将节点映射到节点链表的哈希表。

  3. 遍历每个节点

    一个。在disjoint-sets数据结构中寻找代表节点

    必要时为哈希表中的代表节点创建一个链表

    将节点添加到代表节点关联的链表中

这需要有效的线性时间(即 Θ(|E| + |V|),这是预期的(在广泛接受的理解下,不相交的集合实际上是线性时间)。

您现在有一个哈希表,其条目数是连接组件的数量。每个值都是连接组件中所有节点的链表。您现在可以对任何您想要的内容进行线性迭代。

关于algorithm - 遍历连接的组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39852909/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com