interpolációs keresés
Kiejtés
- IPA: [ ˈintɛrpolaːt͡sijoːʃkɛrɛʃeːʃ]
Főnév
- (matematika, algoritmusok) Az interpolációs keresés egy keresési algoritmus, amelyet rendezett (növekvő vagy csökkenő) listákban használunk. Az algoritmus azzal optimalizálja a keresést, hogy nem a középső elemet veszi alapul, mint a bináris keresés, hanem a keresett érték és a lista szélső értékei alapján „interpolálja”, hogy a keresett érték valószínűleg hol helyezkedik el. Ez hasonló ahhoz, ahogyan az emberek egy telefonkönyvben keresnek.
Elméleti leírás
Az interpolációs keresés az alábbi logikát követi:
1. Vegyük a tartomány két szélső indexét: ‘low‘ és ‘high‘.
2. Ha a keresett érték (key) a [low] és [high] indexek közötti értéktartományban van: - Számítsuk ki az interpolált pozíciót: - Ellenőrizzük az interpolált pozíció értékét:
- Ha az megegyezik a keresett értékkel, térjünk vissza az indexével.
- Ha kisebb, folytassuk a keresést a bal oldali tartományban.
- Ha nagyobb, folytassuk a jobb oldali tartományban.
3. Ha a keresett érték nem a [low, high] tartományban van, az érték nincs a listában.
Pszeudokód
function interpolációs_keresés(arr, n, key): low = 0 high = n - 1 while low <= high and key >= arr[low] and key <= arr[high]: if low == high: if arr[low] == key: return low return -1 pos = low + ((key - arr[low]) * (high - low)) // (arr[high] - arr[low]) if arr[pos] == key: return pos if arr[pos] < key: low = pos + 1 else: high = pos - 1 return -1
Python implementáció
def interpolation_search(arr, key):
low = 0
high = len(arr) - 1
while low <= high and key >= arr[low] and key <= arr[high]:
if low == high:
if arr[low] == key:
return low
return -1
pos = low + ((key - arr[low]) * (high - low)) // (arr[high] - arr[low])
if arr[pos] == key:
return pos
if arr[pos] < key:
low = pos + 1
else:
high = pos - 1
return -1
# Példa használat
arr = [10, 20, 30, 40, 50]
key = 30
result = interpolation_search(arr, key)
if result != -1:
print(f"A(z) {key} érték megtalálható a(z) {result}. indexen.")
else:
print(f"A(z) {key} érték nincs a listában.")
C++ implementáció
#include <iostream>
using namespace std;
int interpolationSearch(int arr[], int n, int key) {
int low = 0, high = n - 1;
while (low <= high && key >= arr[low] && key <= arr[high]) {
if (low == high) {
if (arr[low] == key)
return low;
return -1;
}
int pos = low + ((key - arr[low]) * (high - low)) / (arr[high] - arr[low]);
if (arr[pos] == key)
return pos;
if (arr[pos] < key)
low = pos + 1;
else
high = pos - 1;
}
return -1;
}
int main() {
int arr[] = {10, 20, 30, 40, 50};
int n = sizeof(arr) / sizeof(arr[0]);
int key = 30;
int result = interpolationSearch(arr, n, key);
if (result != -1)
cout << "A(z) " << key << " érték megtalálható a(z) " << result << ". indexen." << endl;
else
cout << "A(z) " << key << " érték nincs a listában." << endl;
return 0;
}
Összegzés
Az interpolációs keresés hatékony, ha a lista értékei egyenletesen oszlanak el, mert ilyenkor az interpolált pozíció pontosabban közelíti a keresett érték helyét. A legrosszabb esetben azonban az időbonyolultsága (O(n)), míg a legjobb esetben (O(n)). Emiatt elsősorban egyenletes eloszlású adatoknál ajánlott használni.
Fordítások
- interpolációs keresés - Értelmező szótár (MEK)
- interpolációs keresés - Etimológiai szótár (UMIL)
- interpolációs keresés - Szótár.net (hu-hu)
- interpolációs keresés - DeepL (hu-de)
- interpolációs keresés - Яндекс (hu-ru)
- interpolációs keresés - Google (hu-en)
- interpolációs keresés - Helyesírási szótár (MTA)
- interpolációs keresés - Wikidata
- interpolációs keresés - Wikipédia (magyar)