Python 广度优先搜索还是深度优先搜索?

Python 广度优先搜索还是深度优先搜索?,python,algorithm,graph,Python,Algorithm,Graph,我正在实现一个由100000多个节点组成的大型有向图。我刚刚开始学习python,所以我只知道这两种搜索算法。如果我想找到任意两个节点之间的最短距离,哪一个更有效?还有其他我不知道的更好的方法吗 感谢您抽出时间事实上,BFS和DFS还有其他几种替代方案 一个非常适合计算最短路径的算法是:“s_算法” Dijsktra的算法基本上是BFS算法的一种改进,如果对图进行加权,它比搜索整个图要高效得多 正如@ThomasH所说,只有当你有一个加权图时,Djikstra才是相关的,如果每条边的权重相同,它

我正在实现一个由100000多个节点组成的大型有向图。我刚刚开始学习python,所以我只知道这两种搜索算法。如果我想找到任意两个节点之间的最短距离,哪一个更有效?还有其他我不知道的更好的方法吗


感谢您抽出时间

事实上,BFS和DFS还有其他几种替代方案

一个非常适合计算最短路径的算法是:“s_算法”

Dijsktra的算法基本上是BFS算法的一种改进,如果对图进行加权,它比搜索整个图要高效得多

正如@ThomasH所说,只有当你有一个加权图时,Djikstra才是相关的,如果每条边的权重相同,它基本上默认回到BFS

如果在BFS和DFS之间进行选择,则BFS更适合于查找最短路径,因为在移动到距离较远的节点之前,您将完全探索节点的紧邻区域

这意味着,如果有一条大小为3的路径,例如,在算法继续探索距离为4的节点之前,将对其进行探索

使用DFS,您没有这样的保证,因为您深入探索节点,您可以找到一条更长的路径,而这条路径恰好是之前探索过的,您需要探索整个图,以确保这是最短的路径

至于你为什么会获得否决票,大多数问题应该表明,在寻找解决方案方面已经付出了一些努力,例如,关于DFS与BFS的利弊,有几个相关的问题


下次试着确保你已经搜索了一点,然后问一些关于你有任何疑问的问题

看看以下两种算法:

  • -单源最短路径
  • -所有对最短路径

  • 如果图上的边没有权重,则可以进行简单的广度优先搜索,在该搜索中迭代访问图中的节点,并检查是否有任何新节点等于目标节点。如果边有权重,DJikstra算法和Bellman-Ford算法就是你应该关注的东西,根据您所看到的预期时间和空间复杂性。

    当您想要查找最短路径时,您应该使用BFS而不是DFS,因为BFS首先搜索最近的节点,所以当您达到目标时,您可以确定您使用了最短路径,并且可以停止搜索。而DFS一次只探索一个分支,所以当您达到目标时,您无法确定是否有另一条路径通过另一个更短的分支

    所以你应该使用BFS

    如果图的边上有不同的权重,则应使用Dijkstra算法,该算法是BFS对加权图的一种改编,但如果没有权重,则不要使用该算法


    有些人可能会建议您使用Floyd Warshall算法,但对于这么大的图来说,这是一个非常糟糕的主意。

    使用。它是BFS,用于互联网数据包路由(OSPF),你知道吗?了解这个概念将大大有助于理解其他算法。谢谢你的回答,但你也能告诉我为什么我会被否决。我的账户一直被封锁,因为我一直被否决。老实说,我没有发现我的问题有任何问题……Dijsktra不相关,因为边上没有权重。感谢您的输入。我想我会选择BFS,Dijsktra的算法对我来说太难实现了。你应该放更多的文本。弗洛伊德确实是一个很好的op,无论图表是否加权。