数据结构第25讲︰第10章查找表5可扩充散列–c”.pptVIP

  • 18
  • 0
  • 约1.71万字
  • 约 46页
  • 2017-06-09 发布于北京
  • 举报

数据结构第25讲︰第10章查找表5可扩充散列–c”.ppt

数据结构第25讲︰第10章查找表5可扩充散列–c”

用不同的冲突处理方法时散列表的平均查找长度 例1: 求散列表大小并设计散列函数 条件:设有一个含200个记录的散列表,要求用平方探查法解决冲突,且要求按关键码查询时,找到一个新记录插入位置的平均探查次数不超过1.5。 问题:哈希表至少应该多大?并设计哈希函数。 分析:对平方探测法,查找不成功的平均搜索长度为 Un=1 / (1 -α), 解答:根据要求n=200,且: Un=1 / (1 -α) ? 1.5 ? ? 1/3 ? = n / m = 200 / m m ? 600 五. 可扩充散列 问题提出: 可扩充散列是一种动态散列方法,它对传统的散列技术进行了扩充。它采用树型结构实现哈希表的存储结构,使之能够动态(再散列不需要复制)地适应对文件存储容量的需求,并能保持高效(访问外存次数少)的搜索效率。 根据关键字二进制码的最低 2 位进行划分,可以把这些关键字分成 4 类。假设把它们 4 个页块的文件中, 每页最多可以容纳2个关键码。这样就可以利用各关键码的最低2位(00, 01, 10, 11)来决定它们的存储页块。 二叉Trie树: 根据各关键码的二进制位表示, 从最低位到最高位进行划分, 各页块的索引构成一个二叉树结构。 二叉Trie树构造方法: 首先, 在根结点处按各关键码的最低位是 1 还是 0, 划分为两组。对于每一组再按次低位是 1 还是 0 继续分组, 如此分下去, 直到每组剩下不多于 2 个关键码为止。 二叉Trie树组成: 在二叉Trie树中有两类结点:分支结点和叶结点。分支结点按其相关二进位是 1 还是 0, 分为两个分支; 叶结点包含指向关键码存放页块的指针。 根据关键字二进制码的最低 2 位进行划分,可以把这些关键字分成 4 类。假设把它们 4 个页块的文件中, 每页最多可以容纳2个关键码。这样就可以利用各关键码的最低2位(00, 01, 10, 11)来决定它们的存储页块。 再插入 一个新关键码 C1(110001) 2. 将二叉Trie树转换为目录表 关键码插入及页块分裂 1. 在向一个页块插入关键码 key 时, 如果该页块不满, 可以直接将关键码插入; 2. 如果该页块已满,需要分裂页块 如果目录中指向每一个页块的局部深度都小于目录表的深度, 即:PgDepth DicDepth 则需要紧缩目录。其过程与目录扩充的过程相反。 性能分析 可扩充散列技术是一种非常好的问题解决方法 : 其目录表的地址空间可以扩充和收缩。 在时间方面 : 用基于目录表的可扩充散列方法进行检索, 仅需要 2 次磁盘访问。一次转载目录表,一次转载页块。 在空间方面 : 因增加不均匀分布的关键码可能会导致目录表扩充一倍,许多指针指到同一页块,这样会消耗许多存储空间。 可扩充散列结构: 由一个目录表和一组页块构成。 定义页块信息: 页块的局部深度 PgDepth——指明该页块中存放的记录二进码地址的低位部分有多少位是相同的; C5 C3 000 001 010 011 100 101 110 111 A0, B0 A1, B1 C2 PgDepth=2 3. 插入与目录扩充 A0, B0 C2 C3 0 0 1 0 1 1 A1, B1 C5 0 1 PgDepth=3 PgDepth=2 PgDepth=2 PgDepth=3 Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0. Copyright 2004-2011 Aspose Pty Ltd. C5 C3 000 001 010 011 100 101 110 111 A0, B0 A1, B1 C2 PgDepth=2 A0, B0 C2 C3 0 0 1 0 1 1 A1, B1 C5 0 1 PgDepth=3 PgDepth=2 PgDepth=2 PgDepth=3 定义目录表信息: 目录表深度

文档评论(0)

1亿VIP精品文档

相关文档