如果它需要重新访问BFS中的访问节点,那么时间复杂度是多少?

时间:2018-06-15 14:49:10

标签: algorithm time-complexity breadth-first-search

我正在研究算法问题。

对于简化,问题可以简化为:

给定一个m * n矩阵,带有一堆特殊点,找到该矩阵中从A点到B点的最佳路径。 最佳路径是通过最少特殊点的路径。如果有多条特殊点的路径较多,请选择最短的路径。如果仍有多条路径,请在其中随机选择一条路径。

这个问题绝对可以通过BFS解决。要保留队列,请记录每个点的信息。如果找到更好的路径,请更新信息并将此点放入队列。最后在B点输出信息。

棘手的部分是一个点可能会重复多次,在这种情况下我无法估计时间复杂度。任何人都可以帮我吗?

1 个答案:

答案 0 :(得分:3)

最终目标是不打击任何特殊点或尽可能少。您可以使用Dijkstra进行以下设置:普通边缘成本1.特殊点和所有其他成本之间的优势超过m*n(因此,即使您在没有特殊节点的情况下经历整个迷宫,它也比一个更好步骤,但通过特殊节点)。

然后你运行Dijsktra而你拥有它。由于每个节点具有最大边缘量的图形(其矩阵,最多4个方向),边缘的数量约为4 * m * n,即O(m*n)

因此,V=(m*n)E=O(m*n)以及Dijkstra是O(V + E*log E)。只需将其放在那里就可以获得O(m*n + m*n * log(m*n)) = O(m*n*log(m*n))