C++ 求一个简单打印函数的大oh估计 while(num>1) { 你的思路肯定是正确的,更重要的是,你正在以正确的方式处理问题。但你的最终结论还是有点偏离目标。试着用2p作为你计算的值,你会发现打印的数量不是2p,而是这个函数的倒数。

C++ 求一个简单打印函数的大oh估计 while(num>1) { 你的思路肯定是正确的,更重要的是,你正在以正确的方式处理问题。但你的最终结论还是有点偏离目标。试着用2p作为你计算的值,你会发现打印的数量不是2p,而是这个函数的倒数。,c++,big-o,cout,C++,Big O,Cout,它是O(logn)。原因是每次迭代都会将范围减半。如果你熟悉二进制搜索,那么如果你做了类似的事情,那么你的循环就可以了 您已经正确地观察到了2^p模式。与此相反的是log base-2(而不是log base-10)。当人们在大O表示法中提到log时,他们通常指的是base-2版本。只需使用主定理即可。 b=2 f(n)=1 a=1。floor(log2(p))实际上。你搞错了:你想知道根据输入打印多少次,而不是打印需要输入多少次。p是输出(你想计算的),而不是输入。答案应该是:p=someF

它是
O(logn)
。原因是每次迭代都会将范围减半。如果你熟悉二进制搜索,那么如果你做了类似的事情,那么你的循环就可以了


您已经正确地观察到了
2^p
模式。与此相反的是log base-2(而不是log base-10)。当人们在大O表示法中提到
log
时,他们通常指的是base-2版本。

只需使用主定理即可。
b=2 f(n)=1 a=1。

floor(log2(p))实际上。你搞错了:你想知道根据输入打印多少次,而不是打印需要输入多少次。
p
是输出(你想计算的),而不是输入。答案应该是:
p=someFunctionOf(num)
。在本例中,大O是一个函数,用于描述某些
num
的循环数。请看本文档的最后一张幻灯片->。实际上,基数并不重要。O(logn)可以位于任何基数中,因为唯一的区别是常量因子,而在大O表示法中忽略了常量因子。
while (num > 1)
{
    cout << "num is now " << num << endl;
    cout << "hello // \n";
    num /= 2;
}