我试图了解一些检测图中循环的有效方法的时间复杂度。
此处说明了执行此操作的两种方法。我会假设时间复杂度是根据最坏情况提供的。
第一个是 union-find,据说它的时间复杂度为 O(Vlog E)。
第二种使用基于 DFS 的方法,据说时间复杂度为 O(V+E)。如果我是正确的,这是一个比 O(Vlog E) 更有效的渐进复杂性。基于 DFS 的方法也可以方便地用于有向图和无向图。
我的问题是我看不到如何考虑第二种方法在 O(V+E) 时间内运行,因为 DFS 在 O(V+E) 时间内运行,并且算法会检查与任何已发现节点相邻的节点以进行启动节点。当然,这意味着算法在 O(V 2 ) 时间内运行,因为每个发现的节点可能必须遍历多达 V-1 个相邻节点?显然不可能有多个节点需要遍历 n-1 个相邻节点,但据我了解,这仍然是运行时的上限。
希望有人理解我为什么这么认为,并可以帮助我理解为什么复杂性是 O(V+E)。