我被分配一项任务,我必须检查一群人是否有“亲密的友谊”。这被定义为一组人,其中组中的所有人都是与组中所有其他人的朋友。到目前为止,我将其作为算法:
1)将顶点初始化为未访问
2)从任意顶点v开始对图进行DFS遍历,将已访问的顶点标记为已访问
3)如果DFS遍历访问了所有顶点,则返回true
4)如果不是,则返回false。
现在我必须计算时间复杂度。但是,我通常很难度过时间,而且我不确定如何做到这一点。我看到的方式是遍历集合中的所有顶点,这将是... O(v)?它是否正确?如果是的话,我该怎么办?
答案 0 :(得分:1)
由于在DFS中,您仅访问所有顶点一次,但是您遍历每条边以查看该边是将您带到新顶点还是已看到的顶点,因此对DFS复杂度的非常准确的度量是O(边缘)。
但是对于DFS问题的复杂性,O(#vertices)通常也是可接受的答案,因为当您看到一条边没有将您带到一个新的顶点时,您就无需对其进行进一步的研究了。
因此,当被问到时,您可以给出任何答案并解释其原因,因为在支持的解释中,这两个都不对。
但这可能不是您要解决的实际问题的答案。您正在尝试找到一个紧密联系的小组。
在图形术语中,一个紧密联系的朋友组将是每个朋友节点与其他每个朋友节点共享一条边的人。 (重新阅读您的问题-实际上是这样说的。)
在下图中,大多数图已连接,并且可以使用DFT遍历从一个节点访问其他节点。但是紧密的队列是具有相同颜色的节点组。