我有一个数组,它具有最大堆的特性。删除最大值的时间复杂度是O(logn)。如果下面的代码只迭代7次,那么下面的代码时间复杂度是多少(大O)?
int heap_size = 15;
int i, value, heap_array[]; // array is in the form of max heap
....
for(i = 0; i < 7; i++){ // iterates seven times
value = deleteMax(heap_array);
printf("%d ", value);
}
我有两个解决方案。第一个:时间复杂度为O(7 * logn)或简单地说是O(logn)。
然后第二个解决方案是O(1/2 * n * logn)或O(nlogn),因为1/2只是一个常数,而且我假设迭代次数为7,几乎与heap_size的一半相同,因此可以忽略1/2。因此是O(nlogn)。
哪一个正确呢?
n/2
次,那就更有趣了。 - xiaofeng.li