【问题标题】:Why do we call it "Relaxing" an edge?为什么我们称其为“放松”优势?
【发布时间】:2012-05-31 13:58:36
【问题描述】:

在 Dijkstra 的最短路径算法和其他算法中,检查边以查看它是否提供到节点的更好路径被称为松弛边。为什么叫放松?

【问题讨论】:

    标签: dijkstra bellman-ford


    【解决方案1】:

    一般来说,放松是在进行一种减少约束的改变。当 Dijkstra 算法检查一条边时,它会从池中删除一条边,从而减少约束的数量。

    这不是非常有用的术语,但想想你说出来会多么酷。

    【讨论】:

    • 您能否澄清一下如何将池中的边缘视为约束?
    • 考虑一个有很多边进入的顶点。开始时,您知道解决方案必须包括来自第一条边、第二条边等的权重。实际上,对于边 a、b、c、d 和 e,您开始说“最短路径必须包括 a、b、c、d、e”。然后你消除 e,现在你知道它必须只包含“a,b,c,d”。每一步都是一种放松,因为在每一步中,您都移除了当前解决方案施加的条件。
    • 我猜不是coming into it而是leaving it
    • 他们是双重的,杰克逊。它甚至可以是一个无向图。关键是放松总是在消除约束。
    • 在一些最短路径算法中,松弛要么不从池中删除边,要么在添加其他边的同时删除它。所以我不相信你的解释。我听说 relaxation 是运筹学的一个术语,我也看到了上下文中提到的Lagrangian relaxation,但我不明白为什么 Dijkstra 算法中的边缘松弛会是拉格朗日松弛。
    【解决方案2】:

    我认为这个问题与当前接受的答案中谈到的数学概念无关。我的答案基于 Cormen (CLRS) 的书的第二版,特别是第 24 章关于放松的部分。

    上下文: 您正在搜索节点 s 和所有其他节点之间的最短路径。假设您有两个节点 uv。您已经为他们准备了一条中间路径。

    relax(u,v) 是一个函数,应该读作“使用 u 放松 v ”。我更喜欢将函数理解为“使用 u 缩短 vs 的距离”。您在问自己是否应该放弃当前的路径 s-v 转而将其转换为 s-u-v。你所要做的就是看看 s-u 的距离加上箭头 u-v 的额外成本是否优于 s-v 的距离。图片举例说明 功能

    A picture from CLRS's explanation on Relaxation

    【讨论】:

    猜你喜欢
    • 2013-09-03
    • 1970-01-01
    • 2010-12-18
    • 2013-06-28
    • 2011-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-05
    相关资源
    最近更新 更多