数据结构 -第二部分.ppt

  1. 1、本文档共260页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* 二项堆 二项堆支持插入、删除和归并操作。最坏情况下的时间复杂性是O(logN),但平均的插入时间是一个常量。 二项堆表示为一个二项树的集合。 * 二项堆树 二项堆树是一棵普通的树,不是二叉树。 高度为0的二项堆树是单个节点,高度为k的二项堆树Bk是将一棵Bk-1加到另一棵Bk-1的根上形成的。 二项堆树满足堆的有序性 * B0 B1 B2 B3 * 二项堆里树Bk的特性 Bk有2k个节点 第d层的节点数是二项堆系数 * 优先级队列的表示 把优先级队列表示为二项堆树的集合。每个高度至多有一棵二项堆树。这样,对于给定的元素个数,这个集合是唯一的,即元素个数的二进制表示。 如13个元素,可表示为1101。即该集合由B3、B2和B0组成 * 六个元素的二项堆: 16 18 12 21 24 65 14 26 23 51 24 65 13 七个元素的二项堆: * 二项堆的操作 归并 入队 出队 * 归并操作 由低到高依次归并两个优先级队列中高度相同的树。如果由于前一次归并而出现三棵高度相同的树时,留下一棵,归并其余两棵。 高度相同的树的归并:将根节点大的作为根节点小的树的子树。 归并的时间效益:N个元素的队列有logN棵树,因此最坏情况为O(logN)。 * 归并以下两个队列: 14 26 23 51 24 65 13 16 18 12 21 24 65 H1 H2 归并B0:由于只有H2有B0,所以无需归并 归并B1:形成以下的树 14 26 16 18 现在有三棵B2,留下一棵,归并其余两棵 * 最后的队列: 13 23 51 24 65 12 21 24 65 14 26 16 18 * 二项堆的操作 归并 入队 出队 * 插入 插入是归并的特例 为被插入节点形成一棵单节点的树组成的集合,归并两个集合 时间效益:最坏情况为O(logN),相当于二进制加法中的加1,但每次都有进位的情况。一般进位进到中间的某一位会终止。即当原先集合中缺少Bi时,则归并i次,由于每棵树的出现是等概率的,因此平均归并两次就能结束。 * 贝努里队列的操作 归并 入队 出队 * 删除 找出具有最小根值的树T 将T从原先的集合中删掉 在T中删除根节点 归并T与原先的集合 * 在以下的队列中删除最小元素: 13 23 51 24 65 12 21 24 65 14 26 16 18 最小元素出现在B3中,删除最小元素12,形成下列森林: 21 24 65 14 26 16 18 * 归并两个森林: 23 51 24 65 13 21 24 65 14 26 16 18 * 二项堆的时间性能 归并:N个元素的队列至多有logN棵树,每两棵树的归并只需要常量的时间。因此最坏情况的时间复杂度为O(logN)。但可以证明平均情况的时间复杂度是常量的。 入队操作的平均时间复杂度是O(1)的 出队操作:首先在队列中找出根结点值最小的树。这需要花费O(logN)的时间。然后又要归并两个优先级队列,又需要O(logN)的时间。所以删除操作的时间复杂度是O(logN)的 * 第6章 优先级队列 基本的优先级队列 二叉堆 D堆 归并优先级队列 STL中的优先级队列 排队系统的模拟 * STL中的优先级队列 头文件:queue 类模版:priority_queue 实现方式:二叉堆 主要成员: Void push( const Object x) Const Object top() const Void pop() Bool empty() Void clear() * 使用实例 #include iostream #include queue using namespace std; int main() { priority_queueint q; q.push(10); q.push(1); q.push(5); q.push(8); q.push(0); q.push(4); q.push(9); q.push(7); q.push(3); q.push(6); q.push(2); while (!q.empty()) {cout q.top() ; q.pop();} return 0; } * 第6章 优先级队列 基本的优先级队列 二叉堆 D堆 归并优先级队列 STL中的优先级队列 排队系统的模拟 * 单服务台的排队系统 在单服务台系统中,先到达的顾客先获得服务,也肯定先离开。到达和离开的次序是一致的。 事件处理的次序是:顾客1到达、顾客1离开、顾客2到达、顾客2离开、……、顾客n到达、顾客n离开 只需要一个普通队列保存顾客到达信息 * 多服务台的排队系统 在多服务台系统中,先到达的顾客先获得服务,但后获得服务的顾客

文档评论(0)

文人教参 + 关注
实名认证
内容提供者

老师教学,学生学习备考课程、成人语言培训课程及教材等为提升学生终身学习竞争力,塑造学生综合能力素质,赋能学生而努力

版权声明书
用户编号:6103150140000005

1亿VIP精品文档

相关文档