文件的索引结构.pptVIP

  • 5
  • 0
  • 约4.67千字
  • 约 57页
  • 2021-10-14 发布于广东
  • 举报
调整控制在最小不平衡子树内 上述所有的调整操作中,A为根的最小不平衡子树的高度在插入结点之前和调整之后相同,对A为根的子树之外的其它结点的平衡性无影响,调整后二叉排序树成为平衡二叉排序树。 元素的删除 与二叉排序树中的结点删除类似,首先找到被删除的结点,如果它不是叶结点,也需要根据二叉排序树的要求转换成一个叶结点的删除。不同之处在于:为了保持删除后的二叉树是平衡的,必须参考插入时的调整方案设计删除后调整的算法;仅仅从最小不平衡子树的调整来看,它与插入时的调整类似,但困难的是:对最小不平衡子树的调整,可能降低它的高度,所以又可能产生更大的最小不平衡子树。因此可能需要反复多次调整。 索引文件 —— 多分树 如果文件很大,索引顺序文件的索引可以采用多级索引结构以提高检索的效率。 即为主文件建立了索引之后,又针对本级索引所占的每一个页块建立一个索引项,用这些索引项构成索引的索引。如果新建的这一级索引仍然占用多个页块,则再为它建立索引。这样可以得到一种多级索引结构——多分树。 如果每个内部结点(根除外)有m个子女,则称为m分树。 多分树与索引文件 如果文件很大,索引顺序文件的索引可以采用多级索引结构以提高检索的效率。 即为主文件建立了索引之后,又针对本级索引所占的每一个页块建立一个索引项,用这些索引项构成索引的索引。如果新建的这一级索引仍然占用多个页块,则再为它建立索引。这样可以得到一种多级索引结构——多分树。 如果每个内部结点(根除外)有m个子女,则称为m分树。 表示方法 多分树的每个结点分配一个页块,结点上的信息是许多二元组(k,p)的序列,它们在结点内按关键码k的值排序。 第i个二元组中的p是本结点的第i个子结点(页块)的地址,k是这个子结点上的最小(或者最大)关键码。 多分树的叶结点就是主文件的最底层索引。 主文件的每个页块可以看成是多分树的外部结点。 索引检索 要检索一个关键码为K的记录,则读入根结点的页块,在这个页块上找到最后一个满足k≤K的索引项(k,p),读入p所指的下一级索引的页块。这样一级一级地进行,直到读入主文件页块,在其上查找关键码为k的记录。 索引插入 在这种文件上插入记录是不太方便的。为了使主文件的记录保持关键码递增的次序,需要把插入位置之后的每个记录向后移动,从而导致增加新的索引项和索引页块,需要对外存上的页块进行大量的调整。 多分树主要实用于静态的索引顺序文件,对于经常需要插入和删除的动态索引顺序文件,需要采用动态索引结构,即下面要讨论的B树和B+树 B树 一棵m阶的B树满足下列条件∶ 1,每个结点至多有m棵子树。 2,除根结点外,其它每个分支结点至少有 棵子树。 3,根结点至少有两棵子树(除非B树只包含一个结点)。 4,所有叶结点在同一层上。B树的叶结点可以看成一种外部结点,不包含任何信息。 5,有j个孩子的非叶结点恰好有j-1个关键码,关键码按递增次序排列。 #define m 1024 struct BTNode; typedef struct BTNode * PBTNode; struct BTNode { int keyNum; /* 实际关键字个数,keyNumm */ PBTNode parent; /* 指向父结点 */ PBTNode *ptr; /* 子树指针向量: ptr[0]…ptr[keyNum] */ KeyType *key; /* 关键字向量: key [0]…key [keyNum-1] */ } typedef struct BTNode *BTree; typedef BTree * PBTree; B树的类型和结点类型定义: 文件索引结构与倒排表 2007/05/14 本讲主要内容: 平衡二叉树 文件的索引结构 倒排表与倒排索引 类型无关的软件平台架构 字典的二分查找 二分查找(binary search) 要求: 查找表为有序表,即表中 结点按关键字有序排列,并且采用顺序存储结构。 基本思想: 确定搜索区间的中点位置: 然后将待查的key值与range[mid].key比较:若相等,则查找成功并返回此位置,否则确定新的查找区间,继续二分查找. 动态查找表结构 —— 二叉排序树(又称二叉搜索树) 以关键码值为结点的二叉树 如果任一结点的左子树非空,则左子树中的所有结点的关键码都小于根结点的关键码; 如果任一结点的右子树非空,则右子树中的所有结点的关键码都大于根结点的关键码。 10 15 20 40 6 2 8 15 30 25 二叉排序树的插入与构造 如果二

文档评论(0)

1亿VIP精品文档

相关文档