创建关键词索引表c语言,数据结构(C语言) 第9章 索引技术.ppt

第九章索引技术 本章的基本内容是 索引的基本概念线性索引技术树形索引 9 1索引的基本概念 数据结构的最终目的是提高数据的处理速度 索引是为了加快查找速度而设计的一种数据结构 索引技术是组织大型数据库以及磁盘文件的一种重要技术 在索引问题以及数据库中 常常将数据元素称为记录 文件 通常指存储在外存上的记录集合 索引 把一个关键码与它对应的记录相关联的过程 索引由若干索引项构成 索引项至少应包含关键码和关键码对应的记录在存储器中的位置等信息 静态索引 索引结构在文件创建时生成 一旦生成就固定下来 只有当文件再组织时才允许改变 动态索引 在文件创建时生成索引结构 在文件执行插入 删除等操作时 索引结构本身也随之发生改变 9 1索引的基本概念 线性索引 若将索引项组织为线性结构 则称其为线性索引或索引表 树形索引 若将索引项组织为树结构 则称其为树形索引 多级索引 对索引再建立一个索引 就构成了多级索引 9 1索引的基本概念 对一些大型文件 其索引本身可能也很大 在这种情况下 可以建立多级索引 稠密索引 在线性索引中 若文件中的每个记录对应一个索引项 则这种索引称为稠密索引 在稠密索引中 无论文件是否按关键码有序 索引项总是按关键码顺序排列 只要内存空间允许 通常把稠密索引存储在内存中 从而大大提高记录的查找速度 9 2 1稠密索引 稠密索引主要适用于静态索引 稠密索引示例 有序 无序或有序 优点 实现对数据库记录有效的查找 采用折半查找技术 和随机访问 按记录号访问 缺点 如果文件中包含的记录太多 索引表本身可能会因为太大而无法在内存中存储 文件中插入或删除记录 必须更新稠密索引 而稠密索引的插入和删除操作代价很高 稠密索引 文件 外存 稠密索引 内存 9 2 2分块索引 稠密索引空间代价很大 分块索引 分块索引需要将文件划分为若干块 且要求分块有序 多级索引 分块索引 有序 分块索引 在分块索引表中进行的查找称为分块查找 也称为索引顺序查找 分两步进行 在索引表中确定待查关键码所在的块 在相应块中查找待查关键码 块内查找 顺序查找 设有n个记录的文件分为m个块 每个块均为t个记录 则n m t 设Lb为查找索引表确定关键码所在块的平均查找长度 Lw为在块内查找关键码的平均查找长度 则分块查找的平均查找长度为 ASL Lb Lw若采用顺序查找对索引表进行查找 则分块查找的平均查找长度为 分块索引 ASL Lb Lw 9 2 3多重表 稠密索引 分块索引 对主关键码建立索引 为文件建立索引的目的是什么 对主关键码进行查找 对次关键码进行查找 对次关键码建立索引 多重表 倒排表 多重表 多重表除了为文件建立一个主索引外 还为每个需要查找的次关键码建立一个索引 在文件中 为建立索引的次关键码分别增设一个指针域 用于将次关键码相同的记录链结在一起 稠密索引 或将在同一块中的记录链结在一起 分块索引 多重表 9 2 4倒排表 9 3树形索引 9 3 12 3树 2 3树 是具有下列特性的树 一个结点包含1个或者2个关键码 每个内部结点有2个子女 包含一个关键码 或者3个子女 包含两个关键码 所有叶子结点都在树的同一层 2 3树示例 形状上有什么特性 2 3树示例 包含1个或者2个关键码 有2个子女或者3个子女 叶子结点在同一层 2 3树示例 结点的值有什么特性 2 3树示例 左子树中所有结点的值均小于第一个关键码的值 中间子树中所有结点的值均大于第一个关键码的值 且小于第二个关键码的值 右子树中所有结点的值均大于第二个关键码的值 2 3树 查找操作 21 18 21 33 21 23 2 3树 插入操作 新记录将插入到相应的叶子结点中 1833 2 3树 插入操作 新记录将插入到相应的叶子结点中 2 3树 插入操作 新记录将插入到相应的叶子结点中 2 3树 插入操作 新记录将插入到相应的叶子结点中 1833 12 2330 48 10 15 2021 24 31 4547 505255 插入 2 3树 插入操作 新记录将插入到相应的叶子结点中 1833 12 2330 48 10 15 2021 24 31 4547 分裂 50 55 52 2 3树 插入操作 新记录将插入到相应的叶子结点中 1833 12 2330 10 15 2021 24 31 4547 提升 50 55 4852 2 3树 删除操作 情况1 从包含2个记录的叶子结点删除1个记录 解决方法 直接删除这个记录 1833 12 2330 48 10 15 24 31 4547 5052 2 3树 删除操作 情况1 从包含2个记录的叶子结点删除1个记录 解决方法 直接删除这个记录 21 2 3树 删除操作 情况2 从包含1个记录的叶子结点中删除这个记录 解决方法 向兄弟结点借一个记录 同时修改双亲结点的记录 1833 12 2130 48 10 15 20 23 31 4547 5052 2 3树 删除操作 情况2 从包含1个记录的叶子结点中删除这个记录 解决方法 向兄弟结点借一个记录 同时修改双亲结点的记录 1833 12 2130 48 10 15 20 23 31 4547 5052 2 3树 删除操作 情况2 从包含1个记录的叶子结点中删除这个记录 解决方法 兄弟结点不够借 需要合并相邻结点 并影响双亲结点 1833 12 2021 48 10 15 30 31 4547 5052 2 3树 删除操作 情况2 从包含1个记录的叶子结点中删除这个记录 解决方法 兄弟结点不够借 需要合并相邻结点 并影响双亲结点 1833 12 2021 48 10 15 30 31 4547 5052 2 3树 删除操作 情况2 从包含1个记录的叶子结点中删除这个记录 解决方法 兄弟结点不够借 需要合并相邻结点 并影响双亲结点 2021 48 33 31 4547 5052 2 3树 删除操作 情况2 从包含1个记录的叶子结点中删除这个记录 1012 1830 解决方法 兄弟结点不够借 需要合并相邻结点 并影响双亲结点 48 33 30 4547 5052 2 3树 删除操作 情况2 从包含1个记录的叶子结点中删除这个记录 解决方法 兄弟结点不够借 需要合并相邻结点 并影响双亲结点 这可能减少树的高度 25 20 2 3树 删除操作 情况2 从包含1个记录的叶子结点中删除这个记录 解决方法 兄弟结点不够借 需要合并相邻结点 并影响双亲结点 这可能减少树的高度 2 3树的优点 能够以相对较低的代价保持树高平衡 2 3树 删除操作 情况3 从内部结点删除一个记录 解决方法 将被删除记录用右边子树中的最小关键码Y代替 Y一定在某个叶子结点中 然后再删除Y 2 3树 删除操作 情况3 从内部结点删除一个记录 解决方法 将被删除记录用右边子树中的最小关键码Y代替 Y一定在某个叶子结点中 然后再删除Y 2033 12 2330 48 10 15 21 24 31 4547 5052 9 3 2B 树 m阶B 树 是满足下列特性的树 所有叶子结点都在同一层上 并且不带信息 叶子的双亲称为终端结点 树中每个结点至多有m棵子树 若根结点不是终端结点 则至少有两棵子树 除根结点外 其他非终端结点至少有 m 2 棵子树 B 树是2 3树的推广 2 3树是一个3阶B 树 所有非终端结点都包含以下数据 n A0 K1 A1 K2 Kn An 其中 n m 2 1 n m 1 为关键码的个数 Ki 1 i n 为关键码 且Ki Ki 1 1 i n 1 Ai 0 i n 为指向子树根结点的指针 且指针Ai所指子树中所有结点的关键码均小于Ki 1大于Ki B 树 118 111 127 139 3475364 199 F F F F F F F F F F F F 24378 135 B 树示例 一棵4阶B 树 思考4阶B 树的最少关键字和最多关键字数 B 树的查找 查找47 查找成功 B 树的查找 查找23 查找不成功 B 树的查找分析 B 树的查找包含两种基本操作在B 树中找结点 在磁盘上找 找到结点块后 调入内存 在结点中找关键字 结点块调入内存后 在内存中找 内存的查找速度远远高于磁盘的查找速度B 树的查找效率取决于在磁盘上查找的次数 即待查关键字所在结点在B 树的层次数 也就是N个关键字的m阶B 树的最大深度是多少 按最坏情况计算 B 树的插入 基本思想每次插入一个关键字是在最底层的某个非终端结点添加一个关键字 若该结点的关键字个数不超过m 1 则插入完成 否则 产生 分裂 B 树就是从空树开始 逐个插入关键字而生成的 在3阶B 树 略去叶子 中插入关键字30 26 85 7 3037 在3阶B 树 略去叶子 中插入关键字30 26 85 7 3037 263037 2430 在3阶B 树 略去叶子 中插入关键字30 26 85 7 45 2430 5390 312 50 6170 100 a b c e f g h bt 617085 537090 在3阶B 树 略去叶子 中插入关键字30 26 85 7 45 2430 5390 312 50 100 a b c e f h bt 537090 4570 在3阶B 树 略去叶子 中插入关键字30 26 85 7 45 2430 312 a b c bt 4570 3712 72430 在3阶B 树 略去叶子 中插入关键字30 26 85 7 45 2430 a b bt 4570 72430 244570 在3阶B 树 略去叶子 中插入关键字30 26 85 7 45 a bt 4570 244570 在3阶B 树 略去叶子 中插入关键字30 26 85 7 B 树的删除 基本思想首先找到该关键字所在的结点 并从中删除该关键字 若该结点为最下层的非终端结点 且其关键字数目不少于 m 2 则删除完成 否则进行 合并 结点的操作 若所删关键字为非终端结点中Ki 则可以指针Ai所指子树中的最小关键字Y替代Ki 然后在相应的结点中删去Y 在3阶B 树 略去叶子 中删除关键字12 50 53 37 6190 70 53 6170 90 3 在3阶B 树 略去叶子 中删除关键字12 50 53 37 45 24 90 3 37 6170 100 324 324 在3阶B 树 略去叶子 中删除关键字12 50 53 37 45 90 6170 100 4590 90 9 3 4B 树 m阶B 树 是满足下列特性的树 含有m个关键码 每一个关键码对应一棵子树 关键码Ki是它所对应的子树的根结点中的最大 或最小 关键码 所有终端结点中包含了全部关键码信息 以及指向关键码记录的指针 所有终端结点按关键码的大小链在一起 形成单链表 并设置头指针 L B 树示例 5090 2050 608090 121620 263050 5560 627080 828690 一棵3阶的B 树 指向相应的记录 指向树根 可以随机查找 指向最小叶结点 可以进行顺序查找 查找时 若非终端结点的关键字等于给定值 并不终止 而是继续向下 直到叶子结点

展开阅读全文

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值