|
Binar qidirish algoritmi ishlash prinsipi
|
bet | 3/5 | Sana | 15.11.2023 | Hajmi | 185,42 Kb. | | #99352 |
Bog'liq malumotlar tuzilmasi va algoritm
Binary Search
Ikkilik qidirish algoritmining ishlashini tushunish uchun kompyuter bilan oʻyin oʻynab koʻramiz.
Oʻyin sharti
Kompyuter 1 va 100 oraligʻida ixtiyoriy natural son tanlaydi.
Oldimizda turgan vazifa shu sonni iloji boricha kam taxmin ishlatgan holda topish.
Har bir taxmindan keyin kompyuter sizga sizning taxminingiz kompyuter tanlagan sondan katta yoki kichikligini aytadi.
Agar sizning taxminingiz kompyuter tanlagan son bilan bir xil boʻlsa, oʻyin tugaydi.
Buning uchun eng kam qadamda topish algoritmi qaysi?
Birinchi navbatda oʻrtadagi sonni taxmin qilib koʻramiz, yaʼni 50 ni. Aytaylik kompyuter bizga taxminimiz kompyuter tanlagan sondan kichikroq ekanligini aytdi. Endi biz kompyuter tanlagan son 51 va 100 orasidagi son ekanligini bilamiz. Shunday qilib, bizning qidirish sohamiz ikki baravarga qisqaradi (50 ta son). Huddi shu tarzda davom etamiz. Endi 51 dan 100 gacha sonlar oʻrtasidagi sonni olamiz, yaʼni 75 ni. Kompyuter bizga 75 tanlangan sondan katta ekanligini aytdi. Demak, 75 dan katta barcha sonlar ham tanlangan sondan katta ekan. Shunday qilib, bizdagi qidirish sohasi yana ikki baravarga qisqardi (25 ta son). Huddi shunday davom etib, biz oʻylangan sonni topishimiz mumkin. Sonlar 100 ta boʻlgan holatda, biz har qanday tahminni koʻpi bilan 7 ta qadamda topishimiz mumkin boʻladi[1].
#include
using namespace std;
int binarySearch(int arr[], int l, int r, int x)
{
if (r >= l) {
int mid = l + (r - l) / 2;
if (arr[mid] == x)
return mid;
if (arr[mid] > x)
return binarySearch(arr, l, mid - 1, x);
return binarySearch(arr, mid + 1, r, x);
}
return -1;
}
int main(void)
{
int arr[] = { 2, 3, 4, 10, 40 };
int x = 10;
int n = sizeof(arr) / sizeof(arr[0]);
int result = binarySearch(arr, 0, n - 1, x);
(result == -1)
? cout << "Element massivda mavjud emas"
: cout << "Element indeksda mavjud " << result;
return 0;
}
Hesh so’zi ingliz tilidagi hash so’zidan olingan bo’lib, chalkash ( putanisa) yoki aralashma (meshanina) ma’nosini anglatadi
Ta’rif . Hesh-funksiya – bu kiruvchi ma’lumotlarning ixtiyoriy uzunlikdagi massivini belgilangan aniq uzunlikdagi bitlar qatoriga biror bir algoritm orqali akslantiruvchi bir tomonlama funksiyadir (funksiya svyortki).
Bunday amal -heshlash(+tirish) deyiladi.
Amalning natijasi (bitlar qatori)ga hesh yoki hesh kod yoki hesh-summa yoki ma’lumotlar yig’mi(cvodkasi ) deyiladi.
Bunday funksiyalar kriptografiya va axborot xavfsizlik masalalarida keng qo’llaniladi.
Hesh funksiya hossalari :
1.Teskari funksiyaning mavjud emasligi;
2.Kollizia holatining yo’qligi ;
3.DeterminanlanganIik
4. Natijaning tasodifligi.
Joylashtirish usuli (xeshlashtirish) ma’lumotlar tuzilmasida element joylashgan o‘rinni tez aniqlashga yo‘naltirilgan usuldir. Joylashtirish usulida ma’lumotlar oddiy massiv sifatida ifodalangan bo‘ladi.
Joylashtirish usuli (xeshlashtirish) ma’lumotlar tuzilmasida element joylashgan o‘rinni tez aniqlashga yo‘naltirilgan usuldir. Joylashtirish usulida ma’lumotlar oddiy massiv sifatida ifodalangan bo‘ladi.
Elementni jadvalga qo‘shishdan oldin uning adresi xesh-funksiya orqali aniqlanadi: A = h(K), bu erda K – kalit, A – jadvaldagi element adresi bo‘lib, 0 A N-1, shart o‘rinli bo‘ladi.
F xesh-funksiya deb R kiruvchi elementlar to‘plamini manfiy bo‘lmagan butun sonlar to‘plami Z ga akslantirishga aytiladi:
F xesh-funksiya deb R kiruvchi elementlar to‘plamini manfiy bo‘lmagan butun sonlar to‘plami Z ga akslantirishga aytiladi:
F(r)=n, rϵR, nϵZ.
Xesh-adreslash bu xesh-funksiya qiymatlar sohasini qandaydir bir ma’lumotlar massivining yacheykasi, adresi sifatida foydalanishdan iborat.
U holda ma’lumotlar massivi o‘lchami foydalanilayotgan xesh-funksiyaning qiymatlar sohasiga mos kelishi kerak.
Turli A1, A2, A3 identifikatorlar uchun mos ravishda n1, n2, n3 xesh-funksiya qiymatlari to‘g‘ri kelsin. n1, n2, n3 adreslarga mos yacheykalarda A1, A2, A3 identifikatorlar haqida ma’lumot joylanadi. A3 identifikatorni qidirishda n3 adres qiymati hisoblanadi va tegishli jadval yacheykasidan ma’lumotlar tanlanadi.
Turli A1, A2, A3 identifikatorlar uchun mos ravishda n1, n2, n3 xesh-funksiya qiymatlari to‘g‘ri kelsin. n1, n2, n3 adreslarga mos yacheykalarda A1, A2, A3 identifikatorlar haqida ma’lumot joylanadi. A3 identifikatorni qidirishda n3 adres qiymati hisoblanadi va tegishli jadval yacheykasidan ma’lumotlar tanlanadi.
Bu metod juda effektiv, elementlarni jadvalga joylash vaqti ham, qidiruv vaqti ham faqat xesh-funksiyani hisoblashga ketadi.
Bu metod juda effektiv, elementlarni jadvalga joylash vaqti ham, qidiruv vaqti ham faqat xesh-funksiyani hisoblashga ketadi.
Bu usulning 2 ta yaqqol kamchiligi bor:
1) identifikatorlar jadvalining xotira hajmidan unumsiz foydalanilishi. Massiv o‘lchami xesh-funksiya qiymatlar sohasiga mos kelishi kerak, ayni vaqtda real holatda jadvalda saqlanayotgan identifikatorlar ancha kam bo‘lishi mumkin.
2) mos keluvchi xesh-funksiyani tanlay bilish.
Xesh-funksiyadan natija olish - “xeshlash” simvollar zanjiri ustida oddiy arifmetik va mantiqiy amallarni bajarish hisobiga erishiladi.
Xesh-funksiyadan natija olish - “xeshlash” simvollar zanjiri ustida oddiy arifmetik va mantiqiy amallarni bajarish hisobiga erishiladi.
Xesh-adreslashda identifikatorlar jadvalining bir yacheykasiga 2 ta turli xil bo‘lgan identifikatorlar joylashishi mumkin emas. Bu vaziyat, ya’ni 2 yoki undan ortiq identifikatorlar xesh funksiyaning bir xil qiymatiga ega bo‘lish xodisasi kolliziya deb nomlanadi.
Demak, kolliziyaning yuzaga kelishi 2 ta har xil identifikator A1 va A2larning xesh-funksiya qiymatlari n1 va n2 bir xil (n1=n2) bo‘lishi hisoblanadi.
Kolliziya xolati
Kolliziya ro‘y berishini butunlay oldini oladigan, yaxshi xesh-funksiyani qurish mumkinmi?
Kolliziya ro‘y berishini butunlay oldini oladigan, yaxshi xesh-funksiyani qurish mumkinmi?
Aniqki, butunlay kolliziyaga uchramasligi uchun xesh-funksiyaning har bir natijaviy qiymati unikal bo‘lishi kerak.
Kolliziya muammosini echish uchun turli usullarni qo‘llash mumkin. Ulardan biri “rexeshlash” metodi hisoblanadi.
Bu metodga ko‘ra, A element uchun xesh-funksiya orqali hisoblangan h(A) adresi band bo‘lgan yacheykani ko‘rsatsa, unda n1=h1(A) funksiya qiymatini hisoblash zarur va n1 adresga tegishli yacheykani bandligini tekshirish kerak. Agar n1 ham band bo‘lsa, unda h2(A) qiymat hisoblanadi, shu tariqa bo‘sh yacheyka to’lguncha yoki hi(A) navbatdagi qiymat h(A) bilan mos kelgunga qadar davom etadi. Oxirgi holatda identifikatorlar jadvali to‘lgan va bo‘sh joy boshqa yo‘q, degan xatolik to‘g‘risida ma’lumot beradi.
Bu metodga ko‘ra, A element uchun xesh-funksiya orqali hisoblangan h(A) adresi band bo‘lgan yacheykani ko‘rsatsa, unda n1=h1(A) funksiya qiymatini hisoblash zarur va n1 adresga tegishli yacheykani bandligini tekshirish kerak. Agar n1 ham band bo‘lsa, unda h2(A) qiymat hisoblanadi, shu tariqa bo‘sh yacheyka to’lguncha yoki hi(A) navbatdagi qiymat h(A) bilan mos kelgunga qadar davom etadi. Oxirgi holatda identifikatorlar jadvali to‘lgan va bo‘sh joy boshqa yo‘q, degan xatolik to‘g‘risida ma’lumot beradi.
hi(A) funksiyani hisoblashning eng oddiy metodi, uni hi(A)=(h(A)+pi)modNm asosida qurishdir, bu erda pi qandaydir bir hisoblangan butun son, Nm –identifikatorlar jadvalidagi elementlarning maksimal soni. O‘z o‘rnida eng oddiy usul pi ni o‘rniga i ni qo‘yish bo‘ladi. Unda quyidagi formulani olamiz hi(A)=(h(A)+i)modNm. Bu holda xesh-funksiyaning bir xil qiymatlariga mos kelgan identifikatorlarni joylash uchun bo‘sh yacheykani qidirish mantiqan xesh-funksiya h(A) ko‘rsatgan joydan boshlanadi
hi(A) funksiyani hisoblashning eng oddiy metodi, uni hi(A)=(h(A)+pi)modNm asosida qurishdir, bu erda pi qandaydir bir hisoblangan butun son, Nm –identifikatorlar jadvalidagi elementlarning maksimal soni. O‘z o‘rnida eng oddiy usul pi ni o‘rniga i ni qo‘yish bo‘ladi. Unda quyidagi formulani olamiz hi(A)=(h(A)+i)modNm. Bu holda xesh-funksiyaning bir xil qiymatlariga mos kelgan identifikatorlarni joylash uchun bo‘sh yacheykani qidirish mantiqan xesh-funksiya h(A) ko‘rsatgan joydan boshlanadi.
Hesh so’zi ingliz tilidagi hash so’zidan olingan bo’lib, chalkash ( putanisa) yoki aralashma (meshanina) ma’nosini anglatadi.
Hesh so’zi ingliz tilidagi hash so’zidan olingan bo’lib, chalkash ( putanisa) yoki aralashma (meshanina) ma’nosini anglatadi
Hesh so’zi ingliz tilidagi hash so’zidan olingan bo’lib, chalkash ( putanisa) yoki aralashma (meshanina) ma’nosini anglatadi
Ta’rif . Hesh-funksiya – bu kiruvchi ma’lumotlarning ixtiyoriy uzunlikdagi massivini belgilangan aniq uzunlikdagi bitlar qatoriga biror bir algoritm orqali akslantiruvchi bir tomonlama funksiyadir (funksiya svyortki).
Bunday amal -heshlash(+tirish) deyiladi.
Amalning natijasi (bitlar qatori)ga hesh yoki hesh kod yoki hesh-summa yoki ma’lumotlar yig’mi(cvodkasi ) deyiladi.
Bunday funksiyalar kriptografiya va axborot xavfsizlik masalalarida keng qo’llaniladi.
Hesh funksiya hossalari :
1.Teskari funksiyaning mavjud emasligi;
2.Kollizia holatining yo’qligi ;
3.DeterminanlanganIik
4. Natijaning tasodifligi.
Joylashtirish usuli (xeshlashtirish) ma’lumotlar tuzilmasida element joylashgan o‘rinni tez aniqlashga yo‘naltirilgan usuldir. Joylashtirish usulida ma’lumotlar oddiy massiv sifatida ifodalangan bo‘ladi.
Joylashtirish usuli (xeshlashtirish) ma’lumotlar tuzilmasida element joylashgan o‘rinni tez aniqlashga yo‘naltirilgan usuldir. Joylashtirish usulida ma’lumotlar oddiy massiv sifatida ifodalangan bo‘ladi.
Elementni jadvalga qo‘shishdan oldin uning adresi xesh-funksiya orqali aniqlanadi: A = h(K), bu erda K – kalit, A – jadvaldagi element adresi bo‘lib, 0 A N-1, shart o‘rinli bo‘ladi.
F xesh-funksiya deb R kiruvchi elementlar to‘plamini manfiy bo‘lmagan butun sonlar to‘plami Z ga akslantirishga aytiladi:
F xesh-funksiya deb R kiruvchi elementlar to‘plamini manfiy bo‘lmagan butun sonlar to‘plami Z ga akslantirishga aytiladi:
F(r)=n, rϵR, nϵZ.
Xesh-adreslash bu xesh-funksiya qiymatlar sohasini qandaydir bir ma’lumotlar massivining yacheykasi, adresi sifatida foydalanishdan iborat.
U holda ma’lumotlar massivi o‘lchami foydalanilayotgan xesh-funksiyaning qiymatlar sohasiga mos kelishi kerak.
Turli A1, A2, A3 identifikatorlar uchun mos ravishda n1, n2, n3 xesh-funksiya qiymatlari to‘g‘ri kelsin. n1, n2, n3 adreslarga mos yacheykalarda A1, A2, A3 identifikatorlar haqida ma’lumot joylanadi. A3 identifikatorni qidirishda n3 adres qiymati hisoblanadi va tegishli jadval yacheykasidan ma’lumotlar tanlanadi.
Turli A1, A2, A3 identifikatorlar uchun mos ravishda n1, n2, n3 xesh-funksiya qiymatlari to‘g‘ri kelsin. n1, n2, n3 adreslarga mos yacheykalarda A1, A2, A3 identifikatorlar haqida ma’lumot joylanadi. A3 identifikatorni qidirishda n3 adres qiymati hisoblanadi va tegishli jadval yacheykasidan ma’lumotlar tanlanadi.
Bu metod juda effektiv, elementlarni jadvalga joylash vaqti ham, qidiruv vaqti ham faqat xesh-funksiyani hisoblashga ketadi.
Bu metod juda effektiv, elementlarni jadvalga joylash vaqti ham, qidiruv vaqti ham faqat xesh-funksiyani hisoblashga ketadi.
Bu usulning 2 ta yaqqol kamchiligi bor:
1) identifikatorlar jadvalining xotira hajmidan unumsiz foydalanilishi. Massiv o‘lchami xesh-funksiya qiymatlar sohasiga mos kelishi kerak, ayni vaqtda real holatda jadvalda saqlanayotgan identifikatorlar ancha kam bo‘lishi mumkin.
2) mos keluvchi xesh-funksiyani tanlay bilish.
Xesh-funksiyadan natija olish - “xeshlash” simvollar zanjiri ustida oddiy arifmetik va mantiqiy amallarni bajarish hisobiga erishiladi.
Xesh-funksiyadan natija olish - “xeshlash” simvollar zanjiri ustida oddiy arifmetik va mantiqiy amallarni bajarish hisobiga erishiladi.
Xesh-adreslashda identifikatorlar jadvalining bir yacheykasiga 2 ta turli xil bo‘lgan identifikatorlar joylashishi mumkin emas. Bu vaziyat, ya’ni 2 yoki undan ortiq identifikatorlar xesh funksiyaning bir xil qiymatiga ega bo‘lish xodisasi kolliziya deb nomlanadi.
Demak, kolliziyaning yuzaga kelishi 2 ta har xil identifikator A1 va A2larning xesh-funksiya qiymatlari n1 va n2 bir xil (n1=n2) bo‘lishi hisoblanadi.
Kolliziya xolati
Kolliziya ro‘y berishini butunlay oldini oladigan, yaxshi xesh-funksiyani qurish mumkinmi?
Kolliziya ro‘y berishini butunlay oldini oladigan, yaxshi xesh-funksiyani qurish mumkinmi?
Aniqki, butunlay kolliziyaga uchramasligi uchun xesh-funksiyaning har bir natijaviy qiymati unikal bo‘lishi kerak.
Kolliziya muammosini echish uchun turli usullarni qo‘llash mumkin. Ulardan biri “rexeshlash” metodi hisoblanadi.
Bu metodga ko‘ra, A element uchun xesh-funksiya orqali hisoblangan h(A) adresi band bo‘lgan yacheykani ko‘rsatsa, unda n1=h1(A) funksiya qiymatini hisoblash zarur va n1 adresga tegishli yacheykani bandligini tekshirish kerak. Agar n1 ham band bo‘lsa, unda h2(A) qiymat hisoblanadi, shu tariqa bo‘sh yacheyka to’lguncha yoki hi(A) navbatdagi qiymat h(A) bilan mos kelgunga qadar davom etadi. Oxirgi holatda identifikatorlar jadvali to‘lgan va bo‘sh joy boshqa yo‘q, degan xatolik to‘g‘risida ma’lumot beradi.
Bu metodga ko‘ra, A element uchun xesh-funksiya orqali hisoblangan h(A) adresi band bo‘lgan yacheykani ko‘rsatsa, unda n1=h1(A) funksiya qiymatini hisoblash zarur va n1 adresga tegishli yacheykani bandligini tekshirish kerak. Agar n1 ham band bo‘lsa, unda h2(A) qiymat hisoblanadi, shu tariqa bo‘sh yacheyka to’lguncha yoki hi(A) navbatdagi qiymat h(A) bilan mos kelgunga qadar davom etadi. Oxirgi holatda identifikatorlar jadvali to‘lgan va bo‘sh joy boshqa yo‘q, degan xatolik to‘g‘risida ma’lumot beradi.
hi(A) funksiyani hisoblashning eng oddiy metodi, uni hi(A)=(h(A)+pi)modNm asosida qurishdir, bu erda pi qandaydir bir hisoblangan butun son, Nm –identifikatorlar jadvalidagi elementlarning maksimal soni. O‘z o‘rnida eng oddiy usul pi ni o‘rniga i ni qo‘yish bo‘ladi. Unda quyidagi formulani olamiz hi(A)=(h(A)+i)modNm. Bu holda xesh-funksiyaning bir xil qiymatlariga mos kelgan identifikatorlarni joylash uchun bo‘sh yacheykani qidirish mantiqan xesh-funksiya h(A) ko‘rsatgan joydan boshlanadi.
hi(A) funksiyani hisoblashning eng oddiy metodi, uni hi(A)=(h(A)+pi)modNm asosida qurishdir, bu erda pi qandaydir bir hisoblangan butun son, Nm –identifikatorlar jadvalidagi elementlarning maksimal soni. O‘z o‘rnida eng oddiy usul pi ni o‘rniga i ni qo‘yish bo‘ladi. Unda quyidagi formulani olamiz hi(A)=(h(A)+i)modNm. Bu holda xesh-funksiyaning bir xil qiymatlariga mos kelgan identifikatorlarni joylash uchun bo‘sh yacheykani qidirish mantiqan xesh-funksiya h(A) ko‘rsatgan joydan boshlanadi.
|
| |