NOIP普及讲座8-堆及其应用.ppt
《NOIP普及讲座8-堆及其应用.ppt》由会员分享,可在线阅读,更多相关《NOIP普及讲座8-堆及其应用.ppt(39页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、01020304Table of Contents内容大纲预备知识完全二叉树:完全二叉树:如果一棵深度为如果一棵深度为K K的二叉树,的二叉树,1 1至至K-1K-1层层的结点都是满的,即满足的结点都是满的,即满足2 2i-1i-1(1=i=k-1),(1=i=k-1),只有最下面的一层的结点数小于等于只有最下面的一层的结点数小于等于2 2k-1k-1,并且最下面一层的结点都集中在该层最左并且最下面一层的结点都集中在该层最左边的若干位置,则此二叉树称为完全二叉边的若干位置,则此二叉树称为完全二叉树。树。预备知识1 12 23 34 45 56 67 7满二叉树满二叉树1 12 23 34 45
2、 5完全二叉树完全二叉树堆的定义堆也称二叉堆,结构上是一种数组,本质堆也称二叉堆,结构上是一种数组,本质上是一棵完全二叉树。树中每个结点与数上是一棵完全二叉树。树中每个结点与数组中存放该结点中值的那个元素相对应。组中存放该结点中值的那个元素相对应。堆的性质树根为树根为A1A1,利用完全二叉树的性质,可,利用完全二叉树的性质,可以求出第以求出第i i个结点的父结点、左孩子结点、个结点的父结点、左孩子结点、右孩子结点的下标分别为:右孩子结点的下标分别为:trunc(i/2)trunc(i/2)、2i2i、2i+12i+1。堆的性质 二叉堆还具有这样一个重要的性质:对除根以外二叉堆还具有这样一个重要
3、的性质:对除根以外的每个结点的每个结点i i,Aparent(i)AiAparent(i)Ai,即所有结,即所有结点的值都不得超过其父结点的值,称为大根堆。点的值都不得超过其父结点的值,称为大根堆。小根堆就是要求:小根堆就是要求:Aparent(i)Ai Aparent(i)Ai 。堆的基本操作 使用堆的关键部分是两个基本操作:使用堆的关键部分是两个基本操作:PutPut操作:即往堆中加入一个结点。操作:即往堆中加入一个结点。方法是往堆尾加入一个结点,并通过从下往方法是往堆尾加入一个结点,并通过从下往上的调整法,使其继续保持堆的性质;上的调整法,使其继续保持堆的性质;GetGet操作:即从堆中
4、取出根结点。操作:即从堆中取出根结点。方法是从堆中取出堆头结点,并删除该结点方法是从堆中取出堆头结点,并删除该结点( (堆尾覆盖堆尾覆盖) ),再通过从上往下的调整法,使其继,再通过从上往下的调整法,使其继续保持堆的性质;续保持堆的性质; Put操作575644321142564375heapheapPut操作14256437557561443211425643751heapheapPut操作14256437515756144321heapheap1425143756sonsonPut操作14251437565751644321heapheap1125443756sonsonPut操作1125
5、4437565754614321heapheapsonsonPut操作procedure put(x:longint);procedure put(x:longint);var fa,son,tmp:longint;var fa,son,tmp:longint;beginbegin len:=len+1; heaplen:=x; son:=len; len:=len+1; heaplen:=x; son:=len; while (son1) and (heapson div 2heapson) do while (son1) and (heapson div 2heapson) do begi
6、n begin temp:=heapson div 2; temp:=heapson div 2; heapson div 2:=heapson; heapson div 2:=heapson; heapson:=temp; heapson:=temp; son:=son div 2; son:=son div 2; end; end;end;end;Put操作void put(int x)void put(int x) int fa,son,tmp;int fa,son,tmp;len+;len+;heaplen=x;heaplen=x;son=len;son=len;while (son!
7、=1 & heapson/2heapson)while (son!=1 & heapson/2heapson) tmp=heapson/2;tmp=heapson/2;heapson/2=heapson;heapson/2=heapson;heapson=tmp;heapson=tmp;son=son/2;son=son/2; Get操作11254437565754614321heapheapGet操作11254437565754614321heapheap612544375Get操作612544375575414326heapheap162544375papaGet操作16254437557
8、5464321heapheap142564375papaGet操作142564375575644321heapheappapafunction get:longint;function get:longint;var pa,son,tmp:longint;var pa,son,tmp:longint;beginbegin get:=heap1; heap1:=heaplen; len:=len-1; pa:=1; get:=heap1; heap1:=heaplen; len:=len-1; pa:=1; while pa while pa* *2=len do2len) or (heappa
9、2+1len) or (heappa* *2heappa2heapson if heappaheapson then begin then begin tmp:=heappa; heappa:=heapson; tmp:=heappa; heappa:=heapson; heapson:=tmp; pa:=son; heapson:=tmp; pa:=son; end end else break; else break; end; end;end;end;int get()int get() int p=heap1,pa=1,son,tmp;int p=heap1,pa=1,son,tmp;
10、heap1=heaplen;heap1=heaplen;len-;len-;while (pawhile (pa* *2=len)2len | heappa2+1len | heappa* *2heappa2heapson)if (heappaheapson) tmp=heappa;tmp=heappa;heappa=heapson;heappa=heapson;heapson=tmp;heapson=tmp;pa=son;pa=son; else return p;else return p; return p;return p; 建立堆 方法一:对数组中的每个数依次进行插入操作方法一:对数
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- NOIP 普及 讲座 及其 应用
限制150内