【问题标题】:Find shortest path between two nodes in directed weighted graph在有向加权图中找到两个节点之间的最短路径
【发布时间】:2015-02-19 07:32:45
【问题描述】:

我有一个有向加权图G = <V, E>。我需要在O((V + E)*logV) 中找到st 之间的最短路径。如果我有一个经典的路径度量权重,这将是一项非常简单的任务。但事实并非如此。

Weight of path = two heaviest edges in this path

因此,经典的Dijkstra's algorithm with modified binary heap 不起作用。我认为,我必须修改这个算法。我正在尝试这样做,但没有成功。

Example.

35 之间的路径权重 = 4 + 2 = 6

37 之间的路径权重 = 4 + 4 = 8

【问题讨论】:

    标签: algorithm graph computer-science graph-algorithm shortest-path


    【解决方案1】:

    根据 David Eisenstat 的反例编辑了我的答案。

    您在问题中提供的示例并不是 Dijkstra 何时不起作用的好示例。

    我相信你可以通过修改 Dijkstra 来做到这一点。关键是跟踪每个顶点的多个备选方案。您不仅必须存储构成最短路径的权重,还必须存储 max shortest.min 的替代方案。

    Dijkstra 是贪心的,所以你要弄清楚的是:是否有可能一旦确定了最短路径,就可以找到另一条更短的路径。因为您会发现路径越来越长,所以这是不可能的。

    【讨论】:

    • 如何对优先级队列中的权重对进行排序?
    • 我可以澄清一下吗?我是否理解正确,您想在每个顶点存储两个最重的边?我也想这样做。但是,有一个反例。
    • @Max:那么,请提供反例。大卫:我看不出有什么问题。您按总重量订购它们。
    • @popovitsj,我知道,有一个反例。我的教授前几天这么说的。但我没有。
    • 问题在于没有最优的子结构。假设我们有一个图 a->b (4), b->d (4), a->c (2), c->d (5), d->e (???) 并且想要从a到e。如果 d->e 的权重为 4,那么我们想要 a->b->d->e (8 e 的权重为 1,那么我们想要 a->c->d->e (7
    猜你喜欢
    • 2012-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 2019-02-20
    相关资源
    最近更新 更多