建堆的时间复杂度到底是多少?
想来想去都是O(nlgn),可是今天用STL的heap时候,参考手册上说make_heap最保证在3n时间内把一个数组整理为堆,想不明白了,高手给详细说说。
[解决办法]
O(n).
看 算法导论, 呵呵.
[解决办法]
是O(n)吧,对于含有n各元素的一个堆(完全二叉树),其高度时lg(n),假设高度为从h的节点开建堆的时间复杂度是O(h),则有总体的复杂度是(sum(n/2^h){h=0-> lg(n)})*O(h))=O(n*sum(h/2^(h-1)){h=0-> lgn(n)}
we have lim(n-> ultimate)(sum(h/2^(h-1)))=1 and
sum(h/2^(h-1){h=0-> lgn(n)} <=1,so O(n) is the answer.