【问题标题】:The most vital edge on the shortest path最短路径上最重要的边缘
【发布时间】:2013-04-30 02:58:32
【问题描述】:

我在 Sedgewick 的算法课程中提出了这个问题:“Critical edge。给定一个边加权有向图,设计一个 E*log(V) 算法来找到一条边,其移除会导致最大增加(可能无限)从st 的最短路径的长度。假设所有边的权重都严格为正。(提示:从sv 计算最短路径距离d(v) 并考虑降低成本c′(v,w)=c(v,w)+d(v)−d(w) ≥ 0.)"

我在互联网上读到,三 (3) 人在 1989 年提出了一个复杂的算法O(E + V*log(V)),这需要高级数据结构,我认为它是在图表上(而不是有向图)。如果它有三位高级计算机科学家来开发这种算法,对于入门课程来说不是太大的问题吗?但也许对于 O(E*log(V)) 来说更容易。

你能帮我解决吗?我不明白问题中给出的提示。

【问题讨论】:

    标签: graph dijkstra


    【解决方案1】:

    这是根据 Sedgewick 的提示在最短路径上找到临界边的算法草图。

    首先,降低成本c′(v,w)=c(v,w)+d(v)−d(w)对应于最短路径长度的增加从 sw,当在 w 之前经过 v 时。 (如果 v 是从 sw 的最短路径,那么这个增加是 0。)(实际上 d(v) 是从 s 到 v 的最短路径的长度和 c(v, w) 从 v 到 w 的成本。)

    假设从 st 的最短路径是 (s, ..., v, t) 并且我们删除最后一个边 (v, t)。那么从 st 的最短路径长度的增加等于所有 in 中 c'(u, t) 的最小值-edges (u, t),带有 u != v

    假设 u 使得 c'(u, t) 是最小值(仍然是 u != v)。然后沿着从 su 的最短路径向后,直到到达一个顶点,比如说 w,属于从 的最短路径st(没有任何移除的边缘)。从 st 的最短路径类似于 (s, ..., w, ..., v, t)。

    请注意,如果您删除 wt 之间的任何边,您将获得最大的 c'(u, t)最短路径。实际上,如果缺少 wt 之间的一条边,从 wt 就足够了> 通过顶点u。另一方面,请注意删除最后一条边 (v, t) 会导致这种增加。

    现在,只需用 w 迭代 t 所做的事情。找到一个顶点 x 使得 c'(x, w) 是最小值并且 x 不在最短路径上。沿着从 sx 的最短路径向后移动,直到到达属于从 sw 的最短路径的顶点>.

    一旦您到达 s,您就可以确定要移除哪个顶点以最大程度地增加最短路径的长度。

    【讨论】:

      【解决方案2】:

      这是一个令人困惑的问题,我同意。以下是我的一些想法。

      “降低成本”一词和定义用于将 A* search 算法简化为 Dijkstra 算法,将原始成本替换为降低成本:

      c′(v,w) = c(v,w) - h(v) + h(w) = c(v,w) - (h(v) - h(w)) > 0

      h(v) - h(w) 部分是启发式函数的一个下降,在一致(单调)启发式的情况下,它不应超过边缘成本,因此降低的成本仍然大于 0(参见幻灯片 14 和 15@ 987654322@)

      看起来 Sedgewick 建议使用原始距离函数 (d(v)) 作为一致的启发式搜索 G' 中的新/替换最短路径,这与原始 G 相同,但删除了一个沿着从st 的原始最短路径的边。不过,就个人而言,我看不出它如何有助于解决O(ElogV) 中最重要的边缘问题。

      还有一个类似的问题:找出图中所有向下和向上的临界边。根据定义,降低向下临界边缘的成本会降低整体 SP 成本。增加向上临界边缘的成本会增加整体 SP 成本。所有关键边缘都可以在O(ElogV) 中找到,请参阅第 8 章here。但这并不能回答什么边缘是最关键的问题(移除时导致最大 SP 增加)。

      正如您所指出的,最重要的边缘问题由 Malik、Mittal 和 Gupta (1989) 在 O(E + V*log(V)) 时间。我还没有找到原始的 MMG 论文,但 this presentation 解释得很好。据我所知,可以通过优先级队列来解决,不需要特定的数据结构。

      很抱歉没有真正回答原始问题(使用降低成本的有向图中最重要的边缘的解决方案),但仍然希望上面的链接和想法可能对某人有用。我很高兴看到 Sedgewick 提出的解决方案。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多