求助:C#中的二级索引查找如何实现?
程序需要实现的功能如下:将测试数据存储到字典中,字典为二级索引,如何实现索引查找?
图 8.2 一个主表和一个索引表的结构图
0 1 2 3
14 34 66 85
0 5 10 14
索引表
8 14 6 9 10 22 34 18 19 31 40 38 54 66 71 78 68 80 85
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
主表
索引查找分两步进行。先确定待查找记录所在的子表,然后在子表中进行顺
序查找。比如,在图 8.2 中,现在要查找关键码为54 的记录。先将 54 依次与索
引表中每个记录的 data 域的值进行比较,由于 34<54<66,则若在主表中存在关
键码为 54 的记录,则该记录必定在主表的第 3 个子表中。由于相应的 link 域的
值为 10,所以,从主表的第11 个记录(数组的下标为10)开始进行顺序查找。
当比较到主表的第 13 个记录(数组的下标为12)时,关键码相等,说明主表中
有要查找的记录,则查找成功。当然,如果比较到第 15 个记录(因为索引表的
下一个记录的 link 域的值为 14)仍然不等,说明主表中不存在要查找的记录,
查找失败。
性能分析:索引查找由索引表查找和子表查找两步完成。设 n个记录的顺序
表分为 m个子表,且每个子表均有t 个记录,则 t=n/m。这样,索引查找的平均
查找长度为: ASL=ASL索引表+ASL子表=(m+1)/2+(n/m+1)/2=(m+n/m)/2+1
当主表中的记录个数非常多时,索引表本身可能也很大,此时可按照
的方法对索引表再建立索引表,这样的索引表称为二级索引表。同样的方法
还可建立三级索引表。二级以上的索引结构称为多级索引结构。