Muallif
July 3, 2024
113Ikkilik qidiruv (eng: Binary search — ikkilik qidiruv)- saralangan elementlar roʻyxatidan elementni topish uchun samarali algoritmlardan biri hisoblanadi. Ikkilik qidiruv algoritmi ishlash gʻoyasiga koʻra "boʻlib tashla va hukmronlik qil" paradigmasi asosida ishlaydi.
Nazariy Qism
Ta'rif
Ikkilik qidiruv (eng: Binary search — ikkilik qidiruv)- saralangan elementlar roʻyxatidan elementni topish uchun samarali algoritmlardan biri hisoblanadi. Ikkilik qidiruv algoritmi ishlash gʻoyasiga koʻra "boʻlib tashla va hukmronlik qil" paradigmasi asosida ishlaydi.
Bu algoritmni tushunishdan oldin oddiy chiziqli qidiruv (Linear search) haqida gaplashamiz.
Chiziqli qidiruv (Linear search)
Chiziqli qidiruv algoritmi oddiy algoritm bo'lib, u ro'yxatdan element qidirganida ro'yxatdagi barcha elementga murojat qilib chiqadi. Bunday holatda algoritmning vaqt murakkabligi eng yaxshi holati O(1) va eng yomon holati esa O(n) ga teng bo'ladi, bu esa real hayotda juda yomon natija hisoblanadi.
Tasavvur qilaylik Instagramning 1 mlrd dan ziyod foydalanuvchisi bor va foydalanuvchi o'z profiliga kirmoqchi. Bunda Instagram foydalanuvchi loginini chiziqli qidirishdan foydalanib tekshiradigan bo'lsa va bunda kompyuter sekundiga 10⁶ ta loginni tekshirgan taqdirda ham, o'sha foydalanuvchi profiliga kirishi uchun 1000 soniya (16.6 daqiqa) kutishi kerak bo'lardi. Shu sababli ham bunday holatlar uchun bizga samaraliroq algoritmlar kerak bo'ladi.
Ikkilik qidiruvning ishlash pirinsipi
Ikkilik qidirish algoritmini ishlash prinsipini tushunish uchun keling do'stimiz bilan o'yin o'ynab ko'ramiz. O'yin shartlari quyidagicha:
Do'stimiz 36ni o'yladi.
Xo'sh bunday holatda nima qilamiz ?
Demak biz 1 dan 50 gacha oraliqda yashirin sonni topish uchun 5tagina urinish qildik, agar bu sonni biz chiziqli qidirganimizda 36ta urinish qilar edik.
Algorithm Murakkabligi
Algoritmning murakkabligi Time (vaqt) miqdori asosida o'lchanadigan qiymat. Bunda Time dasturning ishlash jarayonida ketqizadigan vaqti. Bu faktor algoritmni effektivligini aniqlaydi. Yaxshi algoritmlarda Time kam miqdorda bo'ladi, bu esa usha algoritmda yozilgan kodning ishlash tezligini oshiradi.
Algoritmlarni tahlil qilishni yana Asymptotic analysis ham deyiladi. Bunda kiritilgan input kattaligiga qarab algoritmning ishlash vaqti hisoblanadi.
Asymptotic analysis ga misol sifatida tartiblangan array'dan berilgan X sonni topish uchun Linear Search va Binary Search algoritmlarini taqqoslaymiz.
Linear search siklda arrayning birinchi elementidan boshlab X ni topguncha array elementlarini bittalab tekshirib chiqadi. Array uzunligini N deb oladigan bo'lsak, X ni topish uchun minimal 1 maksimal, N solishtirishni amalga oshiradi.
Binary Search ro'yxatning o'rtasidagi element qiymatini – M ni oladi va uni X bilan solishtiradi:
Hudi shunday uslubda, avval qismning o'rtasi M topiladi, keyin X ni M bilan solishtirib boriladi.
Biz 100 000 elementi bor katta ro'yxatni oladigan bo'lsak:
Binary Search orqali minimal 1ta, maksimal Log(100000) bu 16ga teng urinish degani. Linear Searchda esa minimal 1ta maksimal esa 100 000 urinish qiladi.
Biz aytib o'tgan urinishlar sonini aniqlashda ko'pincha best case(eng yaxshi holat), average case(o'rtacha holat) va worst case(eng yomon holat)lar orqali hisoblanadi.
Best case va worst case grekcha Θ harfi bilan yoziladi.
Linear search va binary search algoritmlari Θ da yozilganda:
Best case:
Worst case:
Amaliy Qism
Bizga Nta quydagicha tub sonlar ro'yxati berilgan bo'lsin va biz ushbu sonlar ro'yxatidan ro'yxatda qiymati Xga teng bo'lgan sonning joylashgan o'rnini topish muommosi qo'yilgan bo'lsin:
N = 17
X = 37
Biz ushbu muommoni birinchi chiziqli qidiruv (linear search) usulida qidirib ko'ramiz.
Endi xuddi shu muommoni ikkilik qidiruv (binary search) orqali yechib ko'ramiz: