Longest distance problem has no optimal substructure 代表 any graph ,DAG与否 . 然而,图G上的任何最长距离问题等同于变换图G'中的最短距离问题G'= - G,即每个边权重的符号被反转 .
如果变换后的图形G ' is expected to have negative edges and cycles, then Bellman-Ford algorithm is used for finding shortest distance. However, if G is guaranteed to have only non-negative weights (i.e. G'是非正权重,那么Dijkstra 's algorithm could be better choice over Bellman-Ford. (see ' Evgeny Kluev'对_498088的响应_)如果G是DAG,则G ' will be a DAG too. For DAG, we'更好的算法用于找到最短距离并且应该在Dijkstra 's or Bellman-Ford' s上选择 .
Summary:
最长的路径问题没有最优的子结构,因此修改Dijkstra中的最小权重函数可以用于图形,无论是否为DAG . 我们宁愿转换G,而不是修改任何最短路径算法(以微不足道的方式),并且看看哪个最短路径算法在转换后的G.上运行得最好 .
Note
A-------B
| | assume: edges A-B, B-C, C-A of same weight
| |
+-------C
我们看到MAX_DIS(A,B)= A-> C-> B.
对于"MAX_DIS"是最优结构,在上述情况下,是关系
MAX_DIS(A,B) = MAX_DIS(A,C) + MAX_DIS(C,B) should be satisfied.
但它并不像我们所见,MAX_DIS(A,C)= A-> B-> C和MAX_DIS(C,B)= C-> A-> B因此它提供了一个最长距离问题可能没有的例子最佳子结构 .