数据结构与算法分析(C++版)课件下ppt197.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构与算法分析(C版)课件下ppt197

数据结构与算法分析(C++版)课件下 第8讲 查找 第9讲 排序 第10讲 文件 第11讲 算法设计与分析 通常称用于查找的数据集合为查找结构,它是由同一数据类型的对象(或记录)组成 在每个对象中有若干属性,其中有一个属性,其值可唯一地标识这个对象。称为关键码。使用基于关键码的查找,查找结果应是唯一的。但在实际应用时,查找条件是多方面的,可以使用基于属性的查找方法,但查找结果可能不唯一 实施查找时有两种不同的环境 静态环境 查找结构不用插入和删除操作 ? 静态查找表 查找算法的评价指标 查找成功:最少比较次数 最多比较次数 平均比较次数 查找失败:最少比较次数 最多比较次数 平均比较次数 基于有序顺序表的折半查找 设n个对象存放在一个有序顺序表中,并按其关键码从小到大排好了序 折半查找时, 先求位于查找区间正中的对象的下标mid,用其关键码与给定值x比较 1.elem[mid]==x 查找成功 2.elem[mid]x 把查找区间缩小到表的前半部分,继续折半查找 3.elem[mid]x 把查找区间缩小到表的后半部分,继续折半查找 如果查找区间已缩小到没有对象,仍未找到想要查找的对象,则查找失败 n 个结点的二叉查找树的数目 3 个结点的二叉查找树 结点的平衡因子 (balance factor) 每个结点附加一个数字, 给出该结点左子树的高度减去右子树的高度所得的高度差, 这个数字即为结点的平衡因子 AVL树任一结点平衡因子只能取 -1, 0, 1 如果一个结点的平衡因子的绝对值大于1, 则这棵二叉查找树就失去了平衡, 不再是AVL树 如果一棵二叉查找树是平衡的, 且有 n个结点,其高度可保持在 O(log2n),平均查找长度也可保持在O(log2n) 平衡化旋转 如果在一棵平衡的二叉查找树中插入一个新结点,造成了不平衡。此时必须调整树的结构,使之平衡化 平衡化旋转有两类: 单旋转 (左旋和右旋) 双旋转 (左旋加右旋和右旋加左旋) 如何“建堆”? 两个问题: 如何“筛选”? 所谓“筛选”指的是,对一棵左/右子树 均为堆的完全二叉树,“调整”根结点 使整个二叉树也成为一个堆。 堆 堆 筛选 98 81 49 73 55 64 12 36 27 40 例如: 是大顶堆 12 但在 98 和 12 进行互换之后,它就不是堆了, 因此,需要对它进行“筛选”。 98 12 81 73 64 12 98 比较 比较 建堆是一个从下往上进行“筛选”的过程。 40 55 49 73 81 64 36 12 27 98 例如: 排序之前的关键字序列为 12 36 81 73 49 98 81 73 55 现在,左/右子树都已经调整为堆,最后只要调整根结点,使整个二叉树是个“堆”即可。 98 49 40 64 36 12 27 基 数 排 序  基数排序是一种借助“多关键字排序”的思想来实现“单关键字排序”的内部排序算法。 多关键字的排序 链式基数排序 多关键字的排序 n 个记录的序列 { R1, R2, …,Rn} 对关键字 (Ki0, Ki1,…,Kid-1) 有序是指: 其中: K0 被称为 “最主”位关键字 Kd-1 被称为 “最次”位关键字 对于序列中任意两个记录 Ri 和 Rj (1≤ij≤n) 都满足下列(词典)有序关系: (Ki0, Ki1, …,Kid-1) (Kj0, Kj1, …,Kjd-1) 实现多关键字排序 通常有两种作法: 最低位优先LSD法 最高位优先MSD法 最高位优先MSD法 先对K0进行排序,并按 K0 的不同值将记录序列分成若干子序列之后,分别对 K1 进行排序,...…, 依次类推,直至最后对最次位关键字排序完成为止。 最低位优先LSD法 先对 Kd-1 进行排序,然后对 Kd-2 进行排序,依次类推,直至对最主位关键字 K0 排序完成为止。   例如:学生记录含三个关键字: 系别、班号和班内的序列号,其中以系别为最主位关键字。 无序序列 对K2排序 对K1排序 对K0排序 3,2,30 1,2,15 3,1,20 2,3,18 2,1,20 1,2,15 2,3,18 3,1,20 2,1,20 3,2,30 3,1,20 2,1,20 1,2,15 3,2,30 2,3,18 1,2,15 2,1,20 2,3,18 3,1,20 3,2,30 LSD的排序过程如下: 链式基数排序   假如多关键字的记录序列中,每个关键字的取值范围相同,则按LSD法进行排序时,可以采用“分

文档评论(0)

skvdnd51 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档