最多 10 000个节点的图表,每个节点最多可包含 4个相邻节点。图表未加权且未定向。任务是从节点A到节点B查找最短路径。路径长度是路径中访问的节点数。 BFS算法可以在一秒中找到该路径并使用小于 64mB 的内存吗?
原始问题是网格(最多100 * 100)以及可以访问的地点,开始地点,结束地点和无法访问的地点。我的第一个猜测是减少使用BFS搜索在未加权图中找到最短路径。但是,我不确定使用大图表的解决方案的速度和内存使用情况。
答案 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。如果我的数学还可以,那应该没问题。