C#演算法設計查詢篇之03-插值查詢
插值查詢(Interpolation Search)
該文章的最新版本已遷移至個人部落格【位元飛】,單擊連結 https://www.byteflying.com/archives/701 訪問。
插值查詢是二分查詢的更高效版本,它不會每次按2平分原問題規模,而是應用一個技巧來儘快的接近目標關鍵字。
示例:
public class Program {
public static void Main(string[] args) {
int[] array = { 8, 11, 21, 28, 32, 43, 48, 56, 69, 72, 80, 94 };
Console.WriteLine(InterpolationSearch(array, 80, 0, array.Length - 1));
Console.ReadKey();
}
private static int InterpolationSearch(int[] array, int key, int low, int high) {
if (low > high) return -1;
var mid = (int)(low + ((double)key - array[low]) /
(array[high] - array[low]) * (high - low));
if (array[mid] == key)
return mid;
else if (array[mid] > key)
return InterpolationSearch(array, key, low, mid - 1);
else
return InterpolationSearch(array, key, mid + 1, high);
}
}
請注意以上遞迴實現為尾遞迴,詳情參考我的另一篇博文:
C#開發筆記之06-為什麼要儘可能的使用尾遞迴,編譯器會為它做優化嗎?
以上是插值查詢演算法的一種實現,以下是這個案例的輸出結果:
該文章的最新版本已遷移至個人部落格【位元飛】,單擊連結 https://www.byteflying.com/archives/701 訪問。
10
分析:
在最壞的情況下插值查詢的時間複雜度為: 。
相關文章
- 查詢演算法__插值查詢演算法
- 插值查詢演算法演算法
- 【java】【插值查詢】Java
- 插值查詢的簡單理解
- 查詢演算法__Fibonacci查詢演算法
- 演算法-查詢(線性、二分、插值、斐波那契)演算法
- 查詢演算法__二分查詢演算法
- pgsql查詢優化之模糊查詢SQL優化
- 如何找東西?查詢演算法之順序查詢和二分查詢詳解演算法
- 查詢oracle欄位預設值Oracle
- 查詢演算法之二分查詢演算法
- 通用查詢設計思想
- MySQL之連線查詢和子查詢MySql
- DS靜態查詢之順序查詢
- 快遞查詢 C#C#
- 查詢演算法演算法
- 演算法 - 查詢演算法
- 演算法之逆序對兒查詢演算法
- MySQL 學習之索引篇和查詢MySql索引
- 二分查詢【折半查詢】演算法 PHP 版演算法PHP
- SQL查詢的:子查詢和多表查詢SQL
- NOT IN之後的子查詢不能包含NULL值Null
- mysql-分組查詢-子查詢-連線查詢-組合查詢MySql
- 查詢演算法(上)演算法
- 查詢演算法(下)演算法
- Java 查詢演算法Java演算法
- iOS 演算法之排序、查詢、遞迴iOS演算法排序遞迴
- JavaScript之DOM查詢JavaScript
- jQuery之元素查詢jQuery
- elasticsearch之exists查詢Elasticsearch
- 複雜查詢—子查詢
- 查詢——二分查詢
- MYSQL學習筆記25: 多表查詢(子查詢)[標量子查詢,列子查詢]MySql筆記
- 分塊查詢【大規模資料查詢演算法優化】【索引順序查詢】演算法 PHP 版演算法優化索引PHP
- SQL 查詢中的 NULL 值SQLNull
- Elasticsearch 第六篇:聚合統計查詢Elasticsearch
- C# LINQ (語言整合查詢)C#
- Python 查詢演算法_眾裡尋他千百度,驀然回首那人卻在燈火闌珊處(線性、二分,分塊、插值查詢演算法)Python演算法