搜索最短路径时的BFS性能

时间:2013-03-10 21:36:21

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

最多 10 000个节点的图表,每个节点最多可包含 4个相邻节点。图表未加权未定向。任务是从节点A到节点B查找最短路径。路径长度是路径中访问的节点数。 BFS算法可以在一秒中找到该路径并使用小于 64mB 的内存吗?

原始问题是网格(最多100 * 100)以及可以访问的地点,开始地点,结束地点和无法访问的地点。我的第一个猜测是减少使用BFS搜索在未加权图中找到最短路径。但是,我不确定使用大图表的解决方案的速度和内存使用情况。

2 个答案:

答案 0 :(得分:2)

空间复杂性

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

时间复杂度

百科:

  

时间复杂度可以表示为每个顶点的O(| V | + | E |)   并且在最坏的情况下将探索每一条优势。注意:O(| E |)可以   在O(| V |)和O(| V | ^ 2)之间变化,取决于输入的稀疏程度   图是(假设图表已连接)。

因此,在最坏的情况下,时间复杂度为O(|V|+|E|) = 40 000 + 10 000 = 50 000。使用现代计算机,不会在1秒内计算出问题。

答案 1 :(得分:0)

1s是不错的(更像0.001s - 现代计算机上每秒10 ^ 9次操作)。

内存 - 你需要邻接列表表示数组int [10000] [4] +要记住关闭/使用/看不见的节点> = 10000 * 4 * 6 = 240000 = 0.24MB。如果我的数学还可以,那应该没问题。