算法导论程序8--堆(Python)
来源:互联网 发布:linux 安装jira7 编辑:程序博客网 时间:2024/06/06 01:24
(二叉)堆是一个数组,它可以被看成一个近似的完全二叉树。树上的每一个结点对应数组中的每一个元素。除了最底层外,该树是完全充满的,而且是从左到右填充。
树的根结点:A[0]。给定一个下标i,很容易得到它的父结点、左孩子和右孩子的下标。
import mathclass heapsort: def __init__(self,a_A): self.list=a_A def parent(self,i): return math.floor((i-1)/2) def left(self,i): return 2*i+1 def right(self,i): return 2*i+2运行:
>>> A=[16,14,10,8,7,9,3,2,4,1]>>> p=heapsort(A)>>> p.left(1)3>>> p.right(1)4>>>
最大堆:
最大堆性质是指除了根以外的所有结点i都要满足:
A[parent(i)]>=A[i]
最小堆:
最小堆性质是指除了根结点以外的所有结点i都有:
A[parent(i)]<=A[i]
最小堆中的最小元素存放在根结点中。
我们定义一个堆中的结点的高度就为该结点到叶结点最长简单路径上边的数目。进而我们可以把堆的高度定义为根结点的高度。
既然一个包含n个元素的堆可以看做一棵完全二叉树,那么堆的高度是下取整lgn。
堆结构上的一些基本操作的运行时间至多与树的高度成正比,即时间复杂度为O(lgn)
0 0
- 算法导论程序8--堆(Python)
- 算法导论程序11--堆排序算法(Python)
- 算法导论程序10--建堆(Python)
- 算法导论程序16--基数排序(Python)
- 算法导论程序21--链表(Python)
- 算法导论堆排序python实现
- 算法导论—堆排序(python)
- 堆排序(算法导论)
- 堆排序(算法导论)
- 堆排序(最小堆)--【算法导论】
- 算法导论程序6--随机算法(Python)
- 算法导论程序1--插入排序(Python+Java)
- 算法导论程序2--归并排序(Python)
- 算法导论程序3--最大子数组问题(Python)
- 算法导论程序5--雇佣问题(Python)
- 算法导论程序7--在线雇佣问题(Python)
- 算法导论程序12--优先队列(Python)
- 算法导论程序13-快速排序的描述(Python)
- 扣扣厘米秀大乱斗攻防
- 制作映像(dmg)文件详细步骤
- jenkins部署到tomcat下
- Java面向对象总结(多态)
- 你经历过绝望吗?
- 算法导论程序8--堆(Python)
- 针对spring MVC 框架在传递对象中含有data类型的400问题
- 算法导论 练习题 13.1-7
- 关于Linux下的环境变量
- BZOJ 3884 [欧拉定理]
- C程序 题目积累
- 危险源在线监测预警系统方案
- SQL Server 在原表结构添加新字段
- react将字符串转义成html语句