数据结构 - 第三部分学习 文档 参考.ppt

数据结构 - 第三部分学习 文档 参考.ppt

  1. 1、本文档共452页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* 外排序的模型 由于一次外存操作所需的时间可以执行数百条甚至上千条指令,因此在外排序中主要考虑的是如何减少外存储器的读写 在外存上进行排序的最常用的方法是利用归并排序,因为归并排序只需要访问被归并序列中的第一个元素,这非常适合于顺序文件。 外排序由两个阶段组成: 预处理阶段:根据内存的大小将一个有n个记录的文件分批读入内存,用各种内排序算法排序,形成一个个有序片段。 归并阶段:将这些有序片段逐步归并成一个有序文件。 * 外排序 外排序模型 预处理 归并 大多数内排序算法都是利用了内存是直接访问的事实,读写一个数据是常量的时间。如果输入是在磁带上,磁带上的元素只能顺序访问。甚至数据是在磁盘上,效率还是下降,因为转动磁盘和移动磁头会产生延迟。 * 预处理阶段 最简单的方法是按照内存的容量尽可能多地读入数据记录,然后在内存进行排序,排序的结果写入文件,形成一个已排序片段。 每次读入的记录数越小,形成的初始的已排序片段越多。而已排序片段越多,归并的次数也越多。 每次归并都必须访问文件的所有记录。 * 置换选择 如果能够让每个初始的已排序片段包含更多的记录,就能减少排序时间。 置换选择可以在只能容纳p个记录的内存中生成平均长度为2p的初始的已排序片段。 * 置换选择 如何更有效地构造已排序片段 事实上,只要第一个元素被写到文件上,它所用的内存空间就可以给别的元素使用。如果输入文件中的下一个元素比刚刚输出的元素大,它能被放入这个已排序片段。 外存储器的访问 外存储器中的信息以文件为单位。每个文件在内存有一个缓冲区存放正在处理的文件中的数据 外存储器以数据块为单位与内存交换信息 当程序需要处理外存储器中的某个数据,则将包含该数据的数据块读入缓冲区进行处理 * 磁带 一种典型的顺序存取的设备 * 数据块 磁盘 既支持顺序存取也支持随机存取 * 磁道:存储信息的场所 柱面:不同盘片的同一磁道 扇区:磁道划分成扇区,存储一个数据块 第11章 外部查找与排序 主存储器与外存储器 外部查找 外排序 * 外部查找 B树 B+树 * B树 提供外存中的随机查找 能否与内存一样,采用二叉查找树? * * 直观的概念 非平衡的二叉查找树的最坏情况:树会有线性的深度,因此,将需要10,000,000次磁盘访问。需要463小时 平均情况:一次成功的查找需要1.38logN次磁盘访问,因为log10,000,000接近于24,那么平均查找将需要32次磁盘访问,也就是5秒钟。 典型情况:在随机构造的树中,某些结点的深度将会是平均深度的三倍,于是就需要100次磁盘访问,即16秒。 假设有10,000,000条记录,再假设机器一秒钟可以执行两千五百万条指令,或进行6次磁盘访问。 * 解决方法 把磁盘访问次数降低到一个很小的常数,比如说3或者4。 方法:增加树的分叉,就能降低树的高度,即采用M叉查找树 M叉查找树的最佳高度为:logMN B树的概念 B树是一棵平衡的M叉查找树,是索引存储中的索引结构 记录可按添加到文件中的次序存在数据区中 * B树的定义 一棵 m 阶 B 树或者为空,或者满足以下条件: 根结点要么是叶子,要么至少有两个儿子,至多有m个儿子 除根结点和叶子结点之外,每个结点的儿子个数 s 满足 有 s 个儿子的非叶结点具有 n = s - 1 个关键字,这些结点的数据信息为: (n, A0, (K1, R1), A1, (K2, R2), A2, ……… (Kn, Rn), An) 所有的叶子结点都出现在同一层上,即它们的深度相同,并且不带信息 * * 一棵5阶的B树 查找过程与二叉查找树相似,如查找55、13、71、25 B树的插入 与二叉查找树类似,插入总是在最底层 首先在m阶 B 树上进行查找操作,确定新插入的关键字key 在最底层的非叶结点的插入位置,将 key 和记录的存储地址按序插入到最底层上的某个结点。 若被插入结点的关键字个数小于等于m-1, 则插入操作结束;如插入10 若该结点原有的关键字个数已经等于m-1,必须分裂成两个结点。如插入39 * * 结点f的关键字树超出规定,变成37、39、40、52、54。分裂结点f为:37、39和52、54,把40放入父结点 B树的删除 类似于二叉查找树的删除操作,同样采用了“替身”的方法 替身为右子树最左面的关键字或左子树最右面的关键字 删除最底层的关键字,计有以下几种情况: 若删除关键字之后,结点的关键字的个数满足B树的结点的定义,删除结束。 若删除后关键字个数小于下限: 向结点的左或右兄弟结点借一个关键字过来。 若该结点的左或右兄弟结点的关键字的个数正好为下限 ,则合并结点的操作 * * 结点a 结点f2 结点b 3, 80,82,83

文档评论(0)

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

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

版权声明书
用户编号:6103150140000005

1亿VIP精品文档

相关文档