我知道所有基本的大写字母
但是这个让我很困惑...... :(
根据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) 我猜对了吗?
答案 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))。