我对使用大O符号添加感到困惑。
我要创建一个算法来查找图表的MST,其中包含学校问题的其他要求。它的时间复杂度在 O(E * log V)中,其中E是边数,V是图中顶点数。我已经找到了 O(E * log V)+ O(V)的解决方案。
是否认为 O(E * log V)+ O(V)= O(E * log V)?
感谢您的所有答案!我假设连接图上的这种复杂性,在未连接的图上,我的算法在 O(E * log V)中工作。
答案 0 :(得分:2)
对于任何x,您可以创建一个带有x边和2ˣ(通常是断开连接的)顶点的图形。
对于这样的图,E log V =x²,所以(V + E log V)/(E log V)=(2ˣ+x²)/x²。
随着x的增加,这种情况不受限制地增长,因此O(E log V)+ O(V)与O(E log V)不同,即使对于图形也是如此。
但是,如果您指定已连接的图表,那么您有V&lt; E.在这种情况下,只要V> = 2,就得到V + E log V&lt; E + E log V <= 2(E log V)
因此连接图表的O(E log V)= O(E log V)+ O(V)。
答案 1 :(得分:0)
O(ElogV + V)与O(ElogV)不同。通常,V可以任意大于ElogV,这使得两个复杂性类别不同。
但是,假设您有一个O(ElogV + V)时间算法用于查找MST(如果存在),则可以将其转换为保证O(ElogV)时间算法,假设图形以邻接列表形式表示。 / p>
我们可以在O(E)时间内确定E> = V / 2。浏览图形的顶点,看看是否有与该顶点相邻的边缘。如果找到没有相邻边的顶点,则图表显然没有MST,因为该顶点未连接到图的其余部分。如果您已遍历所有顶点,则表示E> = V / 2。如果在n步后找到一个没有相邻边的顶点,你知道图中至少有(n-1)/ 2个边,所以这个过程需要O(E)时间(即使天真地看起来像是O( V)时间)。
如果E小于V / 2,则图表断开(因为在连接图中,E> = V-1),并且没有MST。
所以:检查E&gt; = V / 2是否只有这样,运行你的MST算法。
这需要O(E + ElogV + V)= O(E + ElogV + 2E)= O(ElogV)时间。