构建二叉堆时间复杂度的证明
2014-05-27 17:41
267 查看
转自:http://blog.csdn.net/linuxtiger/article/details/7172258
如果仅从代码上直观观察,会得出构造二叉堆的时间复杂度为O(n㏒n)的结果,这个结果是错的,虽然该算法外层套一个n次循环,而内层套一个分治策略下的㏒n复杂度的循环,该思考方法犯了一个原则性错误,那就是构建二叉堆是自下而上的构建,每一层的最大纵深总是小于等于树的深度的,因此,该问题是叠加问题,而非递归问题。那么换个方式,假如我们自上而下建立二叉堆,那么插入每个节点都和树的深度有关,并且都是不断的把树折半来实现插入,因此是典型的递归,而非叠加。
在做证明之前,我们的前提是,建立堆的顺序是bottom-top的。
正确的证明方法应当如下:
1. 具有n个元素的平衡二叉树,树高为㏒n,我们设这个变量为h。
2. 最下层非叶节点的元素,只需做一次线性运算便可以确定大根,而这一层具有2^(h-1)个元素,我们假定O(1)=1,那么这一层元素所需时间为2^(h-1) × 1。
3. 由于是bottom-top建立堆,因此在调整上层元素的时候,并不需要同下层所有元素做比较,只需要同其中之一分支作比较,而作比较次数则是树的高度减去当前节点的高度。因此,第x层元素的计算量为2^(x) × (h-x)。
4. 又以上通项公式可得知,构造树高为h的二叉堆的精确时间复杂度为:
S = 2^(h-1) × 1 + 2^(h-2) × 2 + …… +1 × (h-1) ①
通过观察第四步得出的公式可知,该求和公式为等差数列和等比数列的乘积,因此用错位想减发求解,给公式左右两侧同时乘以2,可知:
2S = 2^h × 1 + 2^(h-1) × 2+ …… +2 × (h-1) ②
用②减去①可知: S =2^h × 1 - h +1 ③
将h = ㏒n 带入③,得出如下结论:
S = n - ㏒n +1 = O(n)
结论:构造二叉堆的时间复杂度为线性得证。
如果仅从代码上直观观察,会得出构造二叉堆的时间复杂度为O(n㏒n)的结果,这个结果是错的,虽然该算法外层套一个n次循环,而内层套一个分治策略下的㏒n复杂度的循环,该思考方法犯了一个原则性错误,那就是构建二叉堆是自下而上的构建,每一层的最大纵深总是小于等于树的深度的,因此,该问题是叠加问题,而非递归问题。那么换个方式,假如我们自上而下建立二叉堆,那么插入每个节点都和树的深度有关,并且都是不断的把树折半来实现插入,因此是典型的递归,而非叠加。
在做证明之前,我们的前提是,建立堆的顺序是bottom-top的。
正确的证明方法应当如下:
1. 具有n个元素的平衡二叉树,树高为㏒n,我们设这个变量为h。
2. 最下层非叶节点的元素,只需做一次线性运算便可以确定大根,而这一层具有2^(h-1)个元素,我们假定O(1)=1,那么这一层元素所需时间为2^(h-1) × 1。
3. 由于是bottom-top建立堆,因此在调整上层元素的时候,并不需要同下层所有元素做比较,只需要同其中之一分支作比较,而作比较次数则是树的高度减去当前节点的高度。因此,第x层元素的计算量为2^(x) × (h-x)。
4. 又以上通项公式可得知,构造树高为h的二叉堆的精确时间复杂度为:
S = 2^(h-1) × 1 + 2^(h-2) × 2 + …… +1 × (h-1) ①
通过观察第四步得出的公式可知,该求和公式为等差数列和等比数列的乘积,因此用错位想减发求解,给公式左右两侧同时乘以2,可知:
2S = 2^h × 1 + 2^(h-1) × 2+ …… +2 × (h-1) ②
用②减去①可知: S =2^h × 1 - h +1 ③
将h = ㏒n 带入③,得出如下结论:
S = n - ㏒n +1 = O(n)
结论:构造二叉堆的时间复杂度为线性得证。
相关文章推荐
- 构建二叉堆时间复杂度的证明
- 构建二叉堆时间复杂度的证明。
- 堆排序中建堆过程的时间复杂度O(n)的证明
- 希尔排序 时间复杂度 证明
- 关于一种积性函数前缀和的通用筛法的时间复杂度证明
- 希尔排序 时间复杂度 证明
- 指数型算法时间复杂度优于多项式算法时间复杂度的数学证明
- 关于时间复杂度的几个典型证明
- 快排及时间复杂度简单证明
- 关于堆排序建堆时间复杂度的证明
- 构建一个时间复杂度为O(n)的目录树
- 时间复杂度推导证明--《算法导论》15.1-1题
- 为什么红黑树的时间复杂度为lgn——渐进边界的证明
- Splay的时间复杂度的一种证明
- [XJB研究] [分块] 关于分块时间复杂度的证明
- 算法导论12.2-7 证明使用后继函数进行中序遍历的时间复杂度为Θ(n)
- 关于堆排序建堆时间复杂度的证明
- BZOJ2038: [2009国家集训队]小Z的袜子(hose) 莫队算法 莫队算法讲解及时间复杂度证明
- 数据结构的时间复杂度与空间复杂度、及相关证明
- 时间复杂度与空间复杂度