- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
树;目录;回顾;场景; 一个大小为n的堆是一棵包含n个结点的完全二叉树,该树中每个结点的关键字值大于等于其双亲结点的关键字值
完全二叉树的根称为堆顶,它的关键字值是整棵树上最小的-最小堆
最大堆:完全二叉树中每个结点的关键字值大于等于其孩子结点的关键字值
;回顾;?;完全二叉树中的结点可以按层次顺序存储在一片连续的存储单元中。根结点保存在编号为0的位置上。 ;优先权队列————堆数据结构
堆数据结构————完全二叉树
完全二叉树————顺序存储;;完全二叉树可以以顺序方式存储
堆是n个元素的序列(k0,k1,…,kn-1),
当且仅当满足
(1) 2i+1 n时, ki? k2i+1
(2) 2i+2 n时,ki? k2i+2
;考查1
给定序列,判断是否最小堆?;判断序列(23,53,34,65,83,74)是最小堆吗
;判断方法
先将序列画成完全二叉树形式
判断最小堆条件是否成立;判断序列(23,98,34,65,83,74)是最小堆吗?
;考查2
给定序列不是最小堆
如何改造成唯一的最小堆?;1.将序列画成堆(完全二叉树)的形式
2.将堆调整为最小堆:
从完全二叉树最后一个叶子的双亲开始往前访问直到根结点
每访问一个结点,判断是否满足最小堆条件
IF 不满足,将该结点与最小孩子交换(向下调整)
交换完后再判断该结点是否满足最小堆条件
IF 不满足,继续向下调整,直到满足;3.将获得的最小堆中元素按照层次遍历顺序依次编号,并表示为一个序列;动作分解
任给定一个不满足最大堆的结点
如何向下调整;;程序5.5 向下调整运算。
void AdjustHeap(int Heap[],int s,int m)
{//假设Heap[s+1…m]已经是堆,将Heap[s…m]调整成以Heap[s]为根的最大堆
int Temp= Heap[s];
for(j=2*s;j=m;j*=2) //沿关键字值较大的孩子结点向下调整
{
if(jm Heap[j] Heap[j+1])
j++; //j为关键字值较大的记录的下标
if(Temp Heap[j]) break; //Temp插入在位置s上
Heap[s]=Heap[j];
s=j;
}
Heap[s]=Temp;
};程序5.6 建堆运算。
void CreateHeap(int heap[],int n)
{
for(int i=(n-2)/2;i=0;i--)
AdjustHeap(heap,i,n);
};优先权队列的抽象数据类型;ADT PQueue{
数据:
n?0个元素的最小堆。
运算:
Initialize( int maxNumber ):构造一棵空的优先权队列,其元素最大个数为maxNumber。
Destroy(H ):销毁优先权队列H。
MakeEmpty(H ):创建空的优先权队列H。
Insert(ElemType X, H ):在优先权队列H中插入元素值为X的元素。
DeleteMin(H ):删除优先权队列H的最小值。
FindMin(H ):查找优先权队列H的最小值。
IsEmpty(H ):判断优先权队列H是否为空。
IsFull(H ):判断优先权队列H是否为满。
} ;优先权队列中插入一个新元素的算法步骤:1.首先将新元素插入到优先权队列的最后2.检查新元素插入后,队列是否保持优先权队列的特点,若不能则需调整: 调整过程是由下向上,与双亲结点比较 若双亲结点大则新元素上浮,双亲结点下沉。注:这一过程中与AdjustHeap相反的比较路径 AdjustHeap中调整结点与其孩子比较,不断下沉 本算法中调整结点与双亲比较,不断上浮;例1:向优先权队列中插入一个新元素24;从空队列开始,依此向队列中插入元素的过程;;优先权队列中删除堆顶元素的算法步骤:1. 将堆顶元素赋值给x,然后将堆底元素覆盖堆顶元素2.检查堆顶元素被覆盖后,新堆顶元素是否保持优先权队列的特点,若不能则需调整: 调整过程是由上向下,与孩子结点比较 若堆顶结点大则堆顶元素下沉,孩子中小者上浮注:这一过程中即AdjustHeap过程;作业:
您可能关注的文档
最近下载
- 输输电线路角钢塔焊接件组装工艺技术规程(作业指导书9).doc VIP
- 文旅公司招聘笔试试题.pdf
- 诺华在中国-诺华中国Novartis.PDF VIP
- 4.《促织》课件(共62张PPT) 高教版(2023)中职语文基础模块上册.pptx VIP
- 威尔克姆V8[中文]说明书.pdf VIP
- 2022届中考真题、模考专项练习-“伏安法测电阻”、“测定小灯的电功率”(附答案).pdf VIP
- 专题1.1 整式的乘除(压轴题专项讲练)(北师大版)(原卷版).pdf VIP
- 2025—2026年印制电路板制造的节能环保趋势.pptx
- 再生润滑油基础油团体标准(TCRRA-0901-2023).pdf VIP
- 美世国际职位评估手册.pdf VIP
文档评论(0)