|
Binar qidiruv algoritmining asosiy funktsiyasini S++ dasturlash tilida yozing va uning ishlashini tushuntirib bering?
|
bet | 10/71 | Sana | 18.12.2023 | Hajmi | 5,63 Mb. | | #122750 |
Bog'liq Test gift and xml-fayllar.org20. Binar qidiruv algoritmining asosiy funktsiyasini S++ dasturlash tilida yozing va uning ishlashini tushuntirib bering?
int Search_Binary (int arr[], int left, int right, int key) {
int midd = 0;
while (1) {
midd = (left + right) / 2;
if (key < arr[midd]) // agar qidirilayotgan element kichik bo’lsa
right = midd - 1; // qidiruvning o’ng chegarasini aniqlash
else if (key > arr[midd]) // agar qidirilayotgan element katta bo’lsa
left = midd + 1; // qidiruvning chap chegarasini aniqlash
else // yoki (qiymat teng)
return midd; // funktsiya ushbu yacheyka qiymatini qaytaradi
if (left > right) // agar chegara mos kelmasa
return -1; } }
Agar qidirilayotgan kalit qiymatli element o’rta qiymatdan kichik bo’lsa, algoritm o’rta qiymatdan katta elementlar joylashgan qismini tekshirmaydi. Qidiruvning o’ng tomondagi chegarasi (midd - 1) ga joylashadi. Hosil bo’lgan qism massivni yana 2 ga bo’lamiz.
Qidiruv kaliti yana o’rta elementga teng emas, katta. Endi qidiruvning chap chegarasi (midd + 1) ga joylashadi.
Uchinchi qadamda o’rta element 3 indeksli elementga teng:
(3 + 4) / 2 = 3. U kalitga teng. Algoritm o’z ishini yakunlaydi.
21. Qiliruvning Interpoliyatsiya usulining S++ dasturlash tilidagi algoritmini yozing va ishlashini tushuntirib bering.
Interpolyatsiya — bu butun soha va qidirilayotgan qiymatga o’xshash elementlar joylashgan masofani hisoblash orqali qidiruv sohasini aniqlash usuli hisoblanadi. Bunga misol sifatida geometriyadagi o’xshash uchburchaklarni olish mumkin, bunda burchaklar qiymati bir xil, lekin proportsiyasi har xil bo’ladi. Interpolyatsiya usulida ham aynan shunday printsipdan foydalaniladi.
Qidiruv sohasi uzunligi soha boshidan kerakli songacha (masalan, markazdagi elementgacha) masofa hisoblanadi. Hisoblash element nomeri va qiymatlari bo’yicha amalga oshiriladi, undan keyin aniqlangan soha uzunligi bilan qiymatlar orasidagi uzunlik ko’paytiriladi va natijaga soha boshining qiymati qo’shilib, qidirilayotgan qiymat aniqlanadi.
Yuqorida keltirilgan algoritmning C++ dagi ko’rinishi quyidagicha:
#include
using namespace std;
int main() {
int A[] ={ 1, 2, 4, 6, 7, 89, 123, 231, 1000, 1235 };
int x = 0; int a = 0; int b = 9;
int d = 1235; //izlanayotgan element
bool found;
for (found = false; (A[a] < d) && (A[b] > d) && !found; )
{ x = a + ((d - A[a]) * (b - a)) / (A[b] - A[a]);
if (A[x] < d) a = x + 1;
else if (A[x] > d) b = x - 1;
else found = true; }
if (A[a] == d) cout << d << " element topildi indeksi " << a << " ga teng" << endl;
else if (A[b] == d) cout << d << " element topildi indeksi " << b << " ga teng" << endl;
else cout << "Topilmadi" << endl;
return 0; }
|
|
Bosh sahifa
Aloqalar
Bosh sahifa
Binar qidiruv algoritmining asosiy funktsiyasini S++ dasturlash tilida yozing va uning ishlashini tushuntirib bering?
|