【问题标题】:How can an All-Pairs Shortest Path algorithm be optimized for an undirected symmetric graph?如何针对无向对称图优化全对最短路径算法?
【发布时间】:2013-06-09 12:20:08
【问题描述】:
如何针对无向对称图优化全对最短路径算法?
由于对另一个问题的误解,我遇到了这个问题,我认为它可能会引起某人的兴趣。
All-Pairs Shortest Paths 可能是一个更有趣的问题,但如果您看到其中的显着优化,请随意提及 Single-Source Shortest Path。
我不是在寻找最短路径算法的比较,除非您特别关注对称图。
【问题讨论】:
标签:
algorithm
graph-algorithm
shortest-path
【解决方案1】:
为了更好地解释事情,我将使用蝴蝶的比喻(假设翅膀是对称的)。
公共顶点:构成对称线的所有顶点(因此是蝴蝶的身体)。
算法:
-
从图中删除位于对称边之一(及其连接边)上的所有顶点
去掉一只蝴蝶的翅膀。
在这个新图上运行任何最短路径算法
-
您现在拥有从/到所有公共顶点到/从所有其他顶点的最短路径(因为图是无向的,并且所有删除的顶点在这个新图中都有一个对称顶点,它与公共顶点的距离相同)
您现在拥有从/到蝴蝶身体到/从任一侧翼上任意点的最短路径。这是因为蝴蝶身体上某点到翅膀上某点的距离与身体上某点到另一翅膀上同一点的距离相同,反之亦然。其中任何一个的路径。
-
现在,对于每个非公共顶点a,每个非公共顶点b和每个公共顶点c,记录从a到c到b的距离(恒定时间操作(只是加法),因为我们已经有了从a 到c 和从c 到b 的距离)。
从a 到b 的对称顶点(或a 到b 的对称顶点)的最小距离将是所有公共顶点中的最小距离。
为了确定从一个机翼上的任何点到另一个机翼上的任何点的最短路径,我们检查从第一个点到身体上每个点以及从身体上每个点到第二个点的所有路径,并找到最小的距离。