在给定形容词列表表示的情况下,查找通用接收器的时间复杂度是多少

时间:2017-11-06 23:14:44

标签: algorithm depth-first-search breadth-first-search graph-traversal

这个问题有很多变种,在printBits时间内提出解决方案。

但是,如果我想计算图中是否有通用接收器并且我在邻接列表中表示图形,那么最坏的情况是什么?这很重要,因为所有其他算法似乎对邻接列表更好,所以如果找到通用接收器不是我需要的频繁操作,我肯定会继续使用列表而不是矩阵。

在我看来,时间复杂度将是图表的大小,即O(|V|)。用于查找图的通用接收器的算法如下。假设邻居列表,从图的索引1开始。检查索引O(|V| + |E|)处的邻接列表的长度,如果它是1,则遍历列表以检查是否存在自循环。如果list没有自循环|V| - 1,则所有其他顶点都是列表的一部分,请存储列表索引。然后,我们必须通过其他列表来检查此顶点是否是其列表的一部分。如果是,则存储的顶点不能是通用接收器。继续从下一个索引搜索。即使列表是邻居列表,我们也必须搜索具有and列表的顶点,然后搜索所有其他列表以检查该顶点是否存在于它们各自的列表中。

从上面的解释可以得出结论,无论考虑什么形式的邻接列表,在最坏的情况下,找到通用接收器必须遍历所有顶点和边缘一次,因此复杂度是图的大小,即O(| V | + | E |)

但我最近加入大学助理教授的朋友提到它必须是length = 0。我在春季开始教授课程之前正在复习他的笔记,但在纠正之前我想百分百肯定。

1 个答案:

答案 0 :(得分:1)

你说得对。我们可以构建跟踪所有中间结果所需的结构,但基本的复杂性仍然很简单:我们遍历所有边缘,标记和计数引用。我们甚至可以在 O(E)时间内构建完整的转换矩阵。

根据数据结构,我们可能会发现所有边缘的第二次通过都有所改善,但2 * O(E)仍然 O(E)

然后我们遍历每个节点一次,寻找输入/输出计数和自循环。