社区
数据结构与算法
帖子详情
关于Dijkstra算法是否可求最长路的求证
dqdx_zch
2010-05-17 09:42:55
把权设为负值,在DAG中用Dijkstra算法求最长路是否可行啊?
Dijkstra算法不允许有负权边,我认为不能,
但是我们同学说可以,稍微改动了一个地方,没有用到拓扑排序什么的?
是否可行?
...全文
1538
20
打赏
收藏
关于Dijkstra算法是否可求最长路的求证
把权设为负值,在DAG中用Dijkstra算法求最长路是否可行啊? Dijkstra算法不允许有负权边,我认为不能, 但是我们同学说可以,稍微改动了一个地方,没有用到拓扑排序什么的? 是否可行?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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就是个贪心的思想,所以可以吧,呵呵!
图论算法精讲+刷题实战
算法精讲+刷题实战,讲解算法之后,进行刷题实战,详解如何分析问题,设计算法,优化算法和刷题技巧。包括三大模块:图的存储(邻接矩阵、边集数组、邻接表、链式前向星),最短
路
径(Dijkstra、Floyd、Bellman_Ford、SPFA),最小生成树(Prim、Kruskal)。
算法设计与分析期末复习题
算法设计与分析期末复习题
图上的文章(再谈最短
路
问题)
虽说是再谈 然而我好像在blog中从来没有谈过最短
路
的问题 Dijkstra 简单的dijkstra就是n^2的效率 其中一个很重要的操作是找到dis最小的点 由此进行下一次的转移 如果我们在这里加上堆,那么复杂度就可以降为nlogn 这是目前最好的复杂度 在代码中,我用结构体和priority_queue完成的堆操作 (写完我就要疯了) ...
ACM暑假集训总结
ACM的暑假集训结束了,趁着军训还没开始,对整个暑假接触到的东西作了一个总结,因为刚参加ACM不久,所以内容大都比较基础吧,文章中提到了些参考资料,如果需要的话,请留下邮箱。 目录 1)数据结构 1.并查集 2.高精度数 3.线段树 4.字典树<未完成> 2)常用算法 1.递推 2.动态规划 3.贪心 4.搜索 3)图论部分 1.2-SAT问题 2.差分约束...
计算机基础与程序设计
1程序结构 顺序结构、选择结构(分支结构)、循环结构 2.位 字节 bit是位 是指为0或者1,byte是指字节,一个字节 = 八个位 3.基础认识 c语言编写的程序称为源程序,又称为编译单位 只有一个main函数,是程序运行的起点 4.标识符 关键词不能作为标识符号 预定义标识符:define scanf printf include 可以做为用户标识符 5.进制转换 十进制转换成二、八、十六进制 二、八、十六进制转换成十进制 C语言只有八、是、十六进制,没有二进制 !!!
数据结构与算法
33,010
社区成员
35,327
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章