我有下面的代码,并试图找出它的大O最坏情况下的运行时间。我认为第一个循环是O(log N),但是我不确定第二个循环是什么。我以为可能是O(N),但这似乎不对。任何见解都将非常有帮助。
for(int jump = inList.size(); jump > 0; jump/= 2) {
for(int i = 0; i < inList.size(); i = ++i * jump) {
答案 0 :(得分:1)
这将是一个O(log(n))算法,因为外循环显然是O(log(n)),并且对于足够大的N,内循环将完成恒定(2)迭代的执行,因为n / 2 *(n + 1)/ 4 =(n ^ 2 + n)/ 8> n表示n>6。对于所有大于6的值,内部for循环始终迭代两次,大O处理大情况(接近无限),那么内循环是恒定的。