数据结构与算法 | 插值查找
折半查找法:https://blog.csdn.net/qq_35423154/article/details/101383518
當我們在使用折半查找法的時候,都會有個疑問,為什么一定要用折半,為什么不能折三分之一,四分之一呢?為什么我們不能根據我們查找的數值的不同而制定不同的比例來查找呢?于是,經過算法科學家的努力,插值查找法(按比例查找)誕生了。
這個方法的實現非常簡單,它僅僅修改了折半查找法之中一條語句
首先我們先寫出折半查找法的核心語句
mid = (right + left) / 2;
代換為
mid =left+ (right - left) / 2;
算法科學家通過對這個1/2進行改進,得到了下面這個算法
mid = left + (key - a[left]) * (right - left) / (a[right] - a[left]);
例如我們要在上面這個數據中查找17
mid = 0 + (17-1)*(9-0)/(18) = 8;
僅僅一次我們就可以查找到想要的數據‘
而它這次中直接按照88%左右的效率直接查到了結尾的17,效率一下子就高了很多,如果這里采用的是折半查找法,要查找三次,差距十分明顯。
雖然從時間復雜度來看它和折半查找都是O(log n),但是對于表長比較大,數據分布均勻的查找表,它的性能要比折半查找法優秀很多,但是他也不是完全高于折半查找,如果數組中分布數據極度不均勻,它的效率可能會低折半查找法略低。
代碼如下
總結
以上是生活随笔為你收集整理的数据结构与算法 | 插值查找的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言程序设计 | 整型、浮点型在内存中
- 下一篇: 数据结构与算法 | 斐波那契查找