- 1、本文档共74页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
chap09--索引与散列
数 据 结 构(C语言版) 董玉涛 第9章 索引与散列 本章目标 9.1 磁盘和文件 9.2 静态索引及其查找 9.3 动态索引及其查找 9.4 散列表 9.1 磁盘和文件 9.1.1 主存和辅存 计算机存储设备分为主存储器(primary memory)和辅存储器(secondary memory) 主存储器通常指RAM,高速缓存(cache)和显存(video memory),又叫内存 辅存储器指硬盘、软盘和磁带这样的设备,又叫外存 访问内存和磁盘的速度相差极大(差距在10万到100万倍之间) 设计基于磁盘的应用程序时应遵循下面的这条原则:使访问磁盘的次数最少 9.1.2 磁盘驱动器1-1 一块硬盘由一个或多个圆形盘片(platters)组成,这些盘片从上到下排列,中间有一定的间隙,所有盘片都围着一个主轴(spindle)旋转。盘片像唱片一样,以恒定的速度转动 每个盘片有上下两个面,每个面都有一个读/写磁头(read/write head),或者称为I/O磁头 数据就是通过这些磁头读出或写入的,这有些像留声机的活动臂从唱片中得到声音一样。与留声机的针头不同,磁盘的读/写磁头实际上不接触盘面,这样会防止划伤磁盘。这个距离非常小,比一粒灰尘的高度还要小500万倍 9.1.2 磁盘驱动器1-2 盘面上有许多同心圆,这些圆圈叫磁道(tracks),数据就保存在磁道上 磁头可以从盘面上的一道移动到另一道 各个盘面上半径相同的磁道组成一个虚拟的圆柱面(cylinders) 柱面的个数就是盘面上磁道的个数 每个磁道可以细分为多个扇区(sectors)。相邻两个扇区之间有扇区间间隙(inter-sector gaps),扇区间间隙不存储数据。所有磁道均包含相同数量的扇区。每个扇区中均包含相同的数据量(字节数) 9.1.2 磁盘驱动器1-3 这样,一个数据就可以用柱面号、盘面号和扇区号来加以定位 9.1.2 磁盘驱动器1-4 从硬盘读写一个字节数据通常分为3步 I/O磁头在磁道(或柱面)间移动,移到正确的磁道上。这个过程叫寻道(seek)。寻道所花的时间叫寻道时间(seek time),一般为几十毫秒 磁头等待包含数据的扇区转到磁头下面。这个时间叫旋转延迟时间(rotation latency)。一般为几毫秒 数据的传输(transition)时间。一旦数据旋转到I/O磁头下面,读写数据所花费的时间。这个时间就是读写时,盘片旋转的时间。一般为纳秒级 Tr/w= Tseek+ Tlatency+ Ttransition 因此,读写一次磁盘所花的时间主要取决于寻道时间,即磁头在磁道间移动的时间 9.1.2 磁盘驱动器1-5 实际上,磁盘的设计并不是每次读写一个字节,而是一次读写一个扇区的数据。因此,一个扇区是磁盘一次读写的最小数据量,而非字节 不同的操作系统把一个或几个相邻扇区集结成组,称作一个簇(cluster)或块(block) 对操作系统而言,簇(或块)是文件分配和读写的最小单位。因此,一个文件可能是由一个或几个簇(或块)组成,对文件的一次读写的数据量是一个簇(或块)的大小 9.1.2 磁盘驱动器1-6 例如,windows98操作系统规定一个簇是32kB(若硬盘的扇区为512B,则一簇相当于64个扇区) 假设有一个文件,大小为33kB,这样,操作系统就为它分配2个簇,其中一个占满了,而另一个只占用一个1kB,其余的31kB只能被浪费掉了 我们把这种浪费掉且不能分配给其他文件使用的磁盘空间叫内碎片(internal fragments) 若我们读该文件,一次读32kB,即一簇的数据量到内存,读到内存的簇或块通常叫页面或页(pages)。它的大小等于一个簇或块的大小 至于Unix操作系统,规定文件分配和读写的基本单位是一个扇区,在Unix术语中称为一个块(block) 9.2 静态索引及其查找 索引结构 当储存在磁盘中的纪录个数n很大时,如果用无序线性表形式的集合结构存储,采用顺序查找,则查找效率极低,这是因为查找一个符合条件的纪录平均需要查找几乎一半的纪录。如果采用有序表形式的查找结构,用折半查找,时间开销为log2n,对很大的n,代价仍很大。这时可采用索引方法实现记录的存储和查找 索引结构是一种集合结构,通常用于外存中的大型文件系统和数据库管理系统的检索。它分为静态和动态两种,其差别类似于上一章中的静态集合和动态集合 9.2.1 线性索引2-1 线性索引是最简单的一种静态索引结构 在索引结构中,首先建立一个索引表(index table)。索引表本身可以是线性结构的,也可以是树型结构的。线性结构的索引表叫做线性索引,树型结构的索引表叫做树型索引。如下图左边的索引表就是一个线性索引
文档评论(0)