索引顺序表

【说明】博客内容选自课件内容

目录

静态索引结构

1. 索引顺序表

索引顺序表的查找

查找成功时的平均查找长度

2. m 叉静态搜索树


静态索引结构

当数据表中的记录个数 n 很大时, 由于内存容量的限制,不能全部存入内存因此,在查找过程中需要反复与外存交换信息,此时前面介绍的各种算法的效率都很低。

   折半查找:记录必须全部在内存。

   静态查找树表:记录必须全部在内存。  

   二叉平衡树:记录必须全部在内存。

   顺序查找:记录不必全部在内存,但搜索效率极低。

采用索引方法来实现记录的存储和搜索

1. 索引顺序表  2. m 叉静态搜索树

后面要讨论的B树和键树是动态索引结构

1. 索引顺序表

例:有一个存放职工信息的数据表. 每一个职工数据10M字节,假设有10000职工,则数据表共占100G。假设内存只有2G

采用索引表,每个索引项可索引一个职工记录,且占8个字节,则10000个索引项需要80K个字节。

稠密索引:一个索引项对应数据表中一个记录的索引结构

稀疏索引:当记录在外存中有序()存放时,可以把所有n 个记录分为b 个子表()存放,一个索引项对应数据表中一组记录(子表)

在子表中记录可以关键码有序地存放,可以无序地存放。但所有这些子表必须分块有序,即:后一个子表中所有记录的关键码均大于前一个子表中所有记录的关键码。

索引顺序表的查找

一般分为两级搜索:

先在索引表中搜索给定值 K, 查找确定满足范围ID[i-1].max_key < K <= ID[i].max_key i , 即待查记录可能在的子表的序号。

然后在第 i 个子表中按给定值搜索要求的记录。

n索引表是按max_key有序的, 且长度也不大,可以折半搜索,也可以顺序搜索。

n各子表中的记录如果也按对象关键码有序, 可以采用折半查找或顺序查找; 如果不是按记录关键码有序, 只能顺序查找。

查找成功时的平均查找长度

  ASLIndexSeq = ASLIndex + ASLSubList

 其中:ASLIndex  索引表中搜索子表位置的平均查找长度

      ASLSubList  :  子表中查找记录位置的查找成功时的平均查找长度。


l设把长度为 n 的表分成均等的 b 个子表,每个子表有 s 个记录,则 b = [n/s](此处向上取整)

l又设表中每个记录的查找概率相等,则在索引表中查找的概率1/b,在子中查找的概率为 1/s

l若对索引表和子表都用顺序查找,则查找成功时的平均查找长度为:

ASLIndexSeq =  (b+1)/2 + (s+1)/2 = (b+s)/2 +1(n / s + s )/2 + 1

n索引顺序查找的平均查找长度与表中的记录个数n有关,与每个子表中的记录个数s 有关。

n给定n情况下,s应选择多大?

n用数学方法可导出, 当 s =    时, ASLIndexSeq 取极小值:ASLIndexSeq =     +1。

n这个值比顺序查找强,但比折半查找差。

2. m 叉静态搜索树

n当数据记录数目特别大,索引表本身也很大,在内存中放不下,需要分批多次读取外存才能把索引表搜索一遍。

n此时, 可以建立索引的索引(二级索引)。二级索引可以常驻内存,二级索引中一个索引项对应一个索引块,它记录下一级索引块的存储地址及索引块中的最大关键码

m 叉静态搜索树特点:

   由多级索引结构形成一种 m 叉树

    树中每一个内部结点表示一个索引块

    每个索引块中最多存m 索引项

    索引项分别给出各子树结点的最大关键码结点地址

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值