【问题标题】:Shortest Paths with yellow and black edges黄色和黑色边缘的最短路径
【发布时间】:2013-01-02 18:13:51
【问题描述】:

给定有向加权图 G=(V,E)。
没有负加权边缘。
每个边缘都有颜色(黑色或黄色)。

我需要找到一种算法来找到给定 s ∈ V 的最短路径,而每条路径都必须遵循以下规则:color(vi,vi+1 sub>)=color(vi+3,vi+4), ∀i :1 ≤ i ≤ k-4 而路径为 v1 → ... → vk。 算法需要在O(|V|+|E|log(|V|))内。

【问题讨论】:

  • 你似乎知道 TeX。现在,是时候学习一些stackoverflow了。请编辑您的帖子以使其可读。
  • 我怎样才能让它更具可读性?

标签: algorithm graph graph-theory shortest-path


【解决方案1】:

作为提示:尝试修改 Dijkstra 算法以存储两个不同的优先级队列:一个包含从起始节点到以黄色边缘结束的目标节点的路径成本,以及从起始节点开始的路径成本到以黑边结束的目标节点。然后,更新逻辑以找到下一个节点以选择考虑两个队列,并更改减少键逻辑以确保您使用正确的信息更新正确的队列。这可以通过普通 Dijkstra 算法的常数因子开销来完成,因此需要时间 O(|E| + |V| log |V|)。

希望这会有所帮助!

【讨论】:

  • 我认为这不是正确的解决方案。我想我需要调整图表以准确到正确的可能路径。你的答案似乎是错误的。你怎么知道路径是正确的?
  • @BarniWize-您可以调整 Dijkstra 算法的正确性证明以适用于此修改后的算法。假设您已经计算了一组节点 S 的最短交替路径,并且想要扩展该集合以包含一个新节点 v。我的主张是该算法将为您提供最短路径。要看到这一点,假设它没有。然后有一条通往节点 v 的路径从 S 开始,离开 S 的一条次优边,然后继续前进。但在这种情况下,从 v 到 S 的路径的成本超过了我的算法产生的路径,所以它不会更短......
  • @BarniWize- ...因此我的算法必须产生最短的交替路径。
  • @BarniWize- 还有另一种方法可以通过调整图表来实现,尽管我认为它的效率较低。另外,你能告诉我为什么你认为算法不正确吗?可能我弄错了,但从你的 cmets 我可以看出你认为不正确。
  • @BarniWize-我假设这是一个家庭作业问题(考虑到你的措辞),所以我将把细节留作练习。但是,只要您的递减键步骤始终忽略错误颜色的边缘,显示您始终获得合法路径应该很简单。
【解决方案2】:

您可以像 templatetypedef 建议的那样修改 Dijkstra 的算法,或者修改图形以适应约束。

您可以使用DFA 识别颜色约束,并将其与您的加权图结合以获得可以应用未修改的 Dijkstra 的图,从而实现典型的 Dijkstra 运行时。

约束的确切开销取决于 DFA 的大小,但它是恒定的,因为 DFA 不依赖于输入。

【讨论】:

  • 这不是同一个算法,只是表达方式不同?无论哪种情况,您都只需通过 [node]x[edge color] 空间进行 Dijkstra。
猜你喜欢
  • 2014-08-03
  • 2011-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多