开发手册 欢迎您!
软件开发者资料库

数据结构 - 索引查找

数据结构和算法插值搜索 - 使用c,C ++和Java学习数据结构和算法,从简单和简单的步骤开始,从基本到高级概念,包括概述,环境设置,算法,渐近分析,贪婪算法,分而治之,动态编程,数据结构,数组,链接列表,双链表,循环列表,堆栈,解析表达式,队列,优先级队列,线性,二进制,插值搜索,树,树遍历,二进制搜索树,B +,AVL,跨越,塔河内,哈希表,堆,图,深度,广度优先遍历,搜索技术,排序技术,排序算法,泡沫,合并排序算法,插入,选择,壳,快速排序,递归,斐波那契系列。

插值搜索是二进制搜索的改进变体.该搜索算法适用于所需值的探测位置.为了使这个算法正常工作,数据收集应该是一个排序的形式,并且分布均匀.

二进制搜索比线性搜索具有时间复杂性的巨大优势.线性搜索具有最坏情况下的复杂度O(n)而二进制搜索具有O(log n).

有些情况下可以提前知道目标数据的位置.例如,如果是电话簿,我们想要搜索Morphius的电话号码.在这里,线性搜索甚至二进制搜索似乎都很慢,因为我们可以直接跳转到存储名称从"M"开始的存储空间.

二进制搜索中的定位

在二进制搜索中,如果找不到所需的数据,则列表的其余部分分为两部分,即低级和高级.搜索是在其中任何一个中进行的.

BST Step One BST第二步 BST Step三个 BST第四步

即使数据已排序,二进制搜索没有利用来探测所需数据的位置.

插值搜索中的位置探测

插值搜索通过计算探测器找到特定项目位置.最初,探测位置是集合中间项目的位置.

插值第一步 插值第二步

如果匹配发生,那么项目的索引是回.要将列表拆分为两部分,我们使用以下方法 :

mid = Lo + ((Hi - Lo) / (A[Hi] - A[Lo])) * (X - A[Lo])where −   A    = list   Lo   = Lowest index of the list   Hi   = Highest index of the list   A[n] = Value stored at index n in the list


如果中间项大于项,则再次在中间项右侧的子阵列中计算探测位置.否则,在中间项左侧的子阵列中搜索该项.此过程在子阵列上继续进行,直到子阵列的大小减小到零.

插值搜索算法的运行时复杂度为Ο(log(log n))与BST的Ο(log n)相比,在有利的情况下.

算法

因为它是现有BST算法的即兴创作,我们提到了搜索"目标"数据值索引的步骤,使用位置探测去;

Step 1 : Start searching data from middle of the list.Step 2 : If it is a match, return the index of the item, and exit.Step 3 : If it is not a match, probe position.Step 4 : Divide the list using probing formula and find the new midle.Step 5 : If data is greater than middle, search in higher sub-list.Step 6 : If data is smaller than middle, search in lower sub-list.Step 7 : Repeat until match.


Pseudocode

A → Array listN → Size of AX → Target ValueProcedure Interpolation_Search()   Set Lo  →  0   Set Mid → -1   Set Hi  →  N-1   While X does not match         if Lo equals to Hi OR A[Lo] equals to A[Hi]         EXIT: Failure, Target not found      end if            Set Mid = Lo + ((Hi - Lo) / (A[Hi] - A[Lo])) * (X - A[Lo])       if A[Mid] = X         EXIT: Success, Target found at Mid      else          if A[Mid] < X            Set Lo to Mid+1         else if A[Mid] > X            Set Hi to Mid-1         end if      end if   End WhileEnd Procedure


要了解C编程语言中插值搜索的实现.