【发布时间】:2013-09-04 19:59:56
【问题描述】:
这个问题是我之前提出的类似问题的延续:Find path between two nodes in graph, according to given criteria - optimization task。
问题总结: 我需要在图中找到从顶点 A 到顶点 B 的最佳路径,假设路径质量被计算为路径上边缘权重的最小值,而下一个最佳路径是具有最大最小值的路径。一般就是所谓的"Widest path problem"。
以前我需要在非常小的图形(最多 15 个顶点)中解决这个问题,所以我不需要复杂的算法,在好心人的帮助下,我设计了我的工作算法。 不幸的是,现在我需要以这种方式重新定义我的必需品,以至于我的图表可能非常大(甚至有 5 万条边)。 我知道我需要为我的图找到最大生成树,并在获得的 MST 中获得从开始到停止顶点的简单路径。 我决定使用jGraphT 库。它已经实现了Kruskal Minimum Spanning Tree algorithm。我可以通过将每个边权重乘以 (-1) 并将 Kruskal 用于最小生成树来获得最大生成树,但是库中的算法是为检索 MST 边的哈希集而设计的。
我的问题如下: 我已经获得了图的最大生成树作为边的 java HashSet。如何以最有效的方式在这种结构中找到从顶点 A 到顶点 B 的路径,以及什么数据结构对此最有效?你有什么推荐给我的?
此外,我担心这种情况,即我的图并不总是一致的(它可能包含孤立的顶点或孤立的子图),这是 Kruskal 算法正确性的主要条件。有没有办法绕过这个问题?
感谢您提供任何帮助或提示。
【问题讨论】:
标签: algorithm optimization data-structures graph-theory graph-traversal