我有一个无向加权图 G=(V,E),其中 V 代表节点,E 代表边。通过 Dijkstra 算法,我得到了一个最短路径树 Ts=(s,V),它以源节点 s 为根,跨越图 G 中的所有节点 V。然后我选择了一个子树 Tm=(s,K),(其中 K是最短路径树Ts=(s,V)的V)的子集,将s连接到所有V个节点中的K个节点,即子树Tm是最短路径树Ts的子集。
我的问题是现在我如何通过论证或引理/定理证明最短路径树 Ts 的这个子树 Tm 也是最短树?先感谢您。
我有一个无向加权图 G=(V,E),其中 V 代表节点,E 代表边。通过 Dijkstra 算法,我得到了一个最短路径树 Ts=(s,V),它以源节点 s 为根,跨越图 G 中的所有节点 V。然后我选择了一个子树 Tm=(s,K),(其中 K是最短路径树Ts=(s,V)的V)的子集,将s连接到所有V个节点中的K个节点,即子树Tm是最短路径树Ts的子集。
我的问题是现在我如何通过论证或引理/定理证明最短路径树 Ts 的这个子树 Tm 也是最短树?先感谢您。
由于问题不够清楚,我假设您的问题如下 -
如果 Ts=(s,V) 是图 G = (V,E,W) 的最短路径树(以 s 为根),则证明 T's = (s, K) 是由 K 诱导的 Ts 的子树( \subset V),是由 K 诱导的 G 的子图 G' = (K,E',W) 的最短路径树(以 s 为根)。
你可以用反证法来证明。
证明(非正式):设 u \in K 是一个顶点。由于 u 也在 V 中,所以由 Ts 给出的路径 p = s -> u 是最短的。假设 T's 不是 G' 的最短路径树。那么 T's 给出的路径 p = s -> u 不是 G' 中最短的。这意味着,存在另一个顶点 v (\in K) 使得p 不包含 v并且 v 创建了一个快捷方式,如 s -> v -> u。
由于 Ts 给出的路径 p = s -> u 在 G 中是最短的,所以p 必定在 s 和 u 之间的某个地方包含了 v,这导致矛盾。
好吧,我猜这个 SPT(最短路径树)只是一棵树,它从源到每个其他节点都有一条边(因为如果不是这样,它可能包含循环)。
那么,如果你选择原始SPT的某个子树,你将不得不保留一棵树的属性,那么我们有一些情况:
平凡树:只有一个节点,没有边
no problems in here, it's a SPT (empty)
Not-Trivial Tree:两个或更多节点,显然有边。
this is kind of tricky.
if you suppose that this sub-tree is rooted on source, then its easy
to see that the sub-tree will be a set of shortest paths between
the source and the other nodes, making it be a SPT ROOTED ON SOURCE.
otherwise, it wont be a SPT, cause if its rooted on some other node
(instead of source), the path from the root to other node (different
from source) may not be minimum.
正如我猜你对以源为根的子树感兴趣,很容易看出子树将只包含最短路径(因为它是 SPT 本身的子树),然后它将是SPT。