Aradeğerlemeli Arama
Arama O(log log n) O(1)Sonda konumunu, hedefin değerinin pencerenin uçlarına oranından tahmin eder — düzgün yayılmış veride O(log log n)'e yakındır.
3
7
9
15
23
28
34
41
8 elemanlı sıralı dizide 15 aranıyor.
DeğişmezHedef varsa [0..7] aralığındadır. Yoklama, değerlerin eşit dağıldığını varsayarak yeri tahmin eder.
1/5
karşılaştırma0sondaj0lo0hi7pos0
interpolation-search.c
int interpolationSearch(int arr[], int n, int target) {int lo = 0, hi = n - 1;while (lo <= hi && target >= arr[lo] && target <= arr[hi]) {if (lo == hi) {if (arr[lo] == target) return lo;return -1;}if (arr[hi] == arr[lo]) /* flat window: all equal */return lo; /* loop guard => match */int pos = lo + (target - arr[lo]) * (hi - lo)/ (arr[hi] - arr[lo]);if (arr[pos] == target)return pos;if (arr[pos] < target)lo = pos + 1;elsehi = pos - 1;}return -1;}
Aradeğerlemeli Arama nasıl çalışır?
Ortayı değil, hedefin orantısal olarak olması gereken yeri yokla: pencere uç değerlerinin %90'ı kadarsa %90'lık konuma bak. Sözlüğü doğru harfe yakın açmak gibi.
En iyi durum
Düzgün dağılmış anahtarlar: O(log log n) yoklama.
En kötü durum
Çarpık dağılımlar (ör. üstel): O(n)'e düşer.
Ne zaman kullanılır?
Anahtarları düzgün dağılıma yakın büyük sıralı diziler.