为什么BFS为同一图中的不同节点位置提供不同的运行时间?

时间:2013-06-06 17:16:18

标签: c++ algorithm graph-algorithm breadth-first-search

我有一个折线图,它由100个节点组成,标记为0到99。

看起来像这样:

0--1--2--3....98--99

我使用BFS,DFS,Dijkstra的算法来查找第一种情况下从节点0到所有其他节点的最短路径,我在第二种情况下对节点55(起始节点)执行相同操作,对第三种情况使用节点99

但是在BFS中,在最后一种情况下所花费的时间是第一种情况所花费的时间的两倍,但在两种情况下,节点位置在图形上是相同的。我已将运行时间附加到image

BFS中的for和while循环访问时间相同,我想知道,为什么在这三种情况下需要不同的时间?

顺便说一下,它是用C ++实现的,矢量矢量用于存储图形。

非常感谢你。

1 个答案:

答案 0 :(得分:2)

首先:你多次运行它?结果可能会有很大不同。

无论如何,很可能是因为缓存问题。当您从0访问数组时,计算机通常工作得很好,因为它们会立即从您正在访问的索引中缓存(部分)数组。但是如果从数组的末尾开始,它将不会将整个数组放在快速缓存中。 (这对于矢量没有什么不同,因为矢量只是一个动态大小的数组)

另外,你不应该用这种方式测试算法速度,你不能真正比较它们。因为如果你第一次运行BFS,它还没有缓存整个数组。但是当你运行DFS时,整个阵列可能处于处理器的快速缓存中。我建议采用更大的图形并检查稀疏图和密集图。此外,我会确保为每个算法编写单独的程序,以使用time等实用程序进行检查。