Java JGraphT中无权图的单源最短路径
有许多最短路径的实现(Dijkstra、Belman Ford等) 我需要一个未加权图的单源最短路径 以下是我的问题(针对JGraphT):Java JGraphT中无权图的单源最短路径,java,algorithm,graph,shortest-path,jgrapht,Java,Algorithm,Graph,Shortest Path,Jgrapht,有许多最短路径的实现(Dijkstra、Belman Ford等) 我需要一个未加权图的单源最短路径 以下是我的问题(针对JGraphT): 首先,我假设对未加权图使用Dijkstra是浪费的(使用优先级队列,该队列的队列deque比BFS使用的常规队列慢,并且由于在未加权图上所有权重都是1,因此这实际上并没有增加任何值)。我的假设正确吗 假设1的答案是“是”,那么我假设我将使用breadthfirsterator而不是滚动我自己的(经过单元测试,而且像简单的BFS一样,我肯定我会有一些小错误,
breadthfirsterator
而不是滚动我自己的(经过单元测试,而且像简单的BFS一样,我肯定我会有一些小错误,甚至Java的二进制搜索也有整数溢出,这要感谢Josh Bloch自己引入的错误,直到2006年才解决!)。但问题是,从原始BFS到实际获取单源最短路径还有一个(非常小的)步骤,我是否应该编写自己的unweightedsinglesourceshortestpath
类?或者JGraphT核心库中是否隐藏了一个我可以直接插入的库因为我认为我找到了第二个问题的答案,我认为它也回答了第一个问题(如果JgraphT的Dijkstra对于所有权重=1的简单情况是最有效的,那么为什么CDK会创建自己的呢?)
这里是#2的答案-是的,有一个开源(LGPL)解决方案:对于未加权图,所有边都具有相同的权重,因此优先级队列将不相关,在这种情况下,Dijkstra将是图上的简单BFS。是的,但是如果Dijkstra使用堆优先级队列,队列和出列是O(LogN)否?所以,如果我对一个未加权图做Dijgstra,而BFS做同样的图,BFS会更快吗?(虽然他们都会给我相同的结果…)