【问题标题】:Algorithms for bidirectional graphs双向图的算法
【发布时间】:2011-04-29 02:17:36
【问题描述】:

假设我有一个节点图(网络),权重如下: 1. 在两个节点之间的链路上单向行驶。 2. 在两个节点之间的链接上以另一种方式行驶(这些可能不同)。 3. 从一个链接更改为另一个链接。

另外,有些节点是单向的。

在这种情况下,什么是最好的算法: a) 找到最小生成树 b) 找到两个节点之间的最短路径 c) 找到“旅行推销员”的路径(即最短的路线去任何地方,重复最少)?

另外,是否最好将双向事物视为两条单向路径,而不是在每个方向上具有不同权重的双向路径?

---一个例子---

              3
  A --<2/3>-- B --<3/2>-- C
  | 1        2|3
  |           |
  ^1/4       ^4/3
  |           |
  |3         4|
8 D --<3/5>-- E
  |2
  |
1 ^3/1
  |
  |
  F

其中 表示 2 左行和 3 右行的重量。 ^1/4 表示 1 向上移动, 4 向下移动。两个链接之间的单个数字是更改链接的成本 - 例如,从 AD 到 DF 成本为 8,从 AB 到 BE 成本为 2。

希望这是有道理的......

西蒙

(p.s 为不好的术语道歉 - “链接”,“边缘” - 无论你喜欢什么;))


为了更好地解释权重类型,假设边缘是火车轨道,节点是车站。边缘的成本是火车在两个车站之间的行程时间,节点的成本是换乘时间的长短(即使在同一节点,边缘之间也可能有所不同,具体取决于站台的距离,服务的定期性等)。

【问题讨论】:

  • 我对“将一个链接(/edge)更改为另一个”有点困惑。你的意思是改变图表?对于最短路径和旅行商来说,重要的是节点之间的权重。
  • 我这里有一个通过每个节点的权重,以及沿边缘行进的权重。将其视为一个道路系统,它相当于改变道路以及沿着道路行驶(节点是交叉路口)的成本。

标签: algorithm graph shortest-path minimum-spanning-tree


【解决方案1】:

是的,将它们视为两条边而不是一条边。然后你可以毫无问题地使用传统的图论算法,特别是如果你总是保证在每个方向都有权重。如果您只是使用我刚刚帮助您创建的“正常”图表,这些算法很容易找到。

您可以使用Dijkstra's 作为最短路径。

您可以Prim's 获取最小生成树。

您可以在 Google 上搜索非对称 TSP 来尝试找到一种算法,我很确定 算法简介 对此也有所了解。抱歉,我无法为您找到一个好的实现。这里还有几个关于非对称 TSP 的好问题,既然您知道它被称为非对称 TSP。

祝你好运!我喜欢图论。

-布莱恩·J·斯蒂纳尔-

【讨论】:

  • Dijkstra 和 Prim 都很好 - 谢谢 :) ...至于非对称 TSP,我只能在这里找到一个问题,它被关闭为“不是一个真正的问题”...你能将我链接到“好问题”之一?干杯:)
  • 我试图通过这个关于 Dijkstra 和 Prim 的图结构来思考。这不是典型的非负加权图,因为它似乎具有加权顶点和边。是否需要先将顶点上的权重分配到边上?
  • 我认为权重的分布可以使用矩阵来完成,其中每一行是一个顶点权重方程,每一列是一个边。然后使用高斯消元法找出边缘的附加权重。
  • 我在理解这种情况下顶点本身的权重实际上意味着什么时遇到了一些麻烦。我知道边上的权重代表使用该边从一个顶点过渡到另一个顶点的成本,但是顶点上的权重代表什么?我也不清楚使用高斯消除的建议,您的意思是实际的边权重方程只是边权重+顶点的总和,您将计算邻接矩阵中所有边的总和吗?
  • 好吧,实际上有很多关于“不对称”和“TSP”的好问题......维基百科的文章还不错,但我实际上并没有看到适合你的实现。 :-( en.wikipedia.org/wiki/…
【解决方案2】:

对于您的“交换”权重,您可以制作一个小子图来对它们进行编码。例如,您有:

  |   
  |3  
8 D --
  |2
  |

您可以仅使用边缘上的权重对其进行编码,如下所示:

  |
  |
  D0
  | \3
  |  \
 8|   D2--
  |  /
  | /2
  D1
  |
  |

请注意,您不必使用 8 边从 D0 到 D1,因为您可以使用 D0->D2->D1 来代替 5 的权重。我不确定您的原始配方是否允许这样做。

【讨论】:

  • 同意——这对我正在做的事情应该没问题;当然,在其他具有类似问题的示例中(例如在红绿灯处转弯),情况并非如此。
猜你喜欢
  • 1970-01-01
  • 2019-07-04
  • 1970-01-01
  • 1970-01-01
  • 2012-01-15
  • 1970-01-01
  • 1970-01-01
  • 2018-05-22
  • 2011-06-02
相关资源
最近更新 更多