logo

Fundamental masalalar to'plamdagi elementni topish vazifasi. Ikkilik qidirish.

Загружено в:

08.08.2023

Скачано:

0

Размер:

395.091796875 KB
Mavzu:  Fundamental masalalar: to'plamdagi elementni topish vazifasi. Ikkilik 
qidirish.
Reja:
Ikkilik qidiruv algoritmi - Binary search algorithm
Ikkilik qidirish algoritmi ishlash prinsipi
  Ikkilik qidiruv algoritmi - Binary search algorithm
 Yilda Kompyuter fanlari, ikkilik qidirish, shuningdek, nomi bilan tanilgan yarim 
intervalli qidiruv,[1] logaritmik qidirish,[2] yoki ikkilik pirzola,[3] a qidirish 
algoritmi a ichida maqsad qiymatining o'rnini topadigan tartiblangan qator.[4][5] 
Ikkilik qidiruv maqsad qiymatini massivning o'rta elementi bilan taqqoslaydi. Agar
ular teng bo'lmasa, maqsad yotishi mumkin bo'lmagan yarmi yo'q qilinadi va 
qidiruv qolgan yarmida davom etadi, yana maqsad element bilan taqqoslash uchun 
o'rta elementni oladi va maqsad qiymati topilmaguncha buni takrorlaydi. Agar 
qidiruv qolgan yarmi bo'sh bo'lishi bilan tugasa, maqsad massivda emas.
 Ikkilik qidiruv ishlaydi logaritmik vaqt ichida eng yomon holat, qilish  
taqqoslashlar, qaerda  - bu massivdagi elementlar soni.[a][6] Ikkilik qidiruv tezroq 
chiziqli qidiruv kichik massivlardan tashqari. Biroq, ikkilik qidiruvni amalga 
oshirish uchun birinchi navbatda qatorni saralash kerak. Ixtisoslashgan ma'lumotlar
tuzilmalari kabi tezkor qidiruv uchun mo'ljallangan xash jadvallar, ikkilik 
qidiruvdan ko'ra samaraliroq qidirish mumkin. Shu bilan birga, ikkilik qidiruv 
yanada kengroq muammolarni hal qilish uchun ishlatilishi mumkin, masalan, 
qatorda yo'q bo'lsa ham, maqsadga nisbatan massivda keyingi eng kichik yoki eng 
katta elementni topish.
 Ikkilik qidiruvning ko'plab xilma-xilliklari mavjud. Jumladan, kasrli kaskad bir 
nechta qiymatdagi bir xil qiymatni ikkilik izlashni tezlashtiradi. Kesirli kaskad bir 
qator qidirish muammolarini samarali hal qiladi hisoblash geometriyasi va boshqa 
ko'plab sohalarda. Eksponent qidirish ikkilik qidiruvni cheklanmagan ro'yxatlarga 
kengaytiradi. The ikkilik qidiruv daraxti va B daraxti ma'lumotlar tuzilmalari 
ikkilik qidiruvga asoslangan.
                          Algoritm
  Ikkilik qidiruv tartiblangan massivlarda ishlaydi. Ikkilik qidiruv massivning 
o'rtasidagi elementni maqsad qiymati bilan taqqoslash orqali boshlanadi. Agar  maqsad qiymati elementga to'g'ri keladigan bo'lsa, uning massivdagi o'rni 
qaytariladi. Maqsad qiymati elementdan kam bo'lsa, qidiruv qatorning pastki 
yarmida davom etadi. Maqsad qiymati elementdan katta bo'lsa, qidiruv qatorning 
yuqori qismida davom etadi. Shunday qilib, algoritm maqsadli qiymat har bir 
iteratsiyada yotishi mumkin bo'lmagan yarmini yo'q qiladi.[7]
Ikkilik qidiruv algoritmi –   Bu algoritm asosan to’plamni ikkiga bo’lishlar orqali 
qidirishdan iborat. Yani unda bo’linishlar toki kalit so’z topilmagunicha davom 
etadi.
Yuqoridagilardan tashqari qidiruv algoritmlarini quyidagi turlari mavjud:
Jump Search.
Interpolatsiya qidiruvi.
Eksponensial qidiruv.
Sublist qidiruv. Va h-k. Misol tariqasida Ikkilik qidiruvni rekursiv shaklda Java dasturlash tilida ifoda 
qiladigan bo’lsak quyidagi ko’rinishga ega bo’ladi:
class BinarySearch {
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;
}
//
public static void main(String args[])
{
BinarySearch ob = new BinarySearch();
int arr[] = { 2, 3, 4, 10, 40 };
int n = arr.length; int x = 10;
int result = ob.binarySearch(arr, 0, n - 1, x);
if (result == -1)
System.out.println("Element topilmadi");
else
System.out.println("Element indeksi - " + result);
}
}
Ixtiyoriy ma’lumot (yoki tuzilma elementi) boshqa ma’lumotdan biror bir belgisi 
orqali farq qiladi. Mazkur belgi kalit deb ataladi. Kalit noyob bo’lishi, ya’ni 
mazkur kalitga ega ma’lumot jadvalda yagona bo’lishi mumkin. Bunday noyob 
kalitga boshlang’ich (birinchi) kalit deyiladi. Ikkinchi kalit bir jadvalda 
takrorlansada u orqali ham qidiruvni amalga oshirish mumkin. Ma’lumotlar kalitini
bir joyga yig’ish (boshqa jadvalga) yoki yozuv sifatida ifodalab bitta maydonga 
kalitlarni yozish mumkin. Agar kalitlar ma’lumotlar jadvalidan ajratib olinib 
alohida fayl sifatida saqlansa, u holda bunday kalitlar tashqi kalitlar deyiladi. Aks 
holda, ya’ni yozuvning bir maydoni sifatida jadvalda saqlansa ichki kalit deyiladi. 
Kalitni berilgan argument bilan mosligini aniqlovchi algoritmga berilgan argument
bo’yicha qidiruv deb ataladi. Qidiruv algoritmi vazifasi kerakli ma’lumotni 
jadvaldan topish yoki yo’qligini aniqlashdan iboratdir. Agar kerakli ma’lumot yo’q
bo’lsa, u holda ikkita ishni amalga oshirish mumkin:
1. Ma’lumot yo’qligini indikatsiya qilish (belgilash)
2. Jadvalga ma’lumotni qo’yish.
Faraz   qilaylik , k – kalitlar massivi. Har bir k(i) uchun r(i) – ma’lumot mavjud. Key
– qidiruv argumenti. Unga rec - informatsion yozuv mos qo’yiladi. Jadvaldagi 
ma’lumotlarning tuzilmasiga qarab qidiruvning bir necha turlari mavjud.
Ketma-ket qidiruv algoritmi Mazkur ko’rinishdagi qidiruv agar ma’lumotlar tartibsiz yoki ular tuzilishi noaniq 
bo’lganda qo’llaniladi. Bunda ma’lumotlar butun jadval bo’yicha operativ xotirada
kichik adresdan boshlab, to katta adresgacha ketma-ket qarab chiqiladi.
Massivda ketma-ket qidiruv (search o’zgaruvchi topilgan element tartib raqamini 
saqlaydi).
Ketma-ket qidiruv algoritmi C++ tilida quyidagicha bo’ladi:
int qidiruv(int key)
{ for (int i=0;i
if (k[i]==key) { search = i;return search;}
search = -1;
return search;
}}
Ushbu qidiruv usullarini o’rganish jarayonida biz tuzilmaning shakliga qarab biror 
kalitga mos elementni qidirishning optimal usulini qo’llashni o;rganishimiz va 
qidiruv usullarining samaradorligini taqqoslashni o’rganishimiz 
mumkin.Kompyuterda ma’lumotlarni qidirish asosiy amallardan biri 
hisoblanadi.Qidirishdan asosiy maqsad berilgan argument bo’yicha massiv 
ma’lumotlari ichidan mazkur argumentga mos ma’lumotlarni topish yoki bunday 
ma’lumot yo’qligini aniqlashdan iborat. Ixtiyoriy ma’lumot (yoki tuzilma 
elementi) boshqa ma’lumotdan biror bir belgisi orqali farq qiladi. Mazkur belgi 
kalit deb ataladi. Kalit noyob bo’lishi, ya’ni mazkur kalitga ega ma’lumot jadvalda 
yagona bo’lishi mumkin. Bunday noyob kalitga boshlang’ich (birinchi) kalit 
deyiladi. Ikkinchi kalit bir jadvalda takrorlansada u orqali ham qidiruvni amalga 
oshirish mumkin.
Ikkilik qidirish algoritmi ishlash prinsipi
Ikkilik qidirish algoritmini ishlash prinsipini tushunish uchun keling kompyuter 
bilan o'yin o'ynab ko'ramiz. O'yin shartlari quyidagicha:
Kompyuter 1 dan 100 gacha ixtiyoriy son tanlaydi. Sizning vazifangiz shu sonni 
iloji boricha kam taxmin ishlatgan holda topish. Har bir taxmindan keyin kompyuter sizga sizning taxminingiz kompyuter o'ylagan 
sondan katta yoki kichikligini aytadi.
Agar sizning taxminingiz kompyuter o'ylagan son bilan bir xil bo'lsa, o'yin tugaydi.
Xo'sh, bunda kamroq yo'l tutish uchun nima qilgan bo'lar edingiz?
Albatta, birinchi navbatda o'rtadagi sonni taxmin qilib ko'ramiz, ya'ni 50 ni
Aytaylik kompyuter bizga taxminimiz o'ylangan sondan kichikroq ekanligini aytdi.
Demak, endi biz 50 va undan kichik barcha son o'ylangan sondan kichik 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 o'ylangan sondan katta ekanligini aytdi. Demak, 75 dan katta 
barcha sonlar ham o'ylangan 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.
Ikkilik qidirish algoritmi ham huddi shunday prinsipda ishlaydi!

Mavzu: Fundamental masalalar: to'plamdagi elementni topish vazifasi. Ikkilik qidirish. Reja: Ikkilik qidiruv algoritmi - Binary search algorithm Ikkilik qidirish algoritmi ishlash prinsipi

Ikkilik qidiruv algoritmi - Binary search algorithm Yilda Kompyuter fanlari, ikkilik qidirish, shuningdek, nomi bilan tanilgan yarim intervalli qidiruv,[1] logaritmik qidirish,[2] yoki ikkilik pirzola,[3] a qidirish algoritmi a ichida maqsad qiymatining o'rnini topadigan tartiblangan qator.[4][5] Ikkilik qidiruv maqsad qiymatini massivning o'rta elementi bilan taqqoslaydi. Agar ular teng bo'lmasa, maqsad yotishi mumkin bo'lmagan yarmi yo'q qilinadi va qidiruv qolgan yarmida davom etadi, yana maqsad element bilan taqqoslash uchun o'rta elementni oladi va maqsad qiymati topilmaguncha buni takrorlaydi. Agar qidiruv qolgan yarmi bo'sh bo'lishi bilan tugasa, maqsad massivda emas. Ikkilik qidiruv ishlaydi logaritmik vaqt ichida eng yomon holat, qilish taqqoslashlar, qaerda - bu massivdagi elementlar soni.[a][6] Ikkilik qidiruv tezroq chiziqli qidiruv kichik massivlardan tashqari. Biroq, ikkilik qidiruvni amalga oshirish uchun birinchi navbatda qatorni saralash kerak. Ixtisoslashgan ma'lumotlar tuzilmalari kabi tezkor qidiruv uchun mo'ljallangan xash jadvallar, ikkilik qidiruvdan ko'ra samaraliroq qidirish mumkin. Shu bilan birga, ikkilik qidiruv yanada kengroq muammolarni hal qilish uchun ishlatilishi mumkin, masalan, qatorda yo'q bo'lsa ham, maqsadga nisbatan massivda keyingi eng kichik yoki eng katta elementni topish. Ikkilik qidiruvning ko'plab xilma-xilliklari mavjud. Jumladan, kasrli kaskad bir nechta qiymatdagi bir xil qiymatni ikkilik izlashni tezlashtiradi. Kesirli kaskad bir qator qidirish muammolarini samarali hal qiladi hisoblash geometriyasi va boshqa ko'plab sohalarda. Eksponent qidirish ikkilik qidiruvni cheklanmagan ro'yxatlarga kengaytiradi. The ikkilik qidiruv daraxti va B daraxti ma'lumotlar tuzilmalari ikkilik qidiruvga asoslangan. Algoritm Ikkilik qidiruv tartiblangan massivlarda ishlaydi. Ikkilik qidiruv massivning o'rtasidagi elementni maqsad qiymati bilan taqqoslash orqali boshlanadi. Agar

maqsad qiymati elementga to'g'ri keladigan bo'lsa, uning massivdagi o'rni qaytariladi. Maqsad qiymati elementdan kam bo'lsa, qidiruv qatorning pastki yarmida davom etadi. Maqsad qiymati elementdan katta bo'lsa, qidiruv qatorning yuqori qismida davom etadi. Shunday qilib, algoritm maqsadli qiymat har bir iteratsiyada yotishi mumkin bo'lmagan yarmini yo'q qiladi.[7] Ikkilik qidiruv algoritmi – Bu algoritm asosan to’plamni ikkiga bo’lishlar orqali qidirishdan iborat. Yani unda bo’linishlar toki kalit so’z topilmagunicha davom etadi. Yuqoridagilardan tashqari qidiruv algoritmlarini quyidagi turlari mavjud: Jump Search. Interpolatsiya qidiruvi. Eksponensial qidiruv. Sublist qidiruv. Va h-k.

Misol tariqasida Ikkilik qidiruvni rekursiv shaklda Java dasturlash tilida ifoda qiladigan bo’lsak quyidagi ko’rinishga ega bo’ladi: class BinarySearch { 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; } // public static void main(String args[]) { BinarySearch ob = new BinarySearch(); int arr[] = { 2, 3, 4, 10, 40 }; int n = arr.length;

int x = 10; int result = ob.binarySearch(arr, 0, n - 1, x); if (result == -1) System.out.println("Element topilmadi"); else System.out.println("Element indeksi - " + result); } } Ixtiyoriy ma’lumot (yoki tuzilma elementi) boshqa ma’lumotdan biror bir belgisi orqali farq qiladi. Mazkur belgi kalit deb ataladi. Kalit noyob bo’lishi, ya’ni mazkur kalitga ega ma’lumot jadvalda yagona bo’lishi mumkin. Bunday noyob kalitga boshlang’ich (birinchi) kalit deyiladi. Ikkinchi kalit bir jadvalda takrorlansada u orqali ham qidiruvni amalga oshirish mumkin. Ma’lumotlar kalitini bir joyga yig’ish (boshqa jadvalga) yoki yozuv sifatida ifodalab bitta maydonga kalitlarni yozish mumkin. Agar kalitlar ma’lumotlar jadvalidan ajratib olinib alohida fayl sifatida saqlansa, u holda bunday kalitlar tashqi kalitlar deyiladi. Aks holda, ya’ni yozuvning bir maydoni sifatida jadvalda saqlansa ichki kalit deyiladi. Kalitni berilgan argument bilan mosligini aniqlovchi algoritmga berilgan argument bo’yicha qidiruv deb ataladi. Qidiruv algoritmi vazifasi kerakli ma’lumotni jadvaldan topish yoki yo’qligini aniqlashdan iboratdir. Agar kerakli ma’lumot yo’q bo’lsa, u holda ikkita ishni amalga oshirish mumkin: 1. Ma’lumot yo’qligini indikatsiya qilish (belgilash) 2. Jadvalga ma’lumotni qo’yish. Faraz qilaylik , k – kalitlar massivi. Har bir k(i) uchun r(i) – ma’lumot mavjud. Key – qidiruv argumenti. Unga rec - informatsion yozuv mos qo’yiladi. Jadvaldagi ma’lumotlarning tuzilmasiga qarab qidiruvning bir necha turlari mavjud. Ketma-ket qidiruv algoritmi