M ixtiyoriy tanlanganda ham taklif qilinayotgan algoritm korrekt ishlaydi.
Shu sababali M ni shunday tanlash lozimki, tadqiq
qilinayotgan algoritm
samaraliroq natija bersin, ya’ni
uni shunday tanlaylikki, iloji boricha kelgusi
jarayonlarda ishtirok etuvchi elementlar soni kam bo’lsin. Agar biz o’rtacha
elementni, ya’ni massiv o’rtasini tanlasak yechim mukammal bo’ladi.
Quyidagi chizma ko’rinishida berilgan massivni qarab chiqaylik.
Faraz
qilaylik, bizdan kaliti 52 ga teng bo’lgan elementni topish talab qilinsin. Dastlabki
taqqoslanadigan element 49 bo’ladi. 49<52 bo’lgani uchun sababli, keyingi qidiruv
49 dan yuqorida turgan elementlar orasida amalga oshiriladi. Yangi xosil bo’lgan
massiv o’rtasi 86. Agar berilgan kalit bilan ushbu kalitni taqqoslasak 86>52
bo’ladi. Demak, navbatdagi qidiruvlar 86 bilan 49 orasidagi elementlar ichida
amalga oshirilishi lozim. Keyingi qadamda ma’lum bo’ldiki,
qaralayotgan
elementlar o’rtasidagi element kaliti 52 ga teng. Shunday qilib, massivda berilgan
kalitga teng bo’lgan elementni topdik.
Yuqoridagi algoritmni amalga oshirish dasturi S++ tilida quyidagicha bo’ladi:
#include
#include
int Binsearch(int a[], int N, int key, int *t)
{
int l=0, r=N-1, mid=(l+r)/2;
while (l<=r)
{ *t+=1;
if (a[mid]==key) return mid;
if (a[mid]>key) r=mid-1;
else l=mid+1;
mid=(l+r)/2;
}
a[N]=key;
return N;
}
main ()
{
int i, N, mas[1000], key, P, t=0;
cout<
cin>>N;
cout<<"Massiv elementlarini kiriting!"<
for (i=0; i
cin>>mas[i];
cout<<"Qidiruv elementini kiriting!"<
cin>>key;
P=Binsearch(mas,N,key, &t);
if (P==N) cout<<"Bunday elementni massivga qo'shis lozim"<<" "<
"<
else cout<<"Bunday element bor"<<" "<
getch();
return 0;
}
Agar key = 101 bo’lsa, kerakli yozuv 3 marta
taqqoslashlarda aniqlanadi
(ketma-ket qidiruvda taqqoslashlar soni 7 ta bo’lar edi).
Agar
S – taqqoslashlar soni va
n – jadvaldagi elementlar soni bo’lsa, u holda
S = log
2
n.
Masalan,
n =
1024.
Ketma-ket qidiruvda
S = 512, binar qidiruvda
S =
10.
Agar katta xajmdagi ma’lumotlar ichida qidiruv
amalga oshirilayotgan
bo’lsa, u holda binar va indeksli ketma-ket qidiruvni umumlashtirib olib borish
mumkin. Sababi, har ikkala qidiruv ham tartiblangan massivda amalga oshiriladi.
52>
Dostları ilə paylaş: