在巨大的完整图中找到 MST 的算法

标签 algorithm graph computer-science minimum-spanning-tree

让我们假设一个包含 > 25000 个节点的完整图。每个节点本质上是平面上的一个点。 它有 625M 条边。每条边都有长度,应存储为 float 。

我需要一个算法来找到它的 MST(在普通 PC 上)。

如果我采用 Kruskal 算法,它需要先对所有边进行排序,但我什至不能同时将边全部存储在内存中。

如果我选择 Prim 的算法,很难评估同时将多少条边存储在堆中,但可能大多数边会在算法开始后很快就存在。

是否有更多内存充足的算法可以让我避免对存储在文件中的边进行排序?

此外,是否有任何已知的 MST 算法利用任何树边都满足三角不等式这一事实?

最佳答案

您仍然可以使用 Kruskal 算法。

您实际上不需要对边进行排序,算法所需要的只是一种重复查找尚未使用的最小权重边的方法。对边进行预排序并遍历该列表是一种非常有效的方法。

您可以简单地通过重复找到 k 条最小的未使用边(其中 k 是一个可管理的数字,可能至少为 |V|)来完成相同的操作,然后根据需要对它们进行排序和迭代。这将排序过程分解为更易于管理的部分,尽管存在时空权衡,因为取决于 k 的大小,此过程的时间复杂度可以从 O(E log E) (k = E) 到大约 O (E^2) (k = 1).

关于在巨大的完整图中找到 MST 的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17450619/

相关文章:

javascript - D3 Force Layout - 子图聚类特性

jquery - Highcharts - 如何减少类别之间的空间?

algorithm - 链表循环检测

algorithm - 字符串的成对独立哈希函数?

algorithm - Peterson-2互斥算法

c - 在 C 中处理 ASCII 字母

language-agnostic - 复杂性(初学者问题)

algorithm - 生成具有成对不同行和列的随机矩阵

r - R中igraph包中的邻居函数

python - 面向绝对初学者的计算机和计算机科学简介的在线资源