İnterpolyasiya ilə axtarış (ing. Interpolation search) — Artan və ya azalan sıra ilə düzülmüş massivdə verilmiş elementin tapılması alqoritmidir.
İşləmə prinsipi
Eyni ilə ikili axtarış alqoritminin sxemi üzrə qurulur. Yeganə fərq ondan ibarətdir ki, massiv hər addımda ikiyə tən ortadan deyil, cari intervalın uclarındakı qiymətlərdən asılı olaraq ilə tapılmış mövqedən bölünür. Hesablamaya sərf olunan vaxt baxımından intervalın ikiyə ortadan bölunməsi ilə interpolyasıyanın hesablanması arasında fərq ciddi olmadığı üçün, bu intervalın daha böyük sürətlə yığılmasına gətirir. Massivdəki elementlərin sayı N olarsa, bir elementin mövqeyinin tapılması üçün orta hesabla müqayisə sərf edilər. Ən pis halda (məsələn verilənlər eksponsional xarakter daşıdıqda) tələb edilən əməliyatların sayı -ə çata bilər.
C++ proqramlaşdırma dilində icrasına nümunə
#include <iostream> #include <stdlib.h>/*srand(), rand(), RAND_MAX*/ #include <time.h>/*time()*/ #include <locale.h>/*setlocale()*/ using namespace std; const int n = 12;/* Massivin ölçüsü */ /* Artan sıra ilə düzülmüş massivdə interpolyasiya ilə axtarış funksiyasına nümunə */ int InterpolyasiyaIleAkhtar(int massiv[], int say, int axtarilan) { int sol = 0; int sag = say - 1; while ((massiv[sag] != massiv[sol]) && (axtarilan >= massiv[sol]) && (axtarilan <= massiv[sag])) { int yeniMovqe = sol + ((axtarilan - massiv[sol]) * (sag - sol) / (massiv[sag] - massiv[sol])); if (massiv[yeniMovqe] == axtarilan) return yeniMovqe; if (massiv[yeniMovqe] < axtarilan) sol = yeniMovqe + 1; else sag = yeniMovqe - 1; } if (axtarilan == massiv[sol]) return sol; return -1; } /* Massivi sıralamaq üçün tələb olunan müqaisə funksiyası.*/ /* Bu funksiya massivi artan sıra ilə düzür.*/ int compare(const void* elem1, const void* elem2) { if (*((int*)elem1) > *((int*)elem2)) return 1; if (*((int*)elem1) < *((int*)elem2)) return -1; return 0; } /* Alqoritminin istifadəsinə nümunə */ int main() { int massiv[n]; int i; setlocale(LC_ALL, ".utf8"); srand((unsigned)time(NULL)); cout << "Massivdəki ədədlərin ilkin təsadüfi sırası:\t"; for (i = 0; i < n; i++) { massiv[i] = 100.0 * rand() / (RAND_MAX + 1); cout << massiv[i] << " "; } cout << endl; /* Alqoritm ancaq sıralanmış massivlərlə işləyir */ qsort(massiv, n, sizeof(int), compare); cout << "Massivdəki ədədlər sıralandıqdan sonra:\t\t"; for (i = 0; i < n; i++) cout << massiv[i] << " "; cout << endl; while (true) { int axtarilan; cout << endl << "Proqramdan çıxmaq üçün mənfi, sırasının tapilması üçün isə hər hansı bir digər ədəd daxil edin: "; cin >> axtarilan; if (axtarilan < 0) break; int cavab = InterpolyasiyaIleAkhtar(massiv, n, axtarilan); if (cavab < 0) cout << "Cavab tapilmadi." << endl; else cout << "Sıra N=: " << cavab + 1 << endl; } }
Həmçinin bax
wikipedia, oxu, kitab, kitabxana, axtar, tap, meqaleler, kitablar, oyrenmek, wiki, bilgi, tarix, tarixi, endir, indir, yukle, izlə, izle, mobil, telefon ucun, azeri, azəri, azerbaycanca, azərbaycanca, sayt, yüklə, pulsuz, pulsuz yüklə, haqqında, haqqinda, məlumat, melumat, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, şəkil, muisiqi, mahnı, kino, film, kitab, oyun, oyunlar, android, ios, apple, samsung, iphone, pc, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, web, computer, komputer
Interpolyasiya ile axtaris ing Interpolation search Artan ve ya azalan sira ile duzulmus massivde verilmis elementin tapilmasi alqoritmidir Isleme prinsipiEyni ile ikili axtaris alqoritminin sxemi uzre qurulur Yegane ferq ondan ibaretdir ki massiv her addimda ikiye ten ortadan deyil cari intervalin uclarindaki qiymetlerden asili olaraq ile tapilmis movqeden bolunur Hesablamaya serf olunan vaxt baximindan intervalin ikiye ortadan bolunmesi ile interpolyasiyanin hesablanmasi arasinda ferq ciddi olmadigi ucun bu intervalin daha boyuk suretle yigilmasina getirir Massivdeki elementlerin sayi N olarsa bir elementin movqeyinin tapilmasi ucun orta hesabla log log N displaystyle log log N muqayise serf ediler En pis halda meselen verilenler eksponsional xarakter dasidiqda teleb edilen emeliyatlarin sayi O N displaystyle O N e cata biler C proqramlasdirma dilinde icrasina numune include lt iostream gt include lt stdlib h gt srand rand RAND MAX include lt time h gt time include lt locale h gt setlocale using namespace std const int n 12 Massivin olcusu Artan sira ile duzulmus massivde interpolyasiya ile axtaris funksiyasina numune int InterpolyasiyaIleAkhtar int massiv int say int axtarilan int sol 0 int sag say 1 while massiv sag massiv sol amp amp axtarilan gt massiv sol amp amp axtarilan lt massiv sag int yeniMovqe sol axtarilan massiv sol sag sol massiv sag massiv sol if massiv yeniMovqe axtarilan return yeniMovqe if massiv yeniMovqe lt axtarilan sol yeniMovqe 1 else sag yeniMovqe 1 if axtarilan massiv sol return sol return 1 Massivi siralamaq ucun teleb olunan muqaise funksiyasi Bu funksiya massivi artan sira ile duzur int compare const void elem1 const void elem2 if int elem1 gt int elem2 return 1 if int elem1 lt int elem2 return 1 return 0 Alqoritminin istifadesine numune int main int massiv n int i setlocale LC ALL utf8 srand unsigned time NULL cout lt lt Massivdeki ededlerin ilkin tesadufi sirasi t for i 0 i lt n i massiv i 100 0 rand RAND MAX 1 cout lt lt massiv i lt lt cout lt lt endl Alqoritm ancaq siralanmis massivlerle isleyir qsort massiv n sizeof int compare cout lt lt Massivdeki ededler siralandiqdan sonra t t for i 0 i lt n i cout lt lt massiv i lt lt cout lt lt endl while true int axtarilan cout lt lt endl lt lt Proqramdan cixmaq ucun menfi sirasinin tapilmasi ucun ise her hansi bir diger eded daxil edin cin gt gt axtarilan if axtarilan lt 0 break int cavab InterpolyasiyaIleAkhtar massiv n axtarilan if cavab lt 0 cout lt lt Cavab tapilmadi lt lt endl else cout lt lt Sira N lt lt cavab 1 lt lt endl Hemcinin baxAxtaris alqoritmleri