我的教授刚刚告诉我们,任何将输入长度减半的操作都具有O(log(n))复杂度作为拇指规则。为什么它不是O(sqrt(n)),它们都不是等价的吗?复杂度O(log(n))是否等于O(sqrt(n))?
回答
他们是不等价的:的sqrt(N)会增加很多超过日志(N)。没有常数C因此,对于所有N大于某个最小值,您将具有sqrt(N)< C.log(N)。
一种简单的方法来抓住这个,是日志(N)将是一个值接近的Ñ(二进制)位的数量,同时SQRT(N)将是一个号码本身的一半数字N有。或者,指出与平等:
日志(N)= 2log (开方(N))
所以,你需要采取的对数(! )的sqrt(N),以使其降至与相同的复杂顺序log (N)。
例如,对于有11个数字,0b10000000000(= 2 10 )一个二进制数,的平方根是0b100000,但对数仅为10
对于log(N),+1将是一个接近N的(二进制)位数的值,而sqrt(N)将是一个它自己具有N的一半位数的数字。 –
没有,它不等价的。
@trincot在他的回答中给出了一个很好的解释。我再加一点。你的教授教你的
any operation that halves the length of the input has an O(log(n)) complexity
这也是事实,
any operation that reduces the length of the input by 2/3rd, has a O(log3(n)) complexity
any operation that reduces the length of the input by 3/4th, has a O(log4(n)) complexity
any operation that reduces the length of the input by 4/5th, has a O(log5(n)) complexity
So on ...
这是所有还原(B-1)/Bth.
输入的长度甚至真的,那么它具有的O(logB(n))
N:B:
O(logB(n))
复杂表示B
基于对数n
假设natural logarithm
(否则只是乘以一个常数),我们有
lim {n->inf} log n/sqrt(n) = (inf/inf)
= lim {n->inf} 1/n/1/(2*sqrt(n)) (by L'Hospital)
= lim {n->inf} 2*sqrt(n)/n
= lim {n->inf} 2/sqrt(n)
= 0 < inf
参见https://en.wikipedia.org/wiki/Big_O_notation用于O(.)
替代认定中并从上方从而我们可以说log n = O(sqrt(n))
,
而且比较以下功能的增长,log n
始终以sqrt(n)
为大n
的上限。
不,他们不相当于;你甚至可以证明
O(n**k) > O(log(n, base))
的(在sqrt
情况下k = 1/2
)任何k > 0
和base > 1
。
当O(f(n))
交谈我们要调查的行为大n
, 限制是好手段。假设两个大O
是等价的:
O(n**k) = O(log(n, base))
,这意味着有一个有限的一些常量C
这样
O(n**k) <= C * O(log(n, base))
不够n
一些大的开始;把它放在其他方面(log(n, base)
不是0
从大n
开始,这两个功能是连续可微):
lim(n**k/log(n, base)) = C
n->+inf
要找出限制的值,我们可以使用L'Hospital's Rule,即求导的分子和分母,将它们划分:
lim(n**k/log(n)) =
lim([k*n**(k-1)]/[ln(base)/n]) =
ln(base) * k * lim(n**k) = +infinity
所以我们可以得出结论,有没有不断C
这样O(n**k) < C*log(n, base)
或者换句话说
O(n**k) > O(log(n, base))
- 1. 时间复杂度O(N日志(log n)的)+ N O(L)
- 2. 时间复杂度 - O(n^2)到O(n log n)搜索
- 3. 是log(n!)= O((log(n))^ 2)?
- 4. 时间复杂度:O(logN)或O(N)?
- 5. 大O符号 - O(n日志(N))对O(的log(n^2))
- 6. 是这个算法的渐近时间复杂度O(log n)?
- 7. 寻找关于如何计算O(n log n)的复杂度的例子?
- 8. 以下程序的时间复杂度是多少? O(log n)是否正确?
- 9. 为什么代码O(log n)的时间复杂度?
- 10. O(n * log n)工作,然后O(n^2)工作的代码的复杂性是什么?
- 11. O(fib n)复杂度算法?
- 12. 你如何看出O(log n)和O(n log n)之间的差异?
- 13. 为什么pop_heap的复杂性是O(2 * log(N))?
- 14. 复杂性理论中的O(lg(n))* O(lg(n))
- 15. 如何计算O(Log(N))?
- 16. 图形搜索O(log(N)(N + M)
- 17. O(n log n)是否有简写术语?
- 18. 这是否解决O(N log(N))时间中的3SUM?
- 19. 与log(n)相比,log(n^2)的大O是什么?
- 20. 如何确定的时间复杂度为O(M + N)或O(Math.max(M,N))
- 21. floor(√2n)的O(log log n)算法?
- 22. 具有O(n)时间复杂度的N皇后的解释?
- 23. 为什么从O(1)调度程序到O(log N)的CFS?
- 24. 证明最大(O(f(n)),O(g(n)))= O(max(f(n),g(n))
- 25. 为什么这个函数/循环O(log n)而不是O(n)?
- 26. COINCHANGE:动态编程O(N)复杂
- 27. 与复杂性为O更好(n)的
- 28. 如何使这个空间复杂度为O(1)而不是O(n)?
- 29. 计数排序O(n + k)时间复杂度是什么k?
- 30. 为什么我的底部复杂度不是O(n^3)
将'log(n)'和'sqrt(n)'绘制成大约'n == 1000'的图形,看看你是否仍然认为它们是等价的,无论你是什么意思。 –
log(1)= 0和sqrt(1)= 1 – Sung
对不起,我不知道我在想什么,但所有的答案都是非常翔实的。谢谢 –