我正在解决这个CLRS问题,该问题要求找出图G(V,E)
的每个顶点的不确定性。我发现解决方案是O(|E|)
,因为我们只需扫描所有边来找出所有顶点的度数。
但我在网上发现的大部分解决方案都是O(|V|+|E|)
。怎么会?顶点如何计算所花费的时间?
答案 0 :(得分:0)
如果我们假设有向图的实现使用了顶点对象,并且每个顶点都有一个相关的后继列表而没有其他数据结构,那么就不可能直接迭代边。
如果连接了有向图,则每个椎骨具有至少一个相关边缘。这意味着通过顶点迭代对边进行迭代需要O(|E|)
时间 - 顶点上的迭代不会增加运行时间,而运行时间由边数决定。
如果有向图未连接,则顶点上的迭代不一定由边数决定;甚至必须处理孤立的顶点,只是为了发现它们没有相关的输出弧,这可以在O(|V|+|E|)
时间内完成。
总之,O(|V|+|E|)
的运行时界限在任何一种情况下都是正确的;但是,对于连接的有向图(或允许直接迭代边缘而不管顶点数量的实现),可以获得O(|E|)
的更紧密的运行时限制。