插值查找算法
2022/2/5 17:14:05
本文主要是介绍插值查找算法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
差值查找算法与二分查找算法类似,主要就是mid的值不是(left=right)/2,而是mid=low+(high-low)*(key-arr[low])/(arr[high]-arr[low]);
其中有两点不同:
1,int mid=low+ (right-left) * (findVal-arr[left]) / (arr[right] - arr[left])
2,由于mid公式里面自适应加入了findVal,所以我们前面要加判断findVal<arr[left]和findVal>arr[right]
代码实现如下:
public static List<Integer> insertValueSearch(int[] arr,int left,int right,int findVal){ if (left>right || findVal<arr[left] || findVal>arr[right]){ return new ArrayList(); } int mid=left+(right-left)*(findVal-arr[left])/(arr[right]-arr[left]); int midVal=arr[mid]; if (findVal>midVal){ return insertValueSearch(arr,mid+1,right,findVal); }else if (findVal<midVal){ return insertValueSearch(arr,left,mid-1,findVal); }else{ List<Integer> list=new ArrayList<Integer>(); int temp=mid-1; while (true){ if (temp<0||arr[temp]!=findVal){ break; } list.add(temp); temp--; } list.add(mid); temp=mid+1; while (true){ if (temp>arr.length-1 ||arr[temp]!=findVal){ break; } list.add(temp); temp+=1; } return list; } }
注意:
- 对于数据量较大,关键字分布比较均匀(最好是线性分布)的查找表来说,采用插值查找,速度较快
- 关键字分布不均匀的情况下, 该方法不一定比折半查找要好
- 查找的数组是有序数组
这篇关于插值查找算法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-07-03万字长文聊聊Web3的组成架构
- 2024-07-02springboot项目无法注册到nacos-icode9专业技术文章分享
- 2024-06-26结对编程到底难不难?答案在这里
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?