关于Dijkstra算法是否可求最长路的求证

dqdx_zch 2010-05-17 09:42:55
把权设为负值,在DAG中用Dijkstra算法求最长路是否可行啊?
Dijkstra算法不允许有负权边,我认为不能,
但是我们同学说可以,稍微改动了一个地方,没有用到拓扑排序什么的?
是否可行?
...全文
1538 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
hua_zhixing_ 2010-05-22
  • 打赏
  • 举报
回复
求最长的路径我最短路径应该是一样的吧。。。。。
dqdx_zch 2010-05-22
  • 打赏
  • 举报
回复
Dijkstra算法确实不能用作把权值给负后求最长路

这种情况贝尔曼方法可以求出,在没有负权回路的情况下。
dqdx_zch 2010-05-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 superdullwolf 的回复:]

上面链接贴错了,参考这个问题
如何拿到最有价值的俄罗斯娃的问题

http://topic.csdn.net/u/20100509/10/fc666b29-37ec-4213-86fa-e297a94da4a5.html
[/Quote]
我看了你的代码,但是我对你的编程语言不是很了解,能简单说一下思想吗?

还有,深度优先搜索可以找最长路径吗?
广度的话,能找到最短路径,但是深度应该和邻接点的访问有关吧,不一定是最长路径
LeonTown 2010-05-20
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 donkey301 的回复:]

引用 14 楼 leontown 的回复:

引用 13 楼 donkey301 的回复:

应该不行,如果按Dijkstra算法,找第一个距离源点S最远的点时,找到的是与S直接相连的点A,这个距离在以后就不会改变了。但A与S的最远距离一般不是直连


>>这个距离在以后就不会改变了
为什么不变了?

Dijkstra算法把所有顶点分成两组:
一组为已求的最短距离的顶点集合……
[/Quote]

哦,对,
这都忘了。。。
donkey301 2010-05-20
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 leontown 的回复:]

引用 13 楼 donkey301 的回复:

应该不行,如果按Dijkstra算法,找第一个距离源点S最远的点时,找到的是与S直接相连的点A,这个距离在以后就不会改变了。但A与S的最远距离一般不是直连


>>这个距离在以后就不会改变了
为什么不变了?
[/Quote]
Dijkstra算法把所有顶点分成两组:
一组为已求的最短距离的顶点集合,设为S
另一组为剩下的未求的顶点集合,设为U
每次都从U中取出一个顶点放入S,同时更新一下U中剩下顶点的距离。但对S中已有顶点不会做任何改变。
guijieming2000 2010-05-19
  • 打赏
  • 举报
回复
是否可以将dijkstra的比较条件倒过来,也就是说越长越优先,这样算出来的最优结果,不就是最长的结果吗?
超级大笨狼 2010-05-19
  • 打赏
  • 举报
回复
LeonTown说的好像有道理。
LeonTown 2010-05-19
  • 打赏
  • 举报
回复
这个问题好像书上说是个np问题。。。

如果原图不包含回路,
应该可以用迪杰斯特拉算法吗?
augustinlouis 2010-05-19
  • 打赏
  • 举报
回复
sedgewick在他的书(algorithm in c : Graph algorithm)中明确的说了这种想法是错误的
LeonTown 2010-05-19
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 donkey301 的回复:]

应该不行,如果按Dijkstra算法,找第一个距离源点S最远的点时,找到的是与S直接相连的点A,这个距离在以后就不会改变了。但A与S的最远距离一般不是直连
[/Quote]

>>这个距离在以后就不会改变了
为什么不变了?
donkey301 2010-05-19
  • 打赏
  • 举报
回复
应该不行,如果按Dijkstra算法,找第一个距离源点S最远的点时,找到的是与S直接相连的点A,这个距离在以后就不会改变了。但A与S的最远距离一般不是直连
tanggui2007 2010-05-19
  • 打赏
  • 举报
回复
可以的,最短最长都是定义的。
fenix124 2010-05-19
  • 打赏
  • 举报
回复
不行的。
绿色夹克衫 2010-05-18
  • 打赏
  • 举报
回复
应该不行,如果求的是最长的不包含回路的简单路径,可能不光是Dijkstra不行,Bellman恐怕也不行。
gbb21 2010-05-17
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 leontown 的回复:]

如果原图的权值都是正值的话,
找一个最大的权值,用它减去所有的权值,得到新的权值,
再求最短路径,应该对应为原来的最长路径吧。。。
[/Quote]
计算以后路径上的权值还能加么?
LeonTown 2010-05-17
  • 打赏
  • 举报
回复
如果原图的权值都是正值的话,
找一个最大的权值,用它减去所有的权值,得到新的权值,
再求最短路径,应该对应为原来的最长路径吧。。。
gbb21 2010-05-17
  • 打赏
  • 举报
回复
[Quote=引用楼主 dqdx_zch 的回复:]
把权设为负值,在DAG中用Dijkstra算法求最长路是否可行啊?
Dijkstra算法不允许有负权边,我认为不能,
但是我们同学说可以,稍微改动了一个地方,没有用到拓扑排序什么的?
是否可行?
[/Quote]

只有当权值没有负值的时候,局部最优才与全局最优相印证,Dijkstra的贪心才能起作用。你的想法是正确的。

超级大笨狼 2010-05-17
  • 打赏
  • 举报
回复
上面链接贴错了,参考这个问题
如何拿到最有价值的俄罗斯娃的问题

http://topic.csdn.net/u/20100509/10/fc666b29-37ec-4213-86fa-e297a94da4a5.html
超级大笨狼 2010-05-17
  • 打赏
  • 举报
回复
拓扑排序,只是有向图,不需要。

最长路径,当然是深度优先了。

不需要Dijkstra算法,因为你深搜要搜所有的路径,不是广度优先,也没有剪枝和启发。

参考这个问题。 http://topic.csdn.net/u/20100508/22/7bc92b38-770e-462d-8662-d9ef8ed3afb4.html

可以用在图的搜索上,因为你的图可以表示为邻接矩阵,二维数组。
不用数组表示也是一样的,把递归的参数准备好,包括F(起点,状态,结果,路径 )

遇到递归搜索(图的遍历),先把F写出来,基本上套路是接近的。
宅男小何 2010-05-17
  • 打赏
  • 举报
回复
我觉得可以,只要把每一步更新节点的权值时,一最长为标准,dijkstra就是个贪心的思想,所以可以吧,呵呵!

33,010

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧