【问题标题】:Variations of Dijkstra's Algorithm for graphs with two weight properties具有两个权重属性的图的 Dijkstra 算法的变体
【发布时间】:2016-05-28 02:20:28
【问题描述】:

我正在尝试为映射到具有非负权重边的有向图的问题寻找启发式方法。然而,每条边都与 两个 权重属性相关联,而不是只有一个权重(例如,一个是距离,另一个显示道路的 4G LTE 覆盖范围有多好!)。 dijkstra、Bellman Ford 或任何其他追求此目标的算法是否有任何特定变体?当然,一种简单的解决方法是手动将单个权重属性作为所有这些属性的组合,但这看起来并不好。

能否推广到具有多个属性的情况?

【问题讨论】:

  • 您能否详细说明您正在寻找什么?你想在重量之间取得什么样的平衡?例如,您想要一条总和最低的路径吗?所有最短路径中最美丽的?还有什么?不知道这一点,我认为没有人能提供一个好的答案。
  • 说第二个属性是道路的 4G LTE 覆盖范围有多好。所以一个基本的愿望是不要选择一条总里程数不低于阈值的路线。更有趣的是,10 number of 0.1-mile 断开连接比整个continuous 1 mile 断开连接更好!假设我正在通过电话交谈,并且我不希望延迟超过定义的X 秒。对我来说什么都好……只是听起来更像真实世界的场景。
  • @TinaJasmin 您可能想考虑如何精确地确定您要查找的属性。例如,你能写出路由合法需要满足的一组限制吗?您可以根据所有标准为路线分配“成本”吗?如果您必须在多个选项之间进行选择,但没有一个是完美的,您将如何决定选择哪一个?
  • 是的,我想我需要在推导算法之前先定义这些限制。
  • @templatetypedef 在这里问了这个问题。您可以提供帮助,因为您已经在上下文中:stackoverflow.com/questions/35465235/…

标签: algorithm graph dijkstra shortest-path bellman-ford


【解决方案1】:

假设您想同时优化两个标准:距离和吸引力(并且说路径吸引力被定义为最吸引人的边缘的吸引力,尽管您可以考虑不同的定义)。 Dijkstra 的以下变体可以证明是有效的,但我认为它主要适用于其中一个标准采用少量值的情况 - 比如说吸引力是 1, ..., k固定k(i越小越好)。

standard pseudocode for Dijsktra's algorithm 使用单个优先级队列。而是使用 k 优先级队列。优先级队列 i 将在 Dijkstra 算法中对应到节点 v ∈ 的最短路径。 V 具有吸引力 i。

首先初始化每个节点在距离 ∞ 的每个队列中(因为,最初,到 v 的最短路径具有吸引力 i em> 是无限的)。

在 Dijkstra 主循环中,它说

 while Q is not empty

改成

 while there is an i for which Q[i] is not empty
     Q = Q[i] for the lowest such i

然后从那里继续。

请注意,当您更新时,您会从队列Q[i] 中弹出,并插入到Q[j] 以获取j ≥ i。

可以修改 Dijkstra 松弛属性的证明来证明这是可行的。

请注意,您将获得最多 k |V| 个结果,根据节点和吸引力,您可以获得到具有给定吸引力的节点的最短距离。

示例

以cmets为例:

因此,基本上,如果一条路径的总无覆盖英里数 >10,那么我们会选择另一条路径。

这里,例如,假设英里是整数(或可以四舍五入为整数),我们可以创建 11 个队列:队列 i 对应于 i 的最短距离无保障里程,但 10 英里除外,它对应于 10 或更高的无保障里程。

在算法的某个时刻,假设队列 3 下方的所有队列都是空的。我们弹出队列 3,并更新顶点的邻居:这可能会更新,例如队列 4 中的某个节点,如果从弹出节点到另一个节点是1。

当算法运行时,它输出(节点,无覆盖距离)→最短距离的映射。在这里,您可以决定放弃对中第二项为 10 的所有映射。

【讨论】:

  • 你说的是每次多保留k倍的空间。所以实际上我们可能会计算 Dijkstra k 次,将结果存储到 k 个不同的队列中,并根据我们的需要从每个队列中请求?!
  • 一个问题是如何计算吸引力。让我们举这个例子并推导出公式:假设这种吸引力是道路网络覆盖范围有多好,从 1 级到 5 级。所以基本的愿望是不要选择总无覆盖英里数小于 1 英里的路线。临界点。因此,基本上,如果一条路径的总无覆盖英里数 > 10,那么我们会选择另一条路径。你能把你的 k-queue 方法应用到这个例子中吗?
  • 如果我们想详细说明,比如说 10 次 0.1 英里的无覆盖比整个连续 1 英里的无覆盖要好。那么问题是如何定义这种吸引力?我只是需要一些想法。
  • @TinaJasmin “所以基本上,如果一条路径的总无覆盖英里数 >10,那么我们就选择另一条路径” - 为这种情况添加了一个详细示例。除此之外,我真的觉得你应该提出单独的问题——这对于一个问题来说太长太详细了。
  • 我昨天和朋友讨论了这个问题,并提出了一些部分有趣的表述,但是,我们猜它可能是 np-hard :-/ 会单独问。这是一个非常有趣和复杂的问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-27
  • 2016-11-05
  • 2021-08-29
相关资源
最近更新 更多