首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

建堆的时间复杂度到底是多少?解决方法

2012-02-21 
建堆的时间复杂度到底是多少?想来想去都是O(nlgn),可是今天用STL的heap时候,参考手册上说make_heap最保证

建堆的时间复杂度到底是多少?
想来想去都是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.

热点排行