数据结构与算法13:折半查找、差值查找和斐波那契查找
1. 折半查找(二分查找)
折半查找也叫二分查找。是在一个已排序的序列中寻找一个目标key的简单有效方式。折半查找每次对查找区域寻找中间位置的值并进行比较,随后舍弃不符合的区域,然后对剩下区域继续折半,直到遇到key相等的目标元素。折半查找的复杂度为O(lgn)。
2. 差值查找
差值查找也叫按比例查找。差值查找是对折半查找的改良,它的不同点在于不是寻找一个中间位置,而是根据key的值和查找区域的最小值和最大值的比例关系,去查找那个恰好符合其比例的位置的元素。差值查找在序列比较大且均匀分布的情况下会比折半查找有不错的提高,对于不均匀的情况,差值查找不会比折半查找更好。复杂度也是O(lgn)。
3. 斐波那契查找
斐波那契查找是二分查找的一种演化(not改进,真没看出有啥改进的)。不同之处在于它也不选中间位置,而是选择一个接近黄金分割的位置。这个位置怎么选呢?这就是斐波那契数列的性质了,斐波那契数列中的相邻两个数,前一个数和后一个数的比例不断趋近于0.618,因此位置按照斐波那契数列的数值即可。没有看出这有什么进步,和二分查找比更快和更慢的概率是一样的。