繁体   English   中英

计算DFS算法的时间复杂度

[英]Calculating time complexity of DFS algorithm

我接到了一项任务,我必须检查一群人是否有“亲密的友谊”。 这被定义为一组人,其中该组中的所有人都是该组中所有其他人的朋友。 到目前为止,我把这个作为我的算法:

1) 将顶点初始化为未访问

2) 从任意顶点 v 开始对图进行 DFS 遍历,将访问过的顶点标记为访问过

3)如果DFS遍历访问了所有顶点,则返回true

4) 如果不是,则返回 false。

现在我必须计算时间复杂度。 但是,总的来说,我在时间复杂度方面遇到了困难,我不完全确定如何做到这一点。 我的看法是我遍历了集合中的所有顶点,这将是... O(v)? 这样对吗? 如果是,我该怎么做?

由于在 DFS 中您只访问所有顶点一次,但您会遍历每条边以查看该边是将您带到一个新顶点还是一个已经见过的顶点,因此 DFS 复杂性的一个非常准确的度量是 O(#edges)。

但是对于 DFS 问题的复杂性,O(#vertices) 通常也是可以接受的答案,因为当您看到一条边没有将您带到新顶点时,您就不会进一步探索它。

所以当被问到时,你可以给出任何一个答案并解释推理,因为他们都没有支持解释。


但这可能不是您试图解决的实际问题的答案。 您正试图找到一个紧密联系的群体。

在图术语中,一组紧密相连的朋友是每个朋友节点与其他每个朋友节点共享一条边。 (重新阅读您的问题 - 它实际上是这么说的。)

在下图中,大部分图形是连接的,并且使用 DFTraversal 从一个节点可以到达其他节点。 但是接近群组是具有相同颜色的节点组。

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM