A. *_*Rex 50 algorithm math graph-theory
我有一个邻接列表形式的大型连接稀疏图.我想找到两个尽可能远的顶点,即图的直径和实现它的两个顶点.
对于不同的应用,我对无向和定向情况下的这个问题感兴趣.在定向情况下,我当然关心定向距离(从一个顶点到另一个顶点的最短有向路径).
有没有比计算所有对最短路径更好的方法?
编辑:通过"尽可能远的距离",我当然意味着"最长的最短路径" - 也就是说,从一个到另一个的最短距离的所有顶点对的最大值.
ago*_*nst 16
好吧,我已经对问题进行了一些思考,并且有点谷歌搜索,我很抱歉,但我找不到任何似乎不是"只找到所有对最短路径"的算法.
但是,如果你假设Floyd-Warshall是计算这类事物的唯一算法(Big-Theta of | V | ^ 3),那么我有一些好消息:Johnson的稀疏图算法(谢谢你,可靠的CLRS!)计算(Big-Oh(| V | ^ 2*lgV + VE))中的所有对最短路径,对于稀疏图,它应该渐近更快.
维基百科说它适用于定向(不确定无向,但至少我不能想到为什么不这样做),这里是链接.
图表还有什么可能有用吗?如果它可以很容易地映射到2D平面上(因此,它的平面和边缘权重服从三角形不等式[它可能需要满足更严格的要求,我不确定])你可能能够打破一些几何算法(凸壳可以在nlogn中运行,从那里可以轻松找到最远的一对点).
希望这可以帮助! - Agor
编辑:我希望链接现在有效.如果没有,只需谷歌吧.:)
我不知道除了所有最短路径之外的更好的计算直径的方法,但Mathematica对PseudoDiameter使用以下近似:
http://reference.wolfram.com/mathematica/GraphUtilities/ref/PseudoDiameter.html