数据结构-查找-B树专题

  1. 线性索引的定义与实现方式

1.功能与结构概述

当一个查找表中的元素数目比较多的时候,可以采取将查找表分为多个子表进行存放的方法。

当查找表中的元素有序排列时,子表中的元素也是有序排列的,可以在子表中采用折半查找的方法进行查找元素。

当查找表中的元素无序排列时,子表中的元素也是无序排列的,这种情况下只能在子表中采用顺序查找方法进行查找元素。

2.线性索引的实现

由一个查找表所产生的多个子表要求分块有序,即后面一个子表中的所有的元素的关键字的值大于前一个子表中的所有的元素的关键字的值

需要为上面所提到的子表建立索引表,索引表中的每一个元素叫做索引项,索引项记录了对应子表中的最大关键字值Max_key以及该子表在数据区中的开始位置Obj_addr。各个索引项在索引表中的序号与各个子表的块号有一一对应的关系,即第i个索引项是第i个索引表的索引项。

利用索引表以及子表对查找表进行查找的步骤:

(1).在索引表中查找给定值x,确定满足ID[i-1],maxkey<x<=ID[i].max_key的i值,即如果待查记录存在于查找表中时,可能包含待查记录的子表的序号。

(2).在第i个子表中按照给定的值x查找要求的记录。

3.多级索引结构和m叉搜索树

二级索引:当查找表中的元素数目特别大,索引表本身也很大时,在内存中一次放不下,需要分批多次读取硬盘才能把索引表搜索一遍,在这种情况下可以建立索引的索引,成为二级索引。

  1. B树的概念

    1. B树的定义

      一棵B树,是一棵平衡的m叉查找树,是一种多路搜索树(不是二叉的),它或者是空树,或者是满足以下性质的树:

      1. 任意非叶子节点所拥有的子节的数目最多是M
      2. 根节点的子节点的数目的区间分为是[2,M];
      3. 除了根节点以外的非叶子节点的子节点的数目区间为[M/2,M];
      4. 每个结点存放至少M/2-1(取上整)和至多M-1个关键字;(至少2个关键字)
      5. 非叶子结点的关键字个数=指向儿子的指针个数-1;
      6. 非叶子结点的关键字:K[1], K[2], …, K[M-1];且K[i] < K[i+1];
      7. 非叶子结点的指针:P[1], P[2], …, P[M];其中P[1]指向关键字小于K[1]的

        子树,P[M]指向关键字大于K[M-1]的子树,其它P[i]指向关键字属于(K[i-1], K[i])的子树;

      8. 所有叶子结点位于同一层;

       

     

 

posted @ 2012-02-10 15:33  itzhangyang  阅读(269)  评论(0编辑  收藏  举报