堆的相关知识
来源:互联网 发布:911segg.info新域名 编辑:程序博客网 时间:2024/06/05 05:15
我们知道在一个堆中满足任意子树的根大于其儿女则,这个堆为最大堆,反之亦然,为最小堆。
我们也有如下几个较为重要的性质:
(1):一个堆中至多有2^(n+1) -1个节点,至少有2^n个节点。
(2):设堆A有n个节点,则其叶节点下标为⌊(n/2)⌋+1,⌊(n/2)+2⌋,⌊(n/2)+3⌋,……,n。
(3):设MAX-HEAPIFY(i)过程可使以第i个节点为根的子树成为最大堆。
(4):当对(n/2)+1以后的节点进行MAX-HEAPIFY过程不会产生影响。
(5):MAX-HEAPIFY过程时间复杂度为O(lgn)。因为lgn=h,最多只递归h次。
(6):节点高度(height of node)从在该节点下的最低的叶子向上,该节点所在的层数。
(7):节点深度(depth of node) 从根节点向下,经过的层数。
(8):在任一有n个元素的堆中,最多有⌊(n/2^(h+1))⌋个高度为h的节点(不是深度)。
现在我们讲一下如何建最大堆,过程——BUILD-MAX-HEAP(A)
我们需要将一个数组A[1..n]变成一个最大堆。我们需要对其所有非叶子节点进行MAX-HEAPIFY过程。所以我们只需从⌊n/2⌋至1去递归过程即可。
现讲一下堆排序的算法(从大到小):
其实就是先把堆变成最大堆,然后再取出首元素,然后再把第n个元素与第1个元素调换,并调用MAX_HEAPIFY(1)使得当前以第一个元素为根的子堆依然满足最大堆性质,从而导致整个堆满足,以保证下次调换的正确性,整个过程的时间复杂度约为O(nlgn)
0 0
- 堆的相关知识
- 堆的相关知识
- 堆的相关知识——创建堆
- 堆和栈相关知识
- 算法与数据结构之堆的相关知识,简单易懂。
- 堆和堆栈相关知识及区别
- 堆的相关算法
- 堆的相关操作
- 相关reactjs的相关知识
- 关于堆的知识复习
- OPC的相关知识
- JDBC的相关知识
- 事务的相关知识
- 编译器的相关知识
- 编译器的相关知识
- OPC的相关知识
- IUnKnown的相关知识
- 噪音的相关知识
- 最大流-POJ-1459-Power Network
- GETTING STARTED WITH PICAMERA(python picamera入门)
- git实用说明
- WCF服务寄宿IIS与Windows服务 - C#/.NET
- ppt中怎么利用符号做出分层显示效果?
- 堆的相关知识
- HDU 5073 Galaxy(数学)
- config libigl in qt through cmake under ubuntu
- openat函数用法示例
- Hprose
- POJ3468 A Simple Problem with Integers 线段树成段更新
- 扫描SD卡文件夹
- 找出字符串
- centos 6.7安装nginx 1.10