运行时间(log base 2(n)* log base 2(n))

时间:2017-05-23 01:39:02

标签: algorithm runtime big-o

我知道所有基本的大写字母

但是这个让我很困惑...... :(

根据Wolfram Alpha

log base 2(n)* log base 2(n)在数学上是log ^ 2(n)/ log ^ 2(2)。

我知道大o必须是O(1),O(log n),O(n),O(n log n)之一...指数.. factorial .....

但是,我不知道log base 2(n)* log base 2(n)在哪里适合

如果我使用像

这样的代码进行可视化
for ( int x = 1; x < n; x *= 2)
{
    for ( int y = 1; x < m; y *= 2)
    {}
}

它看起来像O(log n) 我猜对了吗?

3 个答案:

答案 0 :(得分:1)

你理解Big-O符号过于严格,没有一些有限的Big-O函数。该片段的复杂性为O(log ^ 2(n))。

查看用于解决旅行商问题的this算法的Big-O。

你可以说这可能在 O(log(n))中。但是如果有更精确的已知界限,请使用它,如果它为您提供更多信息。在这种情况下,我认为确实如此。

答案 1 :(得分:1)

时间复杂度为O(log(n)* log(n))(或者你可以写O(log ^ 2(n)))。

复杂性可以简化为O(log(n)),类似于O(n * n)如何简化为O(n)。 如果你有一个常数,例如O(4n)变为O(n),或者当你有O(n)+ O(log(n))这样的东西时,可以删除后一项,因为当n变得非常大(变为正无穷大)时,表达式O(n)+ O(log(n))和表达式O(n)之间的商变为1,因此我们只保留O(n)部分。

答案 2 :(得分:0)

尽量不要被(log 2 (n))与(log 2 (n))混淆。

(log 2 (n))增加了log平方,其时间复杂度大于(log 2 (n))。

我相信你知道在Big O中我们从等式中删除了常量和运算符,导致时间复杂度为(log 2 (n))*(log 2 (n))成为以对数时间复杂度运行的O(log(n))。