Big-O效率测量

时间:2018-01-05 20:28:17

标签: algorithm time-complexity big-o

我是一名想要更好地了解大O效率的java学生。

对于此问题,假设O(n)的效率为 j=n; while (j>0) { doIt(); j = j / 2; } i = 1; while (i < n) { i = i * 2; doIt(); }

O(n logn)

此算法的效率最高,为什么效率会很高(例如O(n^2)O(n^2 logn)"tabs":{"TextTabs":[{"TabLabel":"*SSN","Value":"*********"] "NumberTabs":[{"TabLabel":"*MyNumber","Value":"0000000000"}] 等。

2 个答案:

答案 0 :(得分:1)

第一个循环是fgets,第二个循环是相同的。因此,总复杂度为O(nlog(n))

此外,而不是大O可以大 - O(nlog(n))符号。

对于第一个循环,迭代次数是将\Theta除以n的次数2,第二个循环可以解释相同(通过乘法而不是除法)

答案 1 :(得分:1)

由于减半,第一个循环将执行log(n)次。由于加倍,第二个循环也将执行log(n)次。

这意味着每个循环doIt()将被调用log(n)次,总执行时间为O(nlog(n)+nlog(n))O(2nlog(n))。作为标准,删除常量以产生O(nlog(n))

的复杂性