理论基础 —— 查找 —— 插值查找
生活随笔
收集整理的這篇文章主要介紹了
理论基础 —— 查找 —— 插值查找
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【概述】
以查字典為例,在英文字典中查 "apple" 時,下意識的會翻開前面的書頁,當查 "zoo" 時,下意識的翻開一定是后面的書頁,顯然,此時還絕對不是從中間開始查起,而且有一定目的地從前或從后查找。
同樣的,以取值范圍在 1~10000 間的 100 個元素從小到大均勻分布的數組中查找 5,那么自然會考慮從數組下標較小的開始查找。
可以看出,二分查找這種查找方式,并不是自適應的,因此,基于二分查找,就有了插值查找,其將查找點的選擇改進為自適應選擇,從而提高查找效率。
簡單來說,插值查找就是根據要查找的關鍵字 key 與查找表中最大最小記錄的關鍵字比較后的查找方法,其核心在于插值的計算公式。
【算法原理】
在二分查找中,查找點的計算為:,經過變換后,有:
而插值查找,將??中的??改進為了?
即將:?變換為了?
【使用情況】
從時間復雜度來說,其最壞時間復雜度也是 O(longn),但對于表長較大,而關鍵字分布又比較均勻的查找表來說,其平均性能要比二分查找好的多。
反之,若查找表中關鍵字分布非常不均勻,那么插值查找未必是很合適的選擇。
【源程序】
int insertionSearch(int a[],int key, int low, int high){int mid=low+(key-a[low])/(a[high]-a[low])*(high-low);if(a[mid]==value)return mid;else if(a[mid]>value)return insertionSearch(a,key,low,mid-1);else if(a[mid]<value)return insertionSearch(a,key,mid+1,high); }總結
以上是生活随笔為你收集整理的理论基础 —— 查找 —— 插值查找的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 训练日志 2019.1.10
- 下一篇: 动态规划 —— 数位 DP