找到图的直径的时间复杂度是 多少?
图的直径是图中所有顶点对之间的最短路径距离的集合中的最大值。
我不知道该怎么办,我需要对如何解决这样的问题进行完整的分析。
找到图的直径的时间复杂度是 多少?
图的直径是图中所有顶点对之间的最短路径距离的集合中的最大值。
我不知道该怎么办,我需要对如何解决这样的问题进行完整的分析。
Answers:
此解决方案不正确。
不幸的是,该解决方案仅对于树木是正确的(而且很简单)!查找树木的直径甚至不需要这样做。这是图形的反例(直径为4,如果选择此,则算法返回3 ):
如果有向图是很复杂的,那么有一篇论文声称在密集情况下比对所有对最短路径使用算法更快的结果。
但是,我的主要观点是关于该图未定向且具有非负的weigth的情况,我多次听到一个不错的技巧:
它的复杂度与两个连续的广度优先搜索¹相同,即如果图形已连接²,则为。
这似乎是民间传说,但现在,我仍在努力获取参考或证明其正确性。当我实现这些目标之一时,我将进行更新。看来如此简单,我现在就发布我的答案,也许有人会更快地得到它。
¹如果图形加权,维基百科似乎会说但我只能确定。O (| E | log | V |)
²如果未连接图形,则得到但可能必须添加才能从每个连接的组件中选择一个元素。我不确定是否有必要,无论如何,在这种情况下,您可以决定直径是无限的。
您还可以考虑代数图理论方法。直径是最小整数 st,矩阵具有所有项都不为零的属性。您可以通过矩阵乘法的次迭代找到。然后,直径算法需要时间,其中是矩阵乘法的界。例如,随着Vassilevska Williams对Coppersmith-Winograd算法的推广,直径算法将在。有关快速入门的信息,请参见此处的 Fan Chung的书的第3章。
如果将注意力集中在合适的图类上,则可以在最佳时间内解决APSP问题。这些类别至少包括区间图,圆弧图,置换图,二部置换图,强弦图,弦二部图,距离遗传图和双弦图。例如,请参见Dragan,FF(2005)。估计受限图族中所有对的最短路径:统一方法。Journal of Algorithms,57(1),1-21及其参考。
假设:
1.图未加权
2.图是有向的
O(| V || E |)时间复杂度。
算法:
ComputeDiameter(G(V,E)):
if ( isCycle( G(v,E) ) ) then
return INFINITY
if ( not isConnected( G(V,E) )) then
return INFINITY
diameter = 0
for each vertex u in G(V,E):
temp = BFS(G,u)
diameter = max( temp , diameter )
return diameter
说明:
我们检查周期。如果图包含循环,那么我们将继续在循环中移动,因此我们将拥有无限距离。我们检查是否已连接。如果未连接图形,则意味着从G1到G2的顶点v的顶点u。其中G1和G2是未连接的任何两个子图。因此,我们将再次拥有无限距离。我们将使用BFS计算从u可以到达的给定节点(u)到所有其他节点(v)之间的最大距离。然后,我们将采用先前计算的最大直径,并通过BFS返回结果。因此,我们将拥有当前的最大直径。
运行时间分析:
总时间= O(| v || E |)+ O(| E |)+ O(| E |)
因为| V || E | > | E |
因此我们将运行时间设为O(| v || E |)。
注意:这不是解决此问题的理想方法。