数据结构与算法(11)插值查找
来源:互联网 发布:淘宝首页装修素材下载 编辑:程序博客网 时间:2024/05/21 19:37
联想一下自己在字典中查找单词的经历,我们肯定不会使用折半查找,因为对于分布有规律的单词而言,我们有更好的方式。我们会使用大脑的自适应计算出单词的大概位置,一步步缩减范围。类似的对于分布有规律的数据元素来说,我们可以改进一下折半查找的轴点,不使用中点,而是使其可以根据lo 和 hi的位置上元素的大小进行适当的调整。这就是插值查找的来源。
算法实现
int InsertSearch(List L, KeyValue k, int n){ int lo = 0, hi = n - 1; int mid; while (lo < hi){ mid = lo + (hi - lo) * (k - L[lo].key) / (L[hi].key - L[lo].key); if (L[mid].key == k) return mid; else if (L[mid].key < k) lo = mid + 1; else hi = mid - 1; } if (lo == hi){ if (L[lo].key == k) return lo; } return -1;}
总结:
1. 时间复杂度为O(log(logn)), 对于关键字分布较均匀的查找表来说比较适合,可以减少查找对比次数。
2. 数据元素分布均匀的话可以大大提高查找的速度,但是数据元素分布不均匀的话,mid的计算其实是有欺骗性的,这种方式不适合。
0 0
- 数据结构与算法(11)插值查找
- 【数据结构与算法】【查找】插值查找的代码实现
- 数据结构基础之折半查找与插值查找
- 插值查找算法
- 插值查找算法
- 插值查找算法
- 插值查找算法
- 数据结构-- 向量--插值查找
- 算法-01-二分查找/插值查找
- 学习回顾算法(插值查找算法)
- 数据结构与算法(二分查找算法)
- 数据结构与算法:查找
- 数据结构 插值查找 斐波那契查找
- 数据结构与算法(查找)1
- 数据结构与算法(9)顺序查找
- 数据结构与算法(10)二分查找
- 数据结构与算法(12)Fibonacci查找
- 算法:静态查找表(Static Search Table)(顺序查找、二分查找、插值查找、斐波纳契查找)
- 226. Invert Binary Tree
- BZOJ 1191 匈牙利算法
- 化装晚会(costume)暴力题解
- 如何设计一个优秀的API
- POJ1852 Ants
- 数据结构与算法(11)插值查找
- [数竞题(雾)][CodeChef]PARSIN/[JZOJ4704]Math
- 用keySet和entrySet取出元素
- Fragment 实现微信Tab显示
- MAtlib 的 cvAdaptiveThreshold 局部二值化
- 开关系统
- JVM虚拟机面试题
- Android面向百度编程的几个大坑
- XListView下拉刷新