AMALIY MASHG’ULOT- 2 Mavzu: Qidiruv algoritmlari: chiziqli va binary qidiruv. Xesh funksiyalar va xesh algoritmlarini tuzish.
Ishdan maqsad: Ushbu laboratoriya ishining maqsadi talabalar qanday qidirish usullari va algoritmlari mavjudligini va ularning samaradorliklarini baholashni o’rganishlari kerak. Shu asosda qidirish usullarini qiyosiy tahlil qilishlari, C++ dasturlash tilida qidirish bilan islashni va ularga oid dasturlar tuzishni o’zlashtirishlari kerak. Qo’yilgan masala: Talabalar topshiriq variantiga mos qidirish usuli yordamida masalani yechish dasturini yaratish ko’nikmasiga ega bo’lishlari kerak. Ish tartibi: 1.Tajriba ishi nazariy ma’lumotlarini o’rganish; 2.Berilgan topshiriqning algoritmini ishlab chiqish; 3. C++ dasturlash muhitida dasturni yaratish; 4. Natijalarni tekshirish; 5.Hisobotni tayyorlash va topshirish.
Aytaylik bizga massiv berilgan: a[]={15, 23, 7, 45, 87, 16}; Bizga ushbu massivda biron bir element bor yoki yo'qligini tekshira oladigan dastur tuzish sharti qo'yilgan. Ushbu masalani yechishda eng birinchi xayolga keladigan usul - bu massivni ketma-ket har bir elementini solishtirib chiqish va bu usul: Chiziqli qidiruv - Linear Search deb ataladi, va bu usul kodi quyidagi ko'rinishda: #include usingnamespace std;
int linearSearch(int array[], int size, int searchValue) { for(int i =0; i < size; i++) { if(searchValue == array[i]) { return i; } }
cout<<"Enter an integer: "<< endl; cin>> userValue;
int result = linearSearch(a, 6, userValue);
if(result >=0) { cout<<"The number "<< a[result]<<" was found at the" " element with index "<< result << endl; } else { cout<<"The number "<< userValue <<" was not found. "<< endl; }
}
Ko'rib turganingizdek, funksiyamiz 2 ta parametr qabul qiladi, birinchisi massivni o'zi, ikkinchisi esa biz qidirayotgan element. Agar uni topa olmasak, "-1" qiymatni qaytaramiz. Endi bundan optimal bo'lgan usul - binar(ikkilik) qidiruvni ko'rib chiqsak. Bu usulda ham funksiyaga 2 ta parametr, birinchisi massiv o'zi keyin esa biz qidirayotgan elementni parametr sifatida beriladi. Qidiruv esa quyidagicha: Dastlab biz massiv boshi va oxirini o'zimiz uchun o'zgaruvchilarda belgilab olamiz, mening kodimda bu left va right o'zgaruvchilaridir: left := 0 right := len(a) so'ngra quyidagi shart bajarilgan holda