查找:在一些(有序的/无序的)数据元素中,通过一定的方法找出与给定关键字相同的数据元素的过程叫做查找。也就是根据给定的某个值,在查找表中确定一个关键字等于给定值的记录或数据元素。
查找表:是由同一类型的数据元素构成的集合。
关键字:是数据元素中某个数据项的值。
主关键字:该关键字可以唯一的标识一条记录。
次关键字:可以识别多个数据元素的关键字。
静态查找:只作查找操作的查找表。
动态查找表:在查找过程汇总同时插入表中不存在的数据元素,或者从查找表中删除已经存在的数据元素。
查找技术:
顺序表查找:
有序查找:折半查找、插值查找和斐波那契查找等。折半查找时间复杂度为O(logn).
线性索引查找:稠密索引、分块索引和倒排索引等。索引技术被广泛应用于文件检索、数据库与搜索引擎等技术领域。
二叉排序树:二叉排序树是动态查找最重要的数据结构。由于二叉排序树是以链接的方式进行存储的,所以它可以在兼顾查找性能的基础上,让插入和删除也变得简单和高效。对于二叉排序树的查找走的就是从根结点到要查找的结点的路径,其比较次数等于给定结点在二叉排序树的层数,也就是说二叉排序树的性能取决于二叉排序树的形状,为了达到最优性能将二叉排序树构造成平衡二叉树才是最佳的。
二叉排序树的左子树小于根,右子树大于根。二叉排序树已经是中序遍历的了。所以只要给出前序或者是后序的遍历结果就可以恢复二叉排序树。二叉排序树转换为平衡排序树的时间复杂度为:
平衡二叉树的查找、插入和删除的时间复杂度为:O(logn).
B树:
B树这种结构是针对内存和外村之间的存取而专门设计的。由于内外存的查找性能更多的取决于读取次数,因此在设计中要考虑B树的平衡和层次。
散列表:
散列技术是在记录的存储位置和关键字之间建立一个确定的对应关系,使得每个关键字对应一个存储位置。散列技术适合求解的问题是查找与给定值相等的记录,不适合进行范围查找或者是一个关键字对应很多记录的情况。散列表示一种非常高效的查找数据结构,它回避了关键字之间反复比较的繁琐,二十直接一步到位查找结果。