查找是在大量的信息中寻找一个特定的信息元素,在计算机应用中,查找是常用的基本运算,例如编译程序中符号表的查找。
在计算机科学中,线性搜索或顺序搜索是一种寻找某一特定值的搜索算法,指按一定的顺序检查数组中每一个元素,直到找到所要寻找的特定值为止。是最简单的一种搜索算法。
名称 | 最好时间复杂度 | 最坏时间复杂度 | 平均时间复杂度 |
---|---|---|---|
顺序查找 | O(1) | O(n) | O(n) |
在计算机科学中,二分查找算法(英语:binary search algorithm),也称折半查找算法(英语:half-interval search algorithm)、对数查找算法(英语:logarithmic search algorithm),是一种在有序数组中查找某一特定元素的查找算法。
名称 | 最好时间复杂度 | 最坏时间复杂度 | 平均时间复杂度 | 空间复杂度 |
---|---|---|---|---|
顺序查找 | O(log n) | O(log n) | O(log n) | 迭代:O(1) 递归:O(log n) |
插值查找法(Interpolation search)是利用插值公式来计算猜测查找键值的位置。查找方式与二分查找相同。
插值 = (设算数 - 最小数) / (最大数 - 最小数):
搜索键值 = left + parseInt( ( key - data[left] ) / ( data[right] - data[left] ) )*( right - left ) )
名称 | 最好时间复杂度 | 最坏时间复杂度 | 平均时间复杂度 | 空间复杂度 |
---|---|---|---|---|
插值查找 | O(1) | O(n) | O(log n) | O(1) |
斐波那契查找(Fibonacci search) ,是区间中单峰函数的搜索技术。
斐波那契查找就是在二分查找的基础上根据斐波那契数列进行分割的。在斐波那契数列找一个等于略大于查找表中元素个数的数 F[n]
,将原查找表扩展为长度为 F[n](如果要补充元素,则补充重复最后一个元素,直到满足F[n]个元素)
,完成后进行斐波那契分割,即 F[n]
个元素分割为前半部分 F[n-1]
个元素,后半部分 F[n-2]
个元素,找出要查找的元素在那一部分并递归,直到找到。
树表查找是对树型存储结构所做的查找。树型存储结构是一种多链表,该表中的每个结点包含有一个数据域和多个指针域,每个指针域指向一个后继结点。
树型存储结构和树型逻辑结构是完全对应的,都是表示一个树形图,只是用存储结构中的链指针代替逻辑结构中的抽象指针罢了,因此,往往把树型存储结构(即树表)和树型逻辑结构(树)统称为树结构或树。在本节中,将分别讨论在树表上进行查找和修改操作的方法。
分块查找又称索引顺序查找,是二分查找和顺序查找的一种改进方法,分块查找由于只要求索引表是有序的,对块内节点没有排序要求,因此特别适合于节点动态变化的情况。
哈希查找是通过计算数据元素的存储地址进行查找的一种方法。
哈希查找的操作步骤:
- 用给定的哈希函数构造哈希表
- 根据选择的冲突处理方法解决地址冲突
- 在哈希表的基础上执行哈希查找
名称 | 最好时间复杂度 | 最坏时间复杂度 | 平均时间复杂度 | 空间复杂度 |
---|---|---|---|---|
哈希查找 | O(1) | O(n) | O(1) | O(n) |