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算法虽然复杂,但它在实际应用中,比如在地图导航、网络路由等领域,还是挺有用的。嗯,就这样吧。