第四章 堆与不相交集数据结构.pptVIP

  • 9
  • 0
  • 约3.68千字
  • 约 32页
  • 2018-06-27 发布于湖北
  • 举报
第四章 堆与不相交集数据结构

本章内容 4.1 引言 4.2 堆(heaps) 4.2.1 堆上的运算 4.2.2 创建堆 4.2.3 堆排序 4.2.4 最小堆和最大堆 4.3 不相交集数据结构(disjoint sets data structures) 4.3.1 按秩合并措施 4.3.2 路径压缩 4.3.3 UNION-FIND算法 4.3.4 UNION-FIND算法分析 堆的例子 4.3.1 按秩合并措施 一些结论 4.3.3 UNION-FIND算法 例子 4.3.4 UNION-FIND算法的分析 4.4 练习 第85-88页。 zhaotingg@ 兰州城市学院数学学院 算 法 设 计 技 巧 与 分 析 · Algorithms Design Techniques and Analysis 第四章 堆和不相交集数据结构 算法设计与分析 Algorithms Design and Analysis 赵廷刚 兰州城市学院数学学院 2013.3 数据结构(data structure)是计算机中存储、组织数据的方式。通常情况下,精心选择的数据结构可以带来最优效率的算法。 4.1 引言 常见数据结构:数组(array)、列表(list)、堆栈(stack)、队列(queue)、链表(linked list)、树(tree)、图(graph)、堆(heap)、散列(hash) 4.2 堆(heaps) 在许多算法中,需要支持两种运算的数据结构:插入元素和寻找最大值元素。支持这两种运算的数据结构称为优先队列。如果使用普通队列,那么寻找最大元素需要搜索整个队列,开销比较大;如果采用排序数组,那么插入运算就需要移动很多元素,开销也会较大。优先队列的有效实现是使用“堆”的简单数据结构。 一个(二叉)堆是一个几乎完全的二叉树,它的每个节点都满足堆的特性:如果v和p(v)分别是节点和它的父节点,那么存储在p(v)中的数据项键值不小于存储在v中的数据项键值。 定义4.1 堆数据结构支持下面的运算: delete-max[H]:从堆H中删除最大键值的数据项并将数据项返回。 insert[H,x]:插入项x到堆H中。 delete[H,i]:从堆H中删除第i项。 makeheap[A]:将数组A转换成堆。 /view/4147d863caaedd3383c4d3c6.html 注意:如果堆中的节点有右子节点,则它一定也有左子节点。 堆可以看做是二叉树,而它实质上是一个数组H[1…n]。它有如下性质: /p-240830965233.html 4.2.1 堆上的运算----sift-up 假设对某个i1,H[i]变成了键值大于它的父节点键值的元素,这样就违反了堆性质,因此该数据结构就不再是堆了,如果要修复它成为堆,就用sift-up的运算. 算法描述:Sift-up运算沿着从H[i]到根节点的唯一一条路径,把H[i]移到适合它的位置上。在沿着路径的每一步上,都将H[i]键值与它的父节点的键值 相比较。 4.2.1 堆上的运算----sift-down 假设对i≤floor(i/2),存储在H[i]中元素的键值变成小于H[2i]和H[2i+1]中的最大值,这样也违反了堆性质,因此该数据结构就不再是堆了,如果要修复它成为堆,就用sift-down的运算. 算法描述:Sift-down运算使H[i]“渗”到二叉树中适合它的位置上,沿着路径的每一步上,都将H[i]键值与存储在它的子节点(如果有)的两个(可能是一个)键值里最大的那个相比较。 4.2.1 堆上的运算----插入(insert) 插入:为了把元素x插入到堆H中,先将堆大小加1,然后将x添加到H的末尾,再根据需要,将x上移,直到满足堆性质. 4.2.1 堆上的运算----删除(delete) 删除:要从大小为n的堆H中删除元素H[i],可先用H[n]替换H[i],然后将堆栈大小减1,如果需要的话,根据H[i]的键值与存储在它的父节点和子节点中元素键值的大小,对H[i]做sift-up或sift-down运算,直到满足堆性质. 4.2.1 堆上的运算---

文档评论(0)

1亿VIP精品文档

相关文档