algorithm - BFS 搜索最短路径的性能

标签 algorithm search graph complexity-theory breadth-first-search

有一个图最多有10000个节点,每个节点最多可以有4个相邻节点。图是未加权无向。任务是找到从节点 A 到节点 B 的最短路径。路径长度是路径中访问的节点数. BFS 算法能否在 1 秒 内找到该路径并使用小于 64mB 的内存?

原来的问题是网格(最大100*100)和可以访问的地方,开始的地方,结束的地方,不能访问的地方。我的第一个猜测是将其简化为使用 BFS 搜索在未加权图中找到最短路径。但是,我不确定该解决方案在处理大图时的速度和内存使用情况。

最佳答案

空间复杂度

所以你有 10000 个节点,每个节点最多可以连接 4 个其他节点。最大顶点数为 40 000。在 adjency list 中它需要 O(|V|+|E|)=50 000 内存空间。每个变量都需要 32 位来在列表中表示它。最大内存量为 40000*32/(1000*1000*8)=0.16 兆字节。如果adjacent matrix使用它需要 O(|V|^2)=40000*40000/(1000*1000*8)=200 兆字节。

时间复杂度

维基百科:

The time complexity can be expressed as O(|V|+|E|) since every vertex and every edge will be explored in the worst case. Note: O(|E|) may vary between O(|V|) and O(|V|^2), depending on how sparse the input graph is (assuming that the graph is connected).

所以在最坏的情况下,时间复杂度将是 O(|V|+|E|) = 40 000 + 10 000 = 50 000。使用现代计算机,在 1 秒内完成计算不是问题。

关于algorithm - BFS 搜索最短路径的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15327960/

相关文章:

arrays - 在一个非常大的数组中计算较小或相等元素的更快方法?

SQL 选择可能包含特定值的所有记录

Python:精确定位斜率的线性部分

算法挑战 : Find the unique value in an array

摄氏度到华氏度的转换总是在摄氏度下显示零

c# - 如何产生从起点到终点的坐标对?

graph - JavaScript 中的 3D 雷达图

algorithm - 计算两个值的排列数,对运行有限制

search - 获取 2 个单词匹配的 MysQL 行

python - 如何让plotly python在打开html时不自动下载图表?