我正在学习Big O Notation运行时间和摊销时间。我理解O(n)线性时间的概念,这意味着输入的大小按比例影响算法的增长…同样如此,例如,二次时间O(n2)等…甚至算法,如排列生成器,O(n!)次,按阶乘增长。
例如,以下函数是O(n),因为算法与其输入n成比例增长:
f(int n) {int i;for (i = 0; i < n; ++i)printf("%d", i);}
类似地,如果有一个嵌套循环,时间将是O(n2)。
但是O(log n)到底是什么?例如,说一个完整的二叉树的高度是O(log n)是什么意思?
我确实知道(也许不是很详细)对数是什么,从某种意义上说:log10 100=2,但我不明白如何识别对数时间的函数。