我想出了一个基于BFS的路径寻找算法,作为Diskjstra的替代方案(老实说,我怀疑其他人在过去提出过,但我在任何地方都找不到任何提及)。我试图找出运行时间是什么,但我和我的朋友正在辩论它,并没有能够拿出明确的答案。这里有一个链接,描述和执行算法在Go中: https://github.com/joshlf13/bfspath基于BFS的路径寻找算法的运行时间
我感觉运行时间是e + e^2 + e^4 + ... + e^2d其中e是每个顶点的平均边数和d是最终最短路径的距离(给出O(e^2d))。问题是,这依赖于算法的结果,正如我的朋友指出的那样,不应该考虑运行时间。我的推理是这样的:BFS的每次通过增加e的倍数考虑的顶点的数量。此外,每次考虑顶点时,这都是操作。因此,每一遍都是v(通过顶点的数量)次e。如果v是1,那么e是e^2等,v * e是e + e^2 + e^4等。
不同的方法是考虑运行时间。长度为N的边缘需要N次操作。因此,对于E边和平均边长为N的图,它是O(N * E)。然而,这只适用于在算法运行期间考虑的图的部分,并且该子集的大小并不与起点和终点之间的距离成线性比例,这真正考虑了O()困难。
想法......?
这比dijstra更快吗?对于具有非常长的边缘的图表,这可能会有可怕的表现... – moowiz2020 2013-03-22 05:35:23
它可以用较小的边缘长度更快。你说的对,如果边长很长,它也可能会非常慢。 – joshlf 2013-03-25 22:13:59