【发布时间】:2011-02-07 17:16:04
【问题描述】:
http://en.wikipedia.org/wiki/Minimum_spanning_tree
我希望将我的最小生成树算法与最佳中的最佳算法进行基准测试。 有人知道我在哪里可以找到这些算法的 C++ 实现吗?我用谷歌搜索并没有找到任何东西。如果这些算法是最好的,那么肯定在某个地方一定有 C++ 实现吗?
最快的最小生成树 迄今为止的算法是由 大卫·卡格、菲利普·克莱因和罗伯特 Tarjan,他发现了一个线性时间 基于随机算法 Borůvka 算法和 反向删除算法。[2][3] 最快的非随机算法, 由 Bernard Chazelle 所著,基于 软堆,近似优先级 队列。[4][5]它的运行时间是O(m α(m,n)),其中 m 是 边,n 是顶点的数量,并且 α 是经典的反函数 阿克曼函数。这 函数 α 增长非常缓慢,所以 出于所有实际目的,它可以 被认为是一个不大于常数 超过 4 个;因此 Chazelle 算法 需要非常接近线性时间。如果 边权重是整数 有界位长度,然后是确定性的 算法是已知的线性 运行时间。[6]是否存在 具有线性的确定性算法 一般权重的运行时间是 仍然是一个悬而未决的问题。然而,赛斯 Petie 和 Vijaya Ramachandran 找到了一个可证明的最优确定性 最小生成树算法 计算复杂度为 未知。[7]
我已经针对 Boost C++ 的图形算法进行了测试。
【问题讨论】: