繁体   English   中英

mysql和php中无向,无权图中2个节点之间的所有最短路径

[英]All shortest paths between 2 nodes in undirected, unweighted graph in mysql and php

我需要一些帮助,以实现Mysql和Php中的最短路径问题。 据我所知,BFS算法是在无向和无权图中找到这些路径的最佳方法。 不过,我必须获得从一个顶点到另一个顶点的所有最短路径,这会变得更加复杂。 我已经为此找到了Java实现,但是对我来说将其转录为Sql太复杂了。

因此,第一个问题将是:我应该在哪里进行计算? MySQL或PHP? 哪里会更快?

另外,BFS是否是最佳选择? 有没有更容易实现的解决方案? 如果不是,是否有人可以轻松参考并改编我可以用作参考的代码?

谢谢!

在像MySQL这样的扁平关系数据库中存储复杂的分层数据并非易事,更不用说算法搜索了。 我当然不建议尝试完全实现用于在SQL中搜索图形的算法。

至于在PHP中实现广度优先搜索,在github上的PHP中有一些很好的Tree实现可能会有所帮助。 很好的文章,供您参考PHP中 特定于PHP的 btrees处理 对于加权无向图而言,它不够具体,但对于它可能会提供一些方向的通用性而言,它不够。 广度优先搜索基本上只是一个队列/堆栈,您在其中将叶子节点弹出分支,因此迭代或递归实现并不困难。

我认为,最短路径搜索的最简单方法是A *搜索 ,尽管不能保证找到所有最短路径,例如BFS,因为它通常会在找到末端节点后立即停止,因此可能很多易于实施,并且并非无法进行调整以搜索所有路径。

还有Dijkstra的算法,该算法和A *都非常适合查找最短路径。 这是我在Dijktra和BFS之间的最短路径对比中找到的一个很好的cs.stackexchange答案

希望能有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM