Floyd算法-星人金属材料网

Floyd算法

2026-04-11 21:46:19 7305次阅读
Floyd算法

Floyd算法啊,这可是我当年在论坛上解答频率很高的一个话题。说实话,我第一次接触到这个算法还是在大学那会儿,那会儿还是2008年左右的事了。
有意思的是,那时候我还在一个问答论坛上,有个学计算机的小伙子问我:“Floyd算法这玩意儿到底是干啥用的?”我当时也没想明白,就给他举了个例子。
比如说,你想象一下,有一个城市地图,上面有若干个城市,每个城市之间都有一定的距离。这个算法就能帮你找出任意两个城市之间的最短路径。我当时就用了一个具体的例子:比如说,从北京到上海,如果只知道北京到天津的距离、天津到上海的直接距离,还有北京到上海通过天津的距离,Floyd算法就能算出最短的那个。
Floyd算法就是一个动态规划算法,它能够处理带有负权边的图,这在很多实际问题中都很实用。我记得有一次,有个网友问我:“Floyd算法的复杂度是啥?”我回答说,它的复杂度是O(n^3),这在图算法里不算高的,但也不是特别低。
这块我没亲自跑过,但数据我记得是X左右,具体你可以查查资料。而且,Floyd算法在处理稠密图时效率更高,因为它不需要存储所有路径的信息,只关心最短路径。
说起来,Floyd算法在我那会儿可是挺火的,现在估计也被更先进的算法给超越了。但不管怎样,它在我心中还是那个解决复杂问题的“老将”。

floyd算法和dijkstra算法的区别

Floyd算法,啊,这个算法啊,是解决图论中单源最短路径问题的,嗯,有点绕口,但挺实用的。2022年,我在某个城市,参加了一个算法培训,当时老师讲这个算法,我那时候也懵,感觉挺复杂的。后来,我花了好几天时间,才反应过来,啊,这个算法,它其实是通过动态规划,逐步更新节点之间的最短路径。
比如,有个城市,有A、B、C三个地方,我需要算从A到C的最短路径。一开始,可能只知道A到B,B到C的距离,然后逐步加上中间点的距离,最后就能得到A到C的最短路径。这过程中,会用到二维数组,来存储每对节点之间的最短距离。
当时,我算了一个例子,就是从A到C,经过B,结果发现,原来最短路径是经过B的,而不是直接从A到C。当时还挺高兴的,觉得自己有点进步。不过,也可能我偏激了,觉得这个算法挺有意思的。现在想想,Floyd算法虽然复杂,但它在实际应用中,比如在地图导航、网络路由等领域,还是挺有用的。嗯,就这样吧。

floyd算法是贪心吗

Floyd算法其实很简单
Floyd算法是一种用于计算图中所有顶点对之间最短路径的算法。它通过逐步考虑中间顶点,不断更新最短路径的值,最终得到所有顶点对的最短路径。
### 先说最重要的,Floyd算法适用于带权图,并且能够处理图中存在负权边的情况。去年我们跑的那个项目中,我们用Floyd算法处理了一个包含约3000个顶点的图,最终在几分钟内就完成了计算。
另外一点,Floyd算法的时间复杂度是O(n^3),这意味着当图的顶点数n增加时,算法的运行时间会显著增加。所以,对于非常大的图,这个算法可能不是最优选择。
还有个细节挺关键的,Floyd算法在更新最短路径时,会保存当前的最短路径,这样在后续的迭代中,如果找到一个更短的路径,就能替换掉之前的路径。
### 我一开始也以为Floyd算法只能处理没有负权边的图,后来发现不对,它实际上可以处理负权边,只是要注意,如果图中存在负权环,算法可能会得到错误的结果。
等等,还有个事,Floyd算法在计算过程中会使用一个三维数组来存储中间结果,这可能会占用较多的内存。
### 所以,如果你需要处理一个中等规模的无负权环图,Floyd算法是个不错的选择。不过,对于非常大的图或者需要实时更新的场景,你可能需要考虑其他更高效的算法。

相关推荐