12.5 直接存取文件(散列文件)

  • 直接存取文件 / 散列文件
    利用杂凑(Hash)法进行组织的文件,类似于哈希表,根据文件中关键字的特点设计一种哈希函数和处理冲突的方法将记录散列到存储设备上,故又称散列文件


  • 与哈希表不同,磁盘上的文件记录通常是成组存放的。
    若干个记录组成一个存储单位,在散列文件中,这个存储单位叫作桶。
    若一个桶能存放 m 个记录,这就是说,m 个同义词的记录可以存放在同一地址的桶中,而当第 m+1 个同义词出现时才发生溢出。
    处理溢出也可采用哈希表中处理冲突的各种方法,散列文件中主要采用连地址法。

  • 基桶 和 溢出桶
    当发生溢出时,需要将第 m+1 个同义词存放到另一个桶中,通常称此桶为 溢出桶。
    前 m 个同义词存放的桶为 基桶。
    溢出桶 和 基桶大小相同,相互之间用指针相链接。
    当在基桶中没有找到待查记录时,就顺指针所指到溢出桶中进行查找。
    因此希望同一散列地址的基桶和溢出桶在磁盘上的物理位置不要相距太远,最好在同一柱面上。

  • 例如,某一文件有 18 个记录,其关键字分别为 278,109,063,930,589,184,505,269,8,83,164,215,330,810,620,110,384,355。桶的容量 m = 3,桶数 b = 7。用 除留余数法 作哈希函数 H(key) = key MOD 7,由此得到的直接存取文件如下图
    在这里插入图片描述

  • 散列文件的查找操作
    首先根据给定值求得哈希地址(即基桶号),将基桶的记录读入内存进行顺序查找,
    若找到关键字等于给定值的记录,则检索成功
    若基桶内没有填满记录或其指针域为空,则文件内不含有待查记录
    否则根据指针域的值的指示将溢出桶的记录读入内存继续进行顺序查找,直至查找成功或者失败

  • 散列文件的删除
    与哈希表一样,仅需对被删记录作一标记即可。

  • 散列文件的优点
    文件随机存放,记录不需要进行排序
    插删方便,
    存取速度快,
    不需要索引区,节约存储空间

  • 散列文件的缺点
    不能进行顺序存取,只能按关键字存取
    经过多次茶山后,可能造成文件结构不合理,即溢出桶满而基桶内多数为被删除的记录,此时亦需重组文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值