如何针对无向对称图优化全对最短路径算法?
我因为对另一个问题的误解而遇到了这个问题,我认为这可能是某些人感兴趣的。
All-Pairs Shortest Paths可能是一个更有趣的问题,但如果您在那里看到重要的优化,请随时提及单源最短路径。
除非您特别关注对称图,否则我不会寻找最短路径算法的比较。
答案 0 :(得分:0)
为了更好地解释事情,我将使用蝴蝶的隐喻(假设翅膀是对称的)。
公共顶点:构成对称线的所有顶点(因此是蝴蝶的主体)。
<强>算法:强>
从图表中删除位于其中一个对称边(及其连接边)上的所有顶点
取下蝴蝶的一只翅膀。
在此新图表上运行任何最短路径算法
您现在拥有从/到所有其他顶点的所有公共顶点的最短路径(因为图形是无向的,并且所有删除的顶点在此新图形中具有对称顶点,其具有与公共点相同的距离顶点)
你现在拥有从/到蝴蝶体到/从任何一个翼上的任何一点的最短路径。这是因为从蝴蝶体上的某个点到机翼上的某个点的距离与从身体上的那个点到另一个机翼上的相同点的距离相同,这也是与反向相同的距离。其中任何一条的路径。
现在,对于每个非公共顶点a
,每个其他非公共顶点b
和每个公共顶点c
,记录距a
的距离到c
到b
(恒定时间操作(只是添加),因为我们已经有a
到c
以及从c
到{{1}的距离})。
从b
到a
的对称顶点(或b
到a
的对称顶点)的最小距离将是所有公共顶点之间的最小距离。
为了确定从一个机翼上的任何一点到另一个机翼上的任何一点的最短路径,我们检查从第一个点到身体上每个点以及从身体上的每个点到第二个点的所有路径,找到最小的距离。