logo

Haqiqiy ikkilik qidiruv

Yuklangan vaqt:

12.08.2023

Ko'chirishlar soni:

0

Hajmi:

143.07421875 KB
Mavzu: “Haqiqiy ikkilik qidiruv”
Mundarija
I BOB. KIRISH ................................................................................................................................................................................................... 2
1.1 Haqiqiy ikkilik qidiruv nima? ...................................................................................................................................................................... 2
1.2 Ikkilik qidiruvning psevdokodi ................................................................................................................................................................... 5
1.3 Ikkilik qidiruvning afzalliklari ..................................................................................................................................................................... 6
II BOB. C++ tilida ikkilik qidiruv turlari ............................................................................................................................................................. 7
2.2 Sentinel ikkilik qidiruv ............................................................................................................................................................................... 8
2.3 Interpolatsiyali qidiruv va Ikkilik qidiruv .................................................................................................................................................. 11
2.4 C++ da bsearch() ikkilik qidiruv funksiyasi ............................................................................................................................................... 13
 III BOB. Binar(Ikkilik) daraxtlar ...................................................................................................................................................................... 16
3.1 Ikkilik daraxtga kirish ............................................................................................................................................................................... 16
 3.1.1 Ma'lumotlar tuzilishi va algoritm bo'yicha qo'llanmalar ...................................................................................................................... 16
3.2 Ikkilik daraxt o'tishlari: ............................................................................................................................................................................ 19
 XULOSA ........................................................................................................................................................................................................ 22
FOYDALANILGAN ADABIYOTLAR ................................................................................................................................................................... 23 I BOB.  KIRISH
1.1 Haqiqiy ikkilik qidiruv nima?
Algoritm   tushunchasi   zamonaviy   matematika   va   informatikaning   asosiy
tushunchalaridan biri hisoblanadi. Algoritm termini o’rta asrlar ulug’ matematigi
al-Xorazmiy   nomidan   kelib   chiqqan.   XX   asrning   30-yiligacha   algoritm
tushunchasi   ko’proq   matematik   ma’no   emas,   balki   metodologik   ma’noni   kasb
etar   edi.   Algoritm   deganda,   u   yoki   bu   masalalar   sinfini   yechish   imkonini
beruvchi   aniq   ifodalangan   chekli   qoidalar   majmui   tushunilgan.   EHM   larning
paydo   bo’lishi   bilan   algoritm   tushunchasi   yanada   keng   tarqaldi.   EHM   va
dasturlash   usullarining   rivojlanishi   algoritmlarni   ishlab   chiqish
avtomatlashtirishdagi zaruriy bosqich ekanligini tushunishga yordam berdi. EHM
larning paydo bo’lishi algoritmlar nazariyasining rivojlanishiga olib keldi. 
Algoritmlarni   tuzish   –   bu   ijodiy   ish   bo’lib,   ixtiyoriy   zaruriy   algoritmni
tuzish uchun umumiy usullar mavjud emas, kishining ijodiy qobiliyatiga bog’liq.
Algoritm tushunchasini formallashtirish asosida ularning samaradorliga 
taqqoslash, ularning ekvivalentligini tekshirish, qo’llanilish sohasini aniqlash 
mumkin. 
1930 yillarda yaratilgan (Post, Turing, Church) algoritmlarning turli-tuman
modellar 1950 yillarda taklif qilingan Kolmogorov va Markovning modelari 
singari bir xil, ekvivalentlik shu ma’noda-ki, bir modelda echib bo‘ladigan 
muammolarning har qanday sinfi, boshqasida ham hal etiladi.
Hozirgi paytda algoritmlar nazariya asosida olingan amaliy tavsiyanomalar
dasturiy tizimlarni loyihalash va ishlab chiqish sohalarida keng tarqalgan.
Tezroq qidirish imkonini beradigan narsalar ro'yxatini saralash g'oyasi 
antik davrga borib taqaladi. Ma‘lum bo'lgan eng qadimgi misol Bobildan 
eramizgacha bo'lgan Inakibit-Anu planshetidir. Miloddan avvalgi 200 - yil. 
Planshetda 500 ga yaqin kichik kichik raqamlar va ularning leksikografik tartibda
tartiblangan o'zaro raqamlari mavjud bo'lib, bu ma'lum bir yozuvni qidirishni 
osonlashtirdi. Bundan tashqari, Egey orollarida birinchi harfi bo'yicha saralangan 
bir nechta nomlar ro'yxati topilgan. Milodiy 1286 - yilda tugallangan lotincha 
lug'at katolikon so'zlarni faqat birinchi harflardan farqli ravishda alifbo tartibida 
tartiblash qoidalarini tavsiflovchi birinchi asar edi.
1946-yilda Jon Mauchli birinchi bo lib hisoblash texnikasi bo yicha ʻ ʻ
kollejning asosiy kursi bo lgan Mur maktabi ma ruzalarining bir qismi sifatida 	
ʻ ʼ
ikkilik qidiruv haqida gapirdi. 1957 yilda Uilyam Uesli Peterson interpolyatsiyani
qidirishning birinchi usulini nashr etdi. Har bir nashr etilgan ikkilik qidiruv 
algoritmi 1960 yilgacha Derrik Genri Lehmer barcha massivlarda ishlaydigan 
ikkilik qidiruv algoritmini nashr etgunga qadar uzunligi ikki uning kuchidan bir 
kichik massivlar uchungina ishlagan. 1962 yilda Hermann Bottenbruch ikkilik 
2 qidiruvning ALGOL 60 dasturini taqdim etdi, u oxirida tenglik uchun 
taqqoslashni joylashtirdi, o'rtacha takrorlash sonini bittaga oshirdi, lekin har bir 
iteratsiyadagi taqqoslash sonini bittaga qisqartirdi. Yagona ikkilik qidiruv 1971 
yilda Stenford universitetidan A. K. Chandra tomonidan ishlab chiqilgan. 1986 
yilda Bernard Chazelle va Leonidas J. Guibas hisoblash geometriyasida ko'plab 
qidiruv muammolarini hal qilish usuli sifatida kasr kaskadlarini kiritdilar.
Informatika fanida ikkilik qidiruv, shuningdek, yarim intervalli qidiruv, 
logarifmik qidiruv yoki ikkilik chop deb nomlanuvchi, tartiblangan massiv ichida
maqsadli qiymatning o‘rnini topadigan qidiruv algoritmi. Ikkilik qidiruv 
maqsadli qiymatni massivning o'rta elementi bilan taqqoslaydi. Agar ular teng 
bo'lmasa, nishon yotolmaydigan yarmi yo'q qilinadi va qolgan yarmida qidirish 
davom etadi, yana o'rta elementni maqsad qiymat bilan taqqoslash uchun olib, 
maqsad qiymat topilgunga qadar takrorlanadi. Agar qidiruv qolgan yarmi bo'sh 
bo'lishi bilan tugasa, maqsad massivda emas.
Ikkilik qidiruv logarifmik vaqt ichida eng yomon holatda ishlaydi. Ikkilik 
qidiruvni qo'llash uchun massiv avval tartiblangan bo'lishi kerak. Tez qidirish 
uchun mo'ljallangan maxsus ma'lumotlar tuzilmalari mavjud, masalan, xesh-
jadvallar, ularni ikkilik qidiruvdan ko'ra samaraliroq qidirish mumkin. Shu bilan 
birga, ikkilik qidiruv kengroq muammolarni hal qilish uchun ishlatilishi mumkin,
masalan, massivda bo'lmasa ham, maqsadga nisbatan massivdagi keyingi eng 
kichik yoki keyingi eng katta elementni topish.
Ikkilik qidiruvning ko'plab variantlari mavjud. Xususan, kasrli kaskad bir 
nechta massivlarda bir xil qiymat uchun ikkilik qidiruvlarni tezlashtiradi. 
Fraksiyonel kaskad hisoblash geometriyasi va boshqa ko'plab sohalarda bir qator 
qidiruv muammolarini samarali hal qiladi. Eksponensial qidiruv ikkilik qidiruvni 
cheklanmagan ro'yxatlargacha kengaytiradi. Ikkilik qidiruv daraxti va B-daraxt 
ma'lumotlar tuzilmalari ikkilik qidiruvga asoslangan.
Bizda Lineer Search yoki Sequential Search, Binary Search, Jump Search, 
Fibonachchi Search va boshqalar kabi yana ko'plab qidiruv algoritmlari mavjud 
va eng samaralilaridan biri Ikkilik qidiruv algoritmidir.
Chiziqli qidiruvda biz har bir massiv elementi bilan topilgan elementni 
massivning boshidan oxirigacha solishtiramiz (massiv elementlarini istalgan 
tartibda joylashtirish mumkin). Agar massivda maqsadli element topilsa, biz 
elementning indeksini qaytaramiz, aks holda -1 ni qaytaramiz, bu maqsad 
element topilmaganligini bildiradi. Elementni topish uchun O(n) vaqt ketadi, 
ikkilik qidiruv esa faqat O(log
2 N) vaqt oladi. Qanday qilib ko'ramiz.
3 Chiziqli qidiruv tartiblangan massivda
Maqsadli element
12
Qidirilgan son    3-indeksda maqsadli
4 6 7 12 23
  0    1     2     3      4     indekslar
Ko‘rib turganingizdek chiziqli qidiruvda chiziqli qidiruvda ma 7ssiv 
elementlarini birma-bir tekshirib chiqishimiz kerak.Bu esa katta hajmli 
ma’lumotlarda kerakli ma’lumotni izlashda bir qancha noqulayliklarga duch 
kelamiz:
1.Vaqtdan yutqazish;
2.Xotiradan yutqazish.
Ikkilik qidiruv algoritmi maqsadli elementni topish uchun tartiblangan 
massivda ishlaydi va chiziqli qidiruv algoritmiga qaraganda samaraliroq. 
Shunday qilib, keling, ikkilik qidiruv algoritmi qanday ishlashini ko'rib chiqamiz.
Agar sizda izlash kerak bo'lgan massiv bo'lsa, eng oddiy usul indexOf() 
yoki for() siklidan foydalanish bo'lishi mumkin. Ikkala variant ham massivning 
chap tomonida boshlanadi va kerakli qiymat topilmaguncha Massivdagi har bir 
elementni takrorlang.
Endi buni Ikkilik qidiruv bilan solishtiramiz.
Ikkilik qidiruv  massivni qayta-qayta ikkiga bo'lish orqali tartiblangan 
massivni qidirish imkonini beradi.
Ikkilik qidiruv bizning qidiruv qiymatimiz massivdagi o'rta qiymatdan 
katta ,  kichik  yoki  teng  ekanligini tekshirish orqali ishlaydi:
 Agar u kamroq bo'lsa, biz massivning o'ng yarmini olib tashlashimiz
mumkin.
 Agar u ortiq bo'lsa, biz massivning chap yarmini olib tashlashimiz 
mumkin.
 Agar u teng bo'lsa, biz qiymatni qaytaramiz
Bu yerda diqqatga sazovor narsa shundaki, massiv tartiblangan bo'lishi 
kerak - ya'ni ikkilik qidiruv ishlashi uchun qiymatlar bo'lishi kerak.Katta 
ma'lumotlar bo'laklari bilan ishlashda ikkilik qidiruvdan foydalanish tezroq 
bo'ladi, chunki har bir iteratsiyada bitta noto‘g‘ri qiymat o'rniga massivning 
noto‘g‘ri qiymatlarining 1/2 qismini olib tashlaysiz.
4 Ikkilik qidiruvning ishlashini Lug'at misoli bilan bog'lashingiz mumkin. 
Faraz qilaylik, bizning vazifamiz so'zining ma'nosini topishdir. Lug'atda so'zlar 
alifbo tartibida joylashtirilgan.
Bir yondashuv lug'atdagi har bir so'zni maqsadli so'z bilan (chiziqli 
qidiruv) o'qish va solishtirishdir. Biroq, siz sezganingizdek, bu usul ko'p vaqt 
talab etadi, chunki siz butun lug'atni skanerlashingiz kerak.
Yaxshiroq yondashuv bormi? Ha, biz yuqorida aytib o'tilganidek, ikkilik 
qidiruvdan foydalanishimiz mumkin.
Lug'atning o'rta sahifasini ochib, o'rta sahifadagi so'zlarni xotirjamlik bilan
solishtirishimiz mumkin.  Tinchlik  so'zi alifbo tartibida o'rta sahifadagi so'zlardan
keyin kelsa, biz lug'atning chap tomoniga e'tibor bermaymiz. Aks holda, 
lug'atning chap tomoniga e'tibor bermaymiz.
Tinchlik  so'zini topgunimizcha bu jarayonni davom ettiramiz. Lug‘atlar 
soni n ta bo’lsa, biz  Tinchlik  so‘zini eng yomon holatda log
2 (n) iteratsiyada topa 
olamiz.
Biz ikkilik qidiruvi orqali boshqa qidiruv algoritmlariga qaraganda vaqtdan ham, 
xotiradan ham yutamiz.
1.2 Ikkilik qidiruvning psevdokodi
Ikkilik qidiruvning ishlashini muhokama qilganimizdan so'ng, keling, 
uning psevdokodi qanday ko'rinishini ko'rib chiqaylik:
Start binary_search
   arr ← init or input a sorted array
   size ← size of the array
   k ← value to be searched
   Initialize start = 0
   Initialize end = size - 1
   Repeat while start <= end
      set mid = (start + end) / 2
      if arr[mid] == k 
         RETURN: k found at location mid, return mid
      else if arr[mid] > k
         set end = mid - 1    
      else if arr[mid] < k
5          set start = mid + 1
   Stop
Stop
1.3 Ikkilik qidiruvning afzalliklari
Ikkilik qidiruv chiziqli qidiruvga qaraganda tezroq, ayniqsa katta massivlar
uchun. Massiv hajmi kattalashgani sari chiziqli qidiruvni amalga oshirish vaqti 
chiziqli, ikkilik qidiruvni bajarish vaqti esa logarifmik ravishda ortadi.
Ikkilik qidiruv o'xshash vaqt murakkabligiga ega bo'lgan boshqa qidiruv 
algoritmlariga qaraganda samaraliroq, masalan, interpolyatsiya qidiruvi yoki 
eksponensial qidiruv.
Ikkilik qidiruvni amalga oshirish nisbatan sodda va tushunish oson, bu 
ko'plab ilovalar uchun yaxshi tanlovdir.
Ikkilik qidiruvdan ham tartiblangan massivlarda, ham tartiblangan 
bog‘langan ro‘yxatlarda foydalanish mumkin, bu uni moslashuvchan algoritmga 
aylantiradi.
Ikkilik qidiruv tashqi xotirada, masalan, qattiq diskda yoki bulutda 
saqlanadigan katta ma'lumotlar to'plamini qidirish uchun juda mos keladi.
Ikkilik qidiruvdan murakkabroq algoritmlar uchun qurilish bloki sifatida 
foydalanish mumkin, masalan, kompyuter grafikasi va mashinani o'rganishda 
qo'llaniladigan.
6 II BOB. C++  tilida ikkilik qidiruv turlari
2.1 Meta Ikkilik qidiruv(bir tomonlama Ikkilik qidiruv)
Meta Binary Search(shuningdek, Stiven Skiena tomonidan "Algoritmni 
loyihalash bo'yicha qo'llanma"ning 134-betida bir tomonlama ikkilik qidiruv deb 
ham ataladi) ikkilik qidiruvning o'zgartirilgan shakli bo'lib, massivdagi maqsadli 
qiymat indeksini bosqichma-bosqich tuzadi. Oddiy ikkilik qidiruv singari, meta 
binar qidiruvi O(log n) vaqtini oladi.
Meta Binary Search, shuningdek, bir tomonlama ikkilik qidiruv sifatida 
ham tanilgan, tartiblangan ro'yxat yoki elementlar massivini qidirish uchun 
ishlatiladigan ikkilik qidiruv algoritmining o'zgarishi. Ushbu algoritm berilgan 
element bo'yicha ro'yxatni qidirish uchun zarur bo'lgan taqqoslashlar sonini 
kamaytirish uchun mo'ljallangan.
Meta Binary Searchning asosiy g'oyasi butun massivni o'z ichiga olgan n 
o'lchamdagi boshlang'ich intervaldan boshlashdir. Keyin algoritm ikkilik 
qidiruvdagi kabi o'rta elementni hisoblab chiqadi va uni maqsad element bilan 
taqqoslaydi. Agar maqsad element topilsa, qidiruv tugaydi. Agar o'rta element 
maqsadli elementdan katta bo'lsa, algoritm yangi intervalni oldingi oraliqning 
chap yarmiga o'rnatadi va agar o'rta element maqsad elementdan kichik bo'lsa, 
yangi interval oldingi o'ng yarmiga o'rnatiladi. interval. Biroq, ikkilik qidiruvdan 
farqli o'laroq, Meta Binary Search tsiklning har bir iteratsiyasi uchun 
taqqoslashni amalga oshirmaydi.
Buning o'rniga, algoritm keyingi intervalning hajmini aniqlash uchun 
evristik usuldan foydalanadi. U o'rta element qiymati va maqsad element qiymati 
o'rtasidagi farqni hisoblab chiqadi va farqni oldindan belgilangan doimiyga, 
odatda 2 ga bo'ladi. Keyin bu natija yangi intervalning o'lchami sifatida 
ishlatiladi. Algoritm maqsad elementni topmaguncha yoki uning ro'yxatda 
yo'qligini aniqlamaguncha davom etadi.
Meta Binary Searchning ikkilik qidiruvdan afzalligi shundaki, u ba'zi 
hollarda, ayniqsa, maqsad element ro'yxat boshiga yaqin bo'lsa, kamroq 
taqqoslashni amalga oshirishi mumkin. Kamchilik shundaki, algoritm boshqa 
holatlarda, ayniqsa maqsadli element ro'yxat oxiriga yaqin bo'lsa, ikkilik 
qidiruvga qaraganda ko'proq taqqoslashni amalga oshirishi mumkin. Shuning 
uchun, Meta Binary Search, agar ro'yxat maqsadli elementlarning 
taqsimlanishiga mos keladigan tarzda tartiblangan bo'lsa, eng samarali 
hisoblanadi.
Mana Meta Binary Search uchun psevdokod:
7 function meta_binary_search(A, target):
    n = length(A)
    interval_size = n
    while interval_size > 0:
        index = min(n - 1, interval_size / 2)
        mid = A[index]
        if mid == target:
            return index
        elif mid < target:
            interval_size = (n - index) / 2
        else:
            interval_size = index / 2
    return -1
2.2 Sentinel ikkilik qidiruv
Nomidan ko'rinib turibdiki, Sentinel ikkilik qidiruv bu chiziqli qidiruvning 
bir turi bo'lib, an'anaviy chiziqli qidiruvga nisbatan taqqoslashlar soni kamayadi. 
N o'lchamdagi massivda chiziqli qidiruv amalga oshirilganda, eng yomon 
holatda, qidirilayotgan element massivning barcha elementlari bilan 
taqqoslaganda jami N ta taqqoslash amalga oshiriladi va (2N + 1) taqqoslash 
amalga oshiriladi. Indeks Sentinel chiziqli qidiruv qisqartirilishi mumkin bo'lgan 
massiv chegaralaridan tashqarida bo'lmasligi uchun solishtiriladigan element 
indeksi.
Bu qidiruvda massivning oxirgi elementi izlanadigan element bilan 
almashtiriladi, so‘ngra joriy indeks massivning indeks diapazonida yoki yo‘qligi 
tekshirilmasdan, chiziqli izlash massivda amalga oshiriladi, chunki izlanadigan 
element. Oxirgi element u bilan almashtirilgandan beri asl massivda bo'lmasa 
ham, albatta massiv ichida topiladi. Shunday qilib, tekshiriladigan indeks hech 
qachon massiv chegarasidan tashqariga chiqmaydi. Eng yomon holatda 
taqqoslashlar soni (N + 2) bo'ladi.
Sentinel chiziqli qidiruv - massiv yoki ro'yxatdagi maqsadli qiymatni 
topish uchun ishlatiladigan standart chiziqli qidiruv algoritmining o'zgarishi. 
Ushbu algoritmning asosiy g'oyasi massivning oxiriga biz izlayotgan maqsadli 
8 qiymatga teng bo'lgan sentinel qiymatini qo'shishdir. Bu siklning har bir 
iteratsiyasida massiv chegarasi holatini tekshirishdan qochishga yordam beradi, 
chunki sentinel qiymati tsikl uchun to'xtatuvchi vazifasini bajaradi.
Garchi eng yomon vaqt murakkabligida ikkala algoritm ham O (n) dir. 
Sentinel chiziqli qidiruvda faqat taqqoslashlar soni chiziqli qidiruvga qaraganda 
kamroq
Sentinel chiziqli qidiruvidan foydalanish:
Massivdagi elementni qidirish kontekstida Sentinel Linear Search qidiruv 
jarayonini optimallashtirish uchun sentinel qiymatidan foydalanadigan chiziqli 
qidiruv algoritmining variantidir.
Sentinel chiziqli qidiruv -ning asosiy g'oyasi qidiruv kalitiga mos 
keladigan massivning oxiriga qo'shimcha element qo'shishdir (ya'ni, sentinel 
qiymati). Shunday qilib, biz sikldagi massiv oxirini shartli tekshirishdan 
qochishimiz va qo'riqchi elementni topishimiz bilanoq qidiruvni erta tugatishimiz
mumkin. Bu massivning oxirini alohida tekshirish zaruratini yo'q qiladi, natijada 
algoritmning o'rtacha ish ko'rsatkichlari biroz yaxshilanadi.
Sentinel chiziqli qidiruv algoritmi uchun qadamlar:
 Qidiruv indeksi o'zgaruvchisini i dan 0 gacha ishga tushiring.
 Massivning oxirgi elementini qidirish tugmachasiga o‘rnating.
 Qidiruv kaliti massivning joriy elementiga (ya‘ni, arr[i]) teng 
bo'lmasa-da, i qidiruv indeksini oshiring.
 Agar i massiv o‘lchamidan kichik bo'lsa yoki arr[i] qidiruv kalitiga 
teng bo'lsa, i qiymatini qaytaring (ya'ni, massivdagi qidiruv kaliti indeksi).
 Aks holda, qidiruv kaliti massivda mavjud emas, shuning uchun -1 
ni qaytaring (yoki kalit topilmaganligini ko'rsatish uchun boshqa tegishli qiymat).
Sentinel chiziqli qidiruv algoritmining asosiy afzalligi shundaki, u massiv 
oxirini alohida tekshirish zaruratini yo'q qiladi, bu esa algoritmning o'rtacha ish 
faoliyatini yaxshilashi mumkin. Biroq, u hali ham O(n) bo'lgan eng yomon ish 
faoliyatini yaxshilamaydi (bu erda n - massivning o'lchami), chunki sentinel 
qiymatini topish uchun biz butun massivni skanerlashimiz kerak bo'lishi mumkin.
Misollar:
input: arr[] = {10, 20, 180, 30, 60, 50, 110, 100, 70}, x = 180 
Output: 180 2-indeksda joylashgan
Input: arr[] = {10, 20, 180, 30, 60, 50, 110, 100, 70}, x = 90 
9 Output: Topilmadi
Chiziqli qidiruv:  -
 Chiziqli qidiruv qidiruvning eng oddiy usuli hisoblanadi.
 Qidiruvning chiziqli qidiruv texnikasida; elementlarni qidirishda 
topiladigan element
 topiladi ro yxatda ketma-ket qidiriladi.ʻ
 Bu usul tartiblangan yoki tartiblanmagan ro‘yxatda (odatda 
massivlarda) bajarilishi mumkin.
 Saralangan ro‘yxatda qidiruv 0-elementdan boshlanadi va element 
bo‘lgunga qadar davom etadi
 ro'yxatidan yoki qiymati dan katta bo'lgan elementdan topilgan 
(ro'yxat tartiblangan bo'lsa ortib borish tartibida), qidirilayotgan qiymatga 
erishiladi.
 Bunga qarshi saralanmagan ro‘yxatda qidirish ham 0-elementdan 
boshlanadi va element yoki ro yxat oxirigacha davom etadi.	
ʻ
 Chiziqli qidiruv algoritmi massivdagi barcha elementlarni ketma-ket
qidiradi.
 Uning eng yaxshi bajarilish vaqti 1, eng yomoni esa n, bu yerda n 
jami
 qidiruv qatoridagi elementlar soni.
 Bu ma’lumotlar strukturasidagi eng oddiy qidiruv algoritmi bo‘lib, 
to‘plamdagi har bir elementni tekshiradi
 ma'lumotlar yig'ish oxirigacha qidiruv elementiga mos kelguncha 
elementlar.
 Ma’lumotlar saralanmagan bo‘lsa, chiziqli qidiruv algoritmiga 
ustunlik beriladi.
Chiziqli qidiruv bir uchidan boshlanadigan va kerakli element topilgunga 
qadar ro'yxatning har bir elementi bo'ylab o'tadigan ketma-ket qidiruv algoritmi 
sifatida aniqlanadi, aks holda qidiruv ma'lumotlar to'plamining oxirigacha davom
etadi. Bu eng oson qidiruv algoritmidir.
Chiziqli qidiruv algoritmi
10 1-qadam: Birinchidan, massivdagi qidirish elementini (Maqsadli element) 
o'qing.
2-qadam: Ikkinchi bosqichda qidiruv elementini massivdagi birinchi 
element bilan solishtiring.
3-qadam: Agar ikkalasi ham mos kelsa, "Nishon element topildi" ni 
ko'rsating va chiziqli qidiruvni to'xtating
funktsiyasi.
4-qadam: Agar ikkalasi ham mos kelmasa, qidiruv elementini massivdagi 
keyingi element bilan solishtiring.
5-qadam: Ushbu bosqichda 3 va 4-bosqichlarni qidirish (Nishon) elementi 
bilan solishtirilguncha takrorlang.
massivning oxirgi elementi.
6-qadam - Agar ro'yxatdagi oxirgi element mos kelmasa, chiziqli qidiruv 
funktsiyasi bo'ladi
tugatiladi va "Element topilmadi" xabari paydo bo'ladi.
2.3 Interpolatsiyali qidiruv va Ikkilik qidiruv
Interpolatsiya qidiruvi saralangan va bir xil taqsimlangan massiv uchun 
ikkilik qidiruvga qaraganda yaxshiroq ishlaydi.
Ikkilik qidiruv qidiruv kalitidan qat'i nazar tekshirish uchun o'rta 
elementga o'tadi. Boshqa tomondan, Interpolatsiya qidiruvi qidiruv kalitiga ko'ra 
turli joylarga borishi mumkin. Qidiruv kalitining qiymati oxirgi elementga yaqin 
bo'lsa, Interpolatsiya qidiruvi oxirgi tomondan qidirishni boshlashi mumkin.
Interpolatsiya qidiruvi va binar qidiruv ikkalasi ham tartiblangan ro yxat ʻ
yoki massivdagi ma lum elementni qidirish algoritmlaridir. Ikkala algoritm ham 	
ʼ
O (log n) ning o'rtacha vaqt murakkabligiga ega, ya'ni qidiruvni amalga oshirish 
uchun zarur bo'lgan vaqt ro'yxat hajmi bilan logarifmik ravishda o'sadi.
Biroq, interpolatsiya qidiruvi va ikkilik qidiruv o'rtasida ba'zi asosiy farqlar
mavjud:
Interpolatsiya qidiruvi maqsad elementning o'rnini uning atrofidagi 
elementlarning qiymatlari asosida baholaydi, ikkilik qidiruv esa har doim 
ro'yxatning o'rta elementini tekshirish bilan boshlanadi.
Ro yxatdagi elementlar bir xil taqsimlanganda interpolatsiyali qidiruv 	
ʻ
ikkilik qidiruvga qaraganda samaraliroq bo ladi, ikkilik qidiruv esa ro yxatdagi 	
ʻ ʻ
11 elementlar bir xil taqsimlanmaganda samaraliroq bo ladi.Interpolatsiya qidiruvi ʻ
ikkilik qidiruvga qaraganda ko'proq vaqt talab qilishi mumkin, chunki u maqsadli
elementning o'rnini baholash uchun qo'shimcha hisob-kitoblardan foydalanishni 
talab qiladi.
Dastur1:
//high ->yuqori index, low->quyi index, target->maqsadli //element
#include<bits/stdc++.h>
using namespace std;
int interpolation_search(int arr[],int target, int n){
int low = 0;
int high = n - 1;
while (low <= high && target >= arr[low] && target <= arr[high]){
// uning qiymatiga asoslangan maqsadli elementning o‘rnini 
aniqlaymiz
int pos = low + (((target - arr[low]) * (high - low)) / (arr[high] 
- arr[low]));
// Agar maqsadli element hisoblash o‘rnidagi element bo‘lsa, 
o‘zini chiqaramiz 
if( arr[pos] == target){
return pos;
}
// Agar hisoblangan holatdagi elementdan maqsadli element 
kichik bo‘lsa, ro’yxat yarmining chap qismidan qidiramiz
if(arr[pos] > target){
high = pos - 1;
}
else{
// Agar hisoblangan holatdagi elementdan maqsadli 
element katta bo‘lsa, ro’yxat yarmining o‘ng qismidan qidiramiz
low = pos + 1;
12 }
}
return -1;
}
int main(){
int arr[] = {3, 5, 7, 9, 11, 13, 17, 19, 23};
int n = sizeof(arr)/sizeof(int);
int target = 5;
int index = interpolation_search(arr, target, n);
// cout << index << endl;
if(index == -1){
cout << target << " ro’yxatda yo’q" << endl;
}
else{
cout << target << " indeksda topildi " << index << endl;
}
}
Interpolatsiya qidiruvi o'rtacha hisobda log(log(n)) taqqoslashni amalga 
oshiradi (agar elementlar bir xilda taqsimlangan bo'lsa), bu erda n - izlanadigan 
elementlar soni. Eng yomon holatda (masalan, tugmachalarning sonli qiymatlari 
eksponent ravishda ortib borsa) u O(n) ga teng taqqoslashlarni amalga oshirishi 
mumkin.
2.4 C++ da bsearch() ikkilik qidiruv funksiyasi
C++ tilida bizda stdlib.h sarlavha faylida mavjud bsearch() 
o'rnatilgan kutubxona funksiyasi mavjud. U C++ tilida oldindan belgilangan 
bo'lib, biz yuqorida muhokama qilganimizdek ishlaydi. bsearch() elementni 
saralangan ro'yxat/massivdan tezda qidirish uchun ishlatilishi mumkin.
Funktsiya formati:
#include <iostream>
void *bsearch(const void *key, const void *base, size_t num, size_t size,
13               int (*compare)(const void *element1, const void *element2));
Qaytish qiymati : bsearch() qidiruv kalitiga mos keladigan 
massiv elementiga ko'rsatgichni qaytaradi. Agar kalit uchun moslik topilmasa, 
NULL qiymati qaytariladi.
Dastur://C
#include <iostream>
using namespace std;
int compare(const void * m,const void * n) {
  return ( * (int * ) m - * (int * ) n);
}
int main() {
  int arr[6] = {1,5,19,26,31,69};
  int * element;
  int key; // search element
  cout << "Enter the target element: ";
  cin >>  key;
  /* bsearch() massivning ichida 31 qiymatini topish uchun ishlatildi*/
  element = (int * ) bsearch( & key, arr, 6, sizeof(int), compare);
  if (element != NULL) 
  {   
cout << "\n%d is found in the array" << *element;
  } 
  else 
  {
  cout << "\n%d could not be found in the array" << key;
  }
  return 0;
}
Dasturni takshiramiz va ishga tushiramiz.
14 Kiritish:
Enter the target element: 31
Chiqarish:
31 massiv ichidan topildi
Kiritish:
Enter the target element: 70
Chiqarish:
70 massiv ichidan topilmadi
Agar biz NULL qaytarilmagan elementni topsak, massivda topilgan 
elementni chop etishimizni kuzatishimiz mumkin. Aks holda, biz chop etish 
elementini massivda topib bo'lmaydi.
15   III BOB.  Binar(Ikkilik) daraxtlar
3.1 Ikkilik daraxtga kirish  
  3.1.1 Ma'lumotlar tuzilishi va algoritm bo'yicha qo'llanmalar
Daraxt - bu bog langan asiklik graf, ya’ni sikllar yo q va uchlar juftligi ʻ ʻ
orasida bitta yo l bor. Kirishning nol darajasiga ega bo lgan uch daraxtning ildizi,	
ʻ ʻ
chiqish nol darajaga ega tugunlar esa barglar deb nomlanadi. Chiziqli xarakterga 
ega massiv, stek, navbat va bog'langan ro'yxat kabi boshqa ma'lumotlar 
tuzilmalaridan farqli o'laroq, daraxt ierarxik tuzilmani ifodalaydi. Daraxtning 
buyurtma ma'lumotlari muhim emas. Daraxtda tugunlar va 2 ko'rsatgich mavjud. 
Ushbu ikkita ko'rsatkich ota-ona tugunining chap va o'ng bolasi. Keling, 
daraxtning shartlarini batafsil tushunaylik.
 Ildiz: Daraxtning ildizi ota-ona tuguniga ega bo'lmagan daraxtning 
eng yuqori tugunidir. Har bir daraxtda faqat bitta ildiz tugunlari mavjud.
 Ota tugun: Tugunning oldingi tuguniga shu tugunning asosiy 
tugunlari deyiladi.
 Child tugun: tugunning bevosita vorisi bo'lgan tugunga ushbu 
tugunning tugunlari deyiladi.
 Aka-uka: bir ota-ona tugunining bolalari aka-uka deb ataladi.
 Edge: Edge asosiy tugun va bola tugun o'rtasidagi bog'lovchi 
vazifasini bajaradi.
 Barg: bolasi bo'lmagan tugun barg tugunlari deb nomlanadi. Bu 
daraxtning oxirgi tugunidir. Daraxtda bir nechta barg tugunlari bo'lishi mumkin.
 Subtree: Tugunning pastki daraxti - bu alohida tugunni ildiz tugun 
deb hisoblaydigan daraxt.
 Chuqurlik: Tugunning chuqurligi - bu ildiz tugunidan ushbu 
tugungacha bo'lgan masofa.
 Balandlik: Tugunning balandligi - bu tugundan pastki daraxtning 
eng chuqur tuguniga qadar bo'lgan masofa.
 Daraxtning balandligi: Daraxtning balandligi har qanday tugunning 
maksimal balandligi. Bu ildiz tugunining balandligi bilan bir xil.
 Daraja: Daraja - bu daraxtning berilgan tuguniga mos keladigan ota-
ona tugunlari soni.
 Tugun darajasi: tugun darajasi uning bolalar soni.
 NULL: Ikkilik daraxtdagi NULL tugunlar soni (N+1), bu erda N 
ikkilik daraxtdagi tugunlar soni.
16 Nima uchun daraxt ma’lumotlar(Tree Data) strukturasidan 
foydalanish kerak?
1. Daraxtlardan foydalanishning sabablaridan biri siz tabiiy ravishda 
ierarxiyani tashkil etuvchi ma'lumotlarni saqlashni xohlayotganingiz bo'lishi 
mumkin. Masalan, kompyuterdagi fayl tizimi:
2. Daraxtlar (ba'zi tartiblar bilan, masalan, BST) o'rtacha kirish/qidiruvni 
ta'minlaydi (bog'langan ro'yxatga qaraganda tezroq va massivlarga qaraganda 
sekinroq).
3. Daraxtlar o'rtacha kiritish/o'chirishni ta'minlaydi (massivlarga qaraganda
tezroq va tartibsiz bog'langan ro'yxatlarga qaraganda sekinroq).
4. Bog'langan ro'yxatlar kabi va massivlardan farqli o'laroq, daraxtlarda 
tugunlar sonining yuqori chegarasi yo'q, chunki tugunlar ko'rsatgichlar 
yordamida bog'langan.
Daraxt ma'lumotlar strukturasining asosiy qo'llanilishi:
 Ierarxik ma'lumotlarni manipulyatsiya qilish.
 Ma'lumotni qidirishni osonlashtiring (daraxtlarni kesib o'tishga 
qarang).
 Ma'lumotlarning tartiblangan ro'yxatini boshqarish.
 Vizual effektlar uchun raqamli tasvirlarni birlashtirish uchun ish 
jarayoni sifatida.
 Router algoritmlarida
 Ko'p bosqichli qarorlar qabul qilish shakli (qarang, biznes shaxmat).
 Daraxtlar jumlaning tuzilishini ifodalash uchun ishlatilishi mumkin 
va gap grammatikasini tahlil qilish uchun algoritmlarni tahlil qilishda ishlatilishi 
mumkin.
 Daraxtlar o'yinlarda, masalan, qaror daraxtlarida kompyuter 
tomonidan boshqariladigan belgilarning qaror qabul qilish jarayonini ifodalash 
uchun ishlatilishi mumkin.
 Huffman kodlash matndagi belgilar chastotasini ifodalash uchun 
daraxtdan foydalanadi, bu ma'lumotlarni siqish uchun ishlatilishi mumkin.
Daraxtlar dasturlash tilining sintaksisini ifodalash uchun ishlatiladi va 
kompilyator dizaynida dastur sintaksisini tekshirish va mashina kodini yaratish 
uchun ishlatilishi mumkin.
Ikkilik daraxt nima?
17 Ikkilik daraxt - bu daraxt ma'lumotlar strukturasi bo'lib, unda har bir tugun 
eng ko'p ikkita avlodga ega bo'lishi mumkin, ular chap va o'ng bola deb ataladi. 
Ikkilik daraxtning eng yuqori tuguniga ildiz deyiladi, pastki qismi esa barglar deb
ataladi. Ikkilik daraxt ierarxik tuzilma sifatida ko'rinishi mumkin, ildiz tepada va 
barglari pastda.
Ikkilik daraxtlar kompyuter fanida ko'plab ilovalarga ega, jumladan 
ma'lumotlarni saqlash va qidirish, ifodani baholash, tarmoq marshrutlash va o'yin
AI. Ulardan qidirish, saralash va grafik algoritmlari kabi turli xil algoritmlarni 
amalga oshirish uchun ham foydalanish mumkin.
Ikkilik daraxtning tasviri:
Daraxtning har bir tugunida quyidagilar mavjud:
Ma'lumotlar
Chap bolaga ko'rsatgich
O'ng bolaga ko'rsatgich
Ikkilik daraxtdagi asosiy operatsiyalar:
Elementni kiritish.
Elementni olib tashlash.
Element qidirish.
Element uchun o'chirish.
Elementni aylanib o'tish. Oldinda muhokama qilinadigan ikkilik daraxtda 
to'rtta (asosan uchta) o'tish turlari mavjud.
Ikkilik daraxtda yordamchi operatsiyalar:
Daraxtning balandligini topish
18 Daraxtning darajasini topish
Butun daraxtning o'lchamini topish.
Ikkilik daraxtning ilovalari:
 Kompilyatorlarda ikkilik daraxtlarning ilovasi bo'lgan ifoda 
daraxtlari ishlatiladi.
 Huffman kodlash daraxtlari ma'lumotlarni siqish algoritmlarida 
qo'llaniladi.
 Priority Queue - bu ikkilik daraxtning yana bir ilovasi bo'lib, O(1) 
vaqt murakkabligida maksimal yoki minimal qidirish uchun foydalaniladi.
 Ierarxik ma'lumotlarni ifodalash.
 Microsoft Excel va elektron jadvallar kabi dasturlarni tahrirlashda 
foydalaniladi.
 Ma'lumotlar bazasida segmentlangan indekslash uchun foydali, 
tizimda keshni saqlash uchun foydalidir,
 Sintaksis daraxtlari GCC kabi dasturlash uchun eng mashhur 
kompilyatorlar va arifmetik amallarni bajarish uchun AOCL uchun ishlatiladi.
 Ustuvor navbatlarni amalga oshirish uchun.
 Elementlarni kamroq vaqt ichida topish uchun foydalaniladi (ikkilik 
qidiruv daraxti)
 Kompyuterlarda tezkor xotira ajratishni yoqish uchun foydalaniladi.
 Kodlash va dekodlash operatsiyalarini bajarish uchun ishlatiladi.
 Ikkilik daraxtlar teskari indeks va k-d daraxtlari kabi katta 
ma'lumotlar to'plamidan ma'lumotlarni tartibga solish va olish uchun ishlatilishi 
mumkin.
 Ikkilik daraxtlar o'yinlarda, masalan, qaror daraxtlarida kompyuter 
tomonidan boshqariladigan belgilarning qaror qabul qilish jarayonini ifodalash 
uchun ishlatilishi mumkin.
 Ikkilik daraxtlar saralangan ro'yxatdagi elementni tezda topish 
uchun ishlatilishi mumkin bo'lgan ikkilik qidiruv daraxtlari kabi qidiruv 
algoritmlarini amalga oshirish uchun ishlatilishi mumkin.
 Ikkilik daraxtlardan saralash algoritmlarini amalga oshirish uchun 
foydalanish mumkin, masalan, elementlarni samarali saralash uchun ikkilik 
to'pdan foydalanadigan yig'ma tartiblash.
3.2 Ikkilik daraxt o'tishlari:
Daraxtlarni kesish algoritmlarini ikki toifaga bo'lish mumkin:
 Depth-First Search (DFS) algoritmlari
 Kenglik-Birinchi Qidiruv (BFS) algoritmlari
19 Balandlik birinchi qidiruv (Depth-First Search - DFS) algoritmidan 
foydalangan holda daraxt kesishuvini yana uchta toifaga bo'lish mumkin:
a) Preorder Traversal(Oldindan buyurtma berish) (joriy-chap-o'ng): 
Chap yoki o'ng pastki daraxtlar ichidagi har qanday tugunlarga tashrif 
buyurishdan oldin joriy tugunga tashrif buyuring. Bu erda o'tish - ildiz - chap 
bola - o'ng bola. Bu shuni anglatadiki, avval ildiz tugunidan keyin uning chap 
qismi va oxirida o'ng tugun o'tadi.
b) Inorder Traversal (chap-joriy-o'ng): Chap pastki daraxt ichidagi 
barcha tugunlarga tashrif buyurganingizdan so'ng, lekin o'ng pastki daraxt 
ichidagi har qanday tugunga tashrif buyurishdan oldin joriy tugunga tashrif 
buyuring. Bu erda o'tish chap bola - ildiz - o'ng bola. Bu shuni anglatadiki, avval 
chap bola, keyin uning ildiz tugunini va nihoyat o'ng bolani kesib o'tadi.
c) Postorder Traversal (chap-o'ng-joriy): Chap va o'ng pastki 
daraxtlarning barcha tugunlariga tashrif buyurganingizdan so'ng ildizga tashrif 
buyuring. Bu erda o'tish chap bola - o'ng bola - ildiz. Bu shuni anglatadiki, chap 
bola avval o'ng bolani va nihoyat uning ildiz tugunini kesib o'tgan.
Kenglik-Birinchi Qidiruv (Breadth-First Search - BFS) algoritmidan 
foydalangan holda daraxt kesishuvini yana bir toifaga bo'lish mumkin:
o Daraja tartibini o'tkazish: Tugunlarni bosqichma-bosqich va chapdan
o'ngga bir xil darajada tashrif buyuring. Bu erda o'tish darajasi bo'yicha. Bu shuni
anglatadiki, birinchi navbatda eng chap bola, keyin chapdan o'ngga bir xil 
darajadagi boshqa bolalar o'tishdi.
Keling, barcha to'rtta o'tish usuli bilan quyidagi daraxt bo'ylab harakat 
qilaylik:
Ildiz
                  
                        Barglar
201
3
2
7654 Yuqoridagi daraxtning a) algoritmi uchun: 1-2-4-5-3-6-7
Yuqoridagi daraxtning b) algoritmi uchun: 4-2-5-1-6-3-7
Yuqoridagi daraxtning c) algoritmi uchun: 4-5-2-6-7-3-1
Daraja tartibida o‘tkazish: 1-2-3-4-5-6-7
21                                     XULOSA
Ma’lumki barcha kompyuter va boshqa hisoblash mashinalari 
matematikaga asoslangan. Biz matematikani amalda qo’llashni osonlashtirish 
uchun bulardan foydalanamiz.
Hayotimizda aniqlik juda muhim ro’l o’ynaydi.Biz tartiblangan ro’yxatdan
ma’lumot qidirayotganimizda ikkilik qidiruv algoritmi eng qulay yo’l ekanligini 
yuqorida ko’rdik.
Ikkilik qidiruv samarali, chunki u elementni topmaguncha yoki 
tekshiriladigan ro'yxatda faqat bitta element qolguncha qidiruv maydonini doimiy
ravishda yarmiga bo'ladi.
Ikkilik qidiruv eng yaxshi holatda O(1) va eng yomon holatda O(log
2 N) 
vaqt murakkabligiga ega.Ikkilik qidiruv iterativ usulda O(1) fazo murakkabligiga 
ega, rekursiv usulda esa O(log
2 N) ga teng.
Agar biz bu yerda chiziqli algoritmdan foydalansak, biz vaqtdan ham 
xotiradan ham ancha yutqazamiz.
22 FOYDALANILGAN ADABIYOTLAR
1. Toirov Sh.A., Raximov R.T., Karimov M.M " Algoritmga        kirish_fanidan 
laboratoriya mashgulotlari boyicha uslubiy kursatma (1) "
2. Алфред В. Ахо., Джон Э. Хопкрофт, Джефри Д. Ульман.   Структура 
данных и алгоритмы//Учеб.пос., М. : Изд.дом: "Вильямс", 2000, — 384 с.
3.   Binary Search in JavaScript. A practical Example   
4. Nazirov Sh.A., Qobulov R.V., Bobojanov M.R., Raxmanov Q.S. С va С++ 
tili. “Voris-nashriyot” MCHJ, Toshkent 2013, 488 b.
5. Horstmann, Cay S. C++ for everyone / Cay S. Horstmann. Printed in the 
United States of America - 2nd ed. 2010. – P. 562.
6. Bjarne Stroustrup. Programming: Principles and Practice Using C++ (2nd 
Edition). Person Education, Inc. 2014. second printing, January 2015.
23

Mavzu: “Haqiqiy ikkilik qidiruv” Mundarija I BOB. KIRISH ................................................................................................................................................................................................... 2 1.1 Haqiqiy ikkilik qidiruv nima? ...................................................................................................................................................................... 2 1.2 Ikkilik qidiruvning psevdokodi ................................................................................................................................................................... 5 1.3 Ikkilik qidiruvning afzalliklari ..................................................................................................................................................................... 6 II BOB. C++ tilida ikkilik qidiruv turlari ............................................................................................................................................................. 7 2.2 Sentinel ikkilik qidiruv ............................................................................................................................................................................... 8 2.3 Interpolatsiyali qidiruv va Ikkilik qidiruv .................................................................................................................................................. 11 2.4 C++ da bsearch() ikkilik qidiruv funksiyasi ............................................................................................................................................... 13 III BOB. Binar(Ikkilik) daraxtlar ...................................................................................................................................................................... 16 3.1 Ikkilik daraxtga kirish ............................................................................................................................................................................... 16 3.1.1 Ma'lumotlar tuzilishi va algoritm bo'yicha qo'llanmalar ...................................................................................................................... 16 3.2 Ikkilik daraxt o'tishlari: ............................................................................................................................................................................ 19 XULOSA ........................................................................................................................................................................................................ 22 FOYDALANILGAN ADABIYOTLAR ................................................................................................................................................................... 23

I BOB. KIRISH 1.1 Haqiqiy ikkilik qidiruv nima? Algoritm tushunchasi zamonaviy matematika va informatikaning asosiy tushunchalaridan biri hisoblanadi. Algoritm termini o’rta asrlar ulug’ matematigi al-Xorazmiy nomidan kelib chiqqan. XX asrning 30-yiligacha algoritm tushunchasi ko’proq matematik ma’no emas, balki metodologik ma’noni kasb etar edi. Algoritm deganda, u yoki bu masalalar sinfini yechish imkonini beruvchi aniq ifodalangan chekli qoidalar majmui tushunilgan. EHM larning paydo bo’lishi bilan algoritm tushunchasi yanada keng tarqaldi. EHM va dasturlash usullarining rivojlanishi algoritmlarni ishlab chiqish avtomatlashtirishdagi zaruriy bosqich ekanligini tushunishga yordam berdi. EHM larning paydo bo’lishi algoritmlar nazariyasining rivojlanishiga olib keldi. Algoritmlarni tuzish – bu ijodiy ish bo’lib, ixtiyoriy zaruriy algoritmni tuzish uchun umumiy usullar mavjud emas, kishining ijodiy qobiliyatiga bog’liq. Algoritm tushunchasini formallashtirish asosida ularning samaradorliga taqqoslash, ularning ekvivalentligini tekshirish, qo’llanilish sohasini aniqlash mumkin. 1930 yillarda yaratilgan (Post, Turing, Church) algoritmlarning turli-tuman modellar 1950 yillarda taklif qilingan Kolmogorov va Markovning modelari singari bir xil, ekvivalentlik shu ma’noda-ki, bir modelda echib bo‘ladigan muammolarning har qanday sinfi, boshqasida ham hal etiladi. Hozirgi paytda algoritmlar nazariya asosida olingan amaliy tavsiyanomalar dasturiy tizimlarni loyihalash va ishlab chiqish sohalarida keng tarqalgan. Tezroq qidirish imkonini beradigan narsalar ro'yxatini saralash g'oyasi antik davrga borib taqaladi. Ma‘lum bo'lgan eng qadimgi misol Bobildan eramizgacha bo'lgan Inakibit-Anu planshetidir. Miloddan avvalgi 200 - yil. Planshetda 500 ga yaqin kichik kichik raqamlar va ularning leksikografik tartibda tartiblangan o'zaro raqamlari mavjud bo'lib, bu ma'lum bir yozuvni qidirishni osonlashtirdi. Bundan tashqari, Egey orollarida birinchi harfi bo'yicha saralangan bir nechta nomlar ro'yxati topilgan. Milodiy 1286 - yilda tugallangan lotincha lug'at katolikon so'zlarni faqat birinchi harflardan farqli ravishda alifbo tartibida tartiblash qoidalarini tavsiflovchi birinchi asar edi. 1946-yilda Jon Mauchli birinchi bo lib hisoblash texnikasi bo yicha ʻ ʻ kollejning asosiy kursi bo lgan Mur maktabi ma ruzalarining bir qismi sifatida ʻ ʼ ikkilik qidiruv haqida gapirdi. 1957 yilda Uilyam Uesli Peterson interpolyatsiyani qidirishning birinchi usulini nashr etdi. Har bir nashr etilgan ikkilik qidiruv algoritmi 1960 yilgacha Derrik Genri Lehmer barcha massivlarda ishlaydigan ikkilik qidiruv algoritmini nashr etgunga qadar uzunligi ikki uning kuchidan bir kichik massivlar uchungina ishlagan. 1962 yilda Hermann Bottenbruch ikkilik 2

qidiruvning ALGOL 60 dasturini taqdim etdi, u oxirida tenglik uchun taqqoslashni joylashtirdi, o'rtacha takrorlash sonini bittaga oshirdi, lekin har bir iteratsiyadagi taqqoslash sonini bittaga qisqartirdi. Yagona ikkilik qidiruv 1971 yilda Stenford universitetidan A. K. Chandra tomonidan ishlab chiqilgan. 1986 yilda Bernard Chazelle va Leonidas J. Guibas hisoblash geometriyasida ko'plab qidiruv muammolarini hal qilish usuli sifatida kasr kaskadlarini kiritdilar. Informatika fanida ikkilik qidiruv, shuningdek, yarim intervalli qidiruv, logarifmik qidiruv yoki ikkilik chop deb nomlanuvchi, tartiblangan massiv ichida maqsadli qiymatning o‘rnini topadigan qidiruv algoritmi. Ikkilik qidiruv maqsadli qiymatni massivning o'rta elementi bilan taqqoslaydi. Agar ular teng bo'lmasa, nishon yotolmaydigan yarmi yo'q qilinadi va qolgan yarmida qidirish davom etadi, yana o'rta elementni maqsad qiymat bilan taqqoslash uchun olib, maqsad qiymat topilgunga qadar takrorlanadi. Agar qidiruv qolgan yarmi bo'sh bo'lishi bilan tugasa, maqsad massivda emas. Ikkilik qidiruv logarifmik vaqt ichida eng yomon holatda ishlaydi. Ikkilik qidiruvni qo'llash uchun massiv avval tartiblangan bo'lishi kerak. Tez qidirish uchun mo'ljallangan maxsus ma'lumotlar tuzilmalari mavjud, masalan, xesh- jadvallar, ularni ikkilik qidiruvdan ko'ra samaraliroq qidirish mumkin. Shu bilan birga, ikkilik qidiruv kengroq muammolarni hal qilish uchun ishlatilishi mumkin, masalan, massivda bo'lmasa ham, maqsadga nisbatan massivdagi keyingi eng kichik yoki keyingi eng katta elementni topish. Ikkilik qidiruvning ko'plab variantlari mavjud. Xususan, kasrli kaskad bir nechta massivlarda bir xil qiymat uchun ikkilik qidiruvlarni tezlashtiradi. Fraksiyonel kaskad hisoblash geometriyasi va boshqa ko'plab sohalarda bir qator qidiruv muammolarini samarali hal qiladi. Eksponensial qidiruv ikkilik qidiruvni cheklanmagan ro'yxatlargacha kengaytiradi. Ikkilik qidiruv daraxti va B-daraxt ma'lumotlar tuzilmalari ikkilik qidiruvga asoslangan. Bizda Lineer Search yoki Sequential Search, Binary Search, Jump Search, Fibonachchi Search va boshqalar kabi yana ko'plab qidiruv algoritmlari mavjud va eng samaralilaridan biri Ikkilik qidiruv algoritmidir. Chiziqli qidiruvda biz har bir massiv elementi bilan topilgan elementni massivning boshidan oxirigacha solishtiramiz (massiv elementlarini istalgan tartibda joylashtirish mumkin). Agar massivda maqsadli element topilsa, biz elementning indeksini qaytaramiz, aks holda -1 ni qaytaramiz, bu maqsad element topilmaganligini bildiradi. Elementni topish uchun O(n) vaqt ketadi, ikkilik qidiruv esa faqat O(log 2 N) vaqt oladi. Qanday qilib ko'ramiz. 3

Chiziqli qidiruv tartiblangan massivda Maqsadli element 12 Qidirilgan son 3-indeksda maqsadli 4 6 7 12 23 0 1 2 3 4  indekslar Ko‘rib turganingizdek chiziqli qidiruvda chiziqli qidiruvda ma 7ssiv elementlarini birma-bir tekshirib chiqishimiz kerak.Bu esa katta hajmli ma’lumotlarda kerakli ma’lumotni izlashda bir qancha noqulayliklarga duch kelamiz: 1.Vaqtdan yutqazish; 2.Xotiradan yutqazish. Ikkilik qidiruv algoritmi maqsadli elementni topish uchun tartiblangan massivda ishlaydi va chiziqli qidiruv algoritmiga qaraganda samaraliroq. Shunday qilib, keling, ikkilik qidiruv algoritmi qanday ishlashini ko'rib chiqamiz. Agar sizda izlash kerak bo'lgan massiv bo'lsa, eng oddiy usul indexOf() yoki for() siklidan foydalanish bo'lishi mumkin. Ikkala variant ham massivning chap tomonida boshlanadi va kerakli qiymat topilmaguncha Massivdagi har bir elementni takrorlang. Endi buni Ikkilik qidiruv bilan solishtiramiz. Ikkilik qidiruv massivni qayta-qayta ikkiga bo'lish orqali tartiblangan massivni qidirish imkonini beradi. Ikkilik qidiruv bizning qidiruv qiymatimiz massivdagi o'rta qiymatdan katta , kichik yoki teng ekanligini tekshirish orqali ishlaydi:  Agar u kamroq bo'lsa, biz massivning o'ng yarmini olib tashlashimiz mumkin.  Agar u ortiq bo'lsa, biz massivning chap yarmini olib tashlashimiz mumkin.  Agar u teng bo'lsa, biz qiymatni qaytaramiz Bu yerda diqqatga sazovor narsa shundaki, massiv tartiblangan bo'lishi kerak - ya'ni ikkilik qidiruv ishlashi uchun qiymatlar bo'lishi kerak.Katta ma'lumotlar bo'laklari bilan ishlashda ikkilik qidiruvdan foydalanish tezroq bo'ladi, chunki har bir iteratsiyada bitta noto‘g‘ri qiymat o'rniga massivning noto‘g‘ri qiymatlarining 1/2 qismini olib tashlaysiz. 4

Ikkilik qidiruvning ishlashini Lug'at misoli bilan bog'lashingiz mumkin. Faraz qilaylik, bizning vazifamiz so'zining ma'nosini topishdir. Lug'atda so'zlar alifbo tartibida joylashtirilgan. Bir yondashuv lug'atdagi har bir so'zni maqsadli so'z bilan (chiziqli qidiruv) o'qish va solishtirishdir. Biroq, siz sezganingizdek, bu usul ko'p vaqt talab etadi, chunki siz butun lug'atni skanerlashingiz kerak. Yaxshiroq yondashuv bormi? Ha, biz yuqorida aytib o'tilganidek, ikkilik qidiruvdan foydalanishimiz mumkin. Lug'atning o'rta sahifasini ochib, o'rta sahifadagi so'zlarni xotirjamlik bilan solishtirishimiz mumkin. Tinchlik so'zi alifbo tartibida o'rta sahifadagi so'zlardan keyin kelsa, biz lug'atning chap tomoniga e'tibor bermaymiz. Aks holda, lug'atning chap tomoniga e'tibor bermaymiz. Tinchlik so'zini topgunimizcha bu jarayonni davom ettiramiz. Lug‘atlar soni n ta bo’lsa, biz Tinchlik so‘zini eng yomon holatda log 2 (n) iteratsiyada topa olamiz. Biz ikkilik qidiruvi orqali boshqa qidiruv algoritmlariga qaraganda vaqtdan ham, xotiradan ham yutamiz. 1.2 Ikkilik qidiruvning psevdokodi Ikkilik qidiruvning ishlashini muhokama qilganimizdan so'ng, keling, uning psevdokodi qanday ko'rinishini ko'rib chiqaylik: Start binary_search arr ← init or input a sorted array size ← size of the array k ← value to be searched Initialize start = 0 Initialize end = size - 1 Repeat while start <= end set mid = (start + end) / 2 if arr[mid] == k RETURN: k found at location mid, return mid else if arr[mid] > k set end = mid - 1 else if arr[mid] < k 5