深度优先搜索——遍历随机邻居的优势

Depth First Search - Advantages of traversing random neighbours

深度优先搜索允许以任意顺序遍历相邻顶点。 选择随机邻居与选择升序邻居有什么优势吗?

考虑下图的探索顺序:

0 -> 9 -> 8 -> 7 ..
0 -> 1 -> 8 -> 7 ..

随机选择能否带来更有利的结果?

首先,乱序DFS不负责

遍历节点的方式取决于两件事:

  1. 在邻接列表中推送相邻节点的顺序(通常受输入中提供的边的顺序影响)。

  2. 您决定遍历的自定义顺序(如您所述,排序顺序)。

你问题的答案:

  1. 选择在邻接列表中推送相邻节点的顺序不会影响复杂性。

  2. 如果决定按排序遍历相邻节点,则需要相应地维护邻接表,这是以额外的因子V*log(V)为代价的。

总时间复杂度 = O(V+E) + O(V * log(V))。

O(V+E) => 对于 DFS。

O(V * log(V)) => 优先级 queue/sorting 邻接表。

此处,V = 图中的节点数,E = 边数。

我能找到有优势的情况吗?

是的。容易地。如果我有一个连通图,随机选择的遍历保证最终到达每个节点。按顺序遍历最终会陷入循环。

总的来说有优势吗?

没有。例如在连接的例子中,一个简单的“跟踪我们去过的地方”就可以让两者都达到一切。哪一个最先找到目标节点将是一个机会问题。