有向图被认为是unipathic如果对于任意两个顶点和在曲线图G =(V,E) ,存在在从最简单的一个路径Ú到v。u v
假设给我一个单感图,使得每个边的权重为正或为负,但不包含负的权重周期。
由此,我想找到一种算法,该算法找到从源节点s到所有节点的所有最短路径。
我不确定如何解决这个问题。我正在尝试看看我如何利用它不包含负权重循环,并且当然在任何节点到v之间最多只有一条简单路径这一事实。
有向图被认为是unipathic如果对于任意两个顶点和在曲线图G =(V,E) ,存在在从最简单的一个路径Ú到v。u v
假设给我一个单感图,使得每个边的权重为正或为负,但不包含负的权重周期。
由此,我想找到一种算法,该算法找到从源节点s到所有节点的所有最短路径。
我不确定如何解决这个问题。我正在尝试看看我如何利用它不包含负权重循环,并且当然在任何节点到v之间最多只有一条简单路径这一事实。
Answers:
首先,查看结果的大小。你想从最短路径集合到所有其他节点。除非路径的平均长度受常数限制(否则不是:任何列表都是单路径,并且如果以为根,则路径的总长度为,其中为列表的长度),则在数据表示中需要格外小心:包含路径的结构将需要使用路径之间的共享。s n (n − 1 )/ 2 n
除循环外,从到任何其他节点仅有一条路径。如果该路径经过中间节点,则路径的第一段是从到的所需路径。 ü 牛逼小号ŧ
我建议将结果存储在一个数组中,该数组由从到的节点索引,且。数组中的每个元素都存储到该节点的路径上的前一个节点的索引(例如,将用作无法从到达的节点的特殊标记)。从到的路径为。| E | − 1 s = 0 − 1 s s t (s = R [ … R [ t ] … ] ,… ,R [ R [ t ] ] ,R [ t ] ,t )
将初始化为所有。− 1
从开始执行图的深度优先或宽度优先的遍历。每次到达节点时,将设置为其前任。ü - [R [ ù ]
由于存在周期,因此可能会多次到达一个节点。有表示已经被访问。u
由于具有单亲性质,只要我们还没有完成一个循环,到达每个节点就无关紧要。只有一条简单的道路。
该算法可能多次到达每个节点,因此不清楚其复杂度是否为。实际上完成的工作是,其中是可从源到达的边缘。更确切地说,我们仅在一种情况下多次到达一个节点:如果该节点是在特定循环中我们到达的第一个节点,那么在这种情况下,我们会到达它两次(一次是从一条简单的路径到达,一次是在完成循环之后到达) )。Θ (| E 0 |)V 0
好吧。让我们证明在单向图中,基本循环数最多随节点数线性增长。(基本循环是一个不包含较短循环的循环。)在下面的讨论中,我将假设图没有自边缘(从节点到其自身都没有边;无论如何,这些边与路径构造无关) )。
单态图可以具有周期,但是以非常有限的方式。如果我们能够以某种方式将每个循环关联到一个不同的节点(或至少每个节点至少有一定数量的循环),那将是很好的。循环可以共享一个节点吗?不幸的是。
您可以有个周期全部共享一个节点而没有其他节点。结果图是单感的。对于长度为2的周期,这是一个星形图形,具有一个中心节点和任意数量的节点,使得。一个一个b 我∀ 我,一个⇆ b 我
因此,我们需要更加努力。好吧,让我们尝试归纳证明它。令为图的节点数,为边数,为非自数的基本循环数。我断言,如果是单感的并且不为空,则。ģ#Ç (ģ )ģ #Ç (ģ )≤ #V (G ^ )- 1
对于具有一个或两个节点的图,这是显而易见的。假设断言适用于所有图,使得并且是具有节点的单态图。如果没有循环,则,关闭大小写。否则,令为基本循环。ģ Ñ
折叠周期:令为图,其节点为减去再加上一个节点且其边缘为所有不涉及的边缘,再加上每当和每当。在每一个路径诱导的路径(如果该路径涉及,然后通过更换这个 G ^ { 一个1,... ,一米 } 一个ģ 一个我 → 一在)。因此,是同情的。此外,由于在循环不共享边缘,在所有循环除了我们消除了一个:。通过归纳,。由于,我们有。#C (G '
这证明了结论。遍历最多边。