Milliy universitetininig jizzax filiali amaliy matematika fakulteti «kompyuter ilmlari va dasturlashtirish»


Download 0.62 Mb.
bet1/2
Sana04.05.2023
Hajmi0.62 Mb.
#1424986
  1   2
Bog'liq
1-Mustaqil ish.docx#struktura


OʻZBEKISTON RESPUBLIKASI OLIY VA O‘RTA MAXSUS
TA’LIM VAZIRLIGI MIRZO ULUG‘BEK NOMIDAGI
MILLIY UNIVERSITETININIG JIZZAX FILIALI

AMALIY MATEMATIKA FAKULTETI
«KOMPYUTER ILMLARI VA DASTURLASHTIRISH» kafedrasi
ALGORITMLAR VA BERILGANLAR STRUKTURASI” FANIDAN
1-MUSTAQIL ISH
Mavzu: Linear search algoritmi
Bajardi: “Kompyuter ilmlari va dasturlash texnologiyalari” yoʻnalishi

2-kurs 10-21-guruh talabasi Xusanov O.


Tekshirdi: Tojiyev M.
Jizzax – 2023
M avzu:Liner search algoritmi. 29-variant.
Kirish: 29-mavzu.Liner Search haqida qisqacha ma’lumot.
Reja :

1. Liner Search haqida ma’lumotlar.


2. Linear qidiruv algoritmining ishlash jarayoni.
3 Algoritim asosida ishlovchi darstur.

Linear qidiruv (ingliz tilida Linear Search) - bu bir qidiruv algoritmi hisoblanadi, bitta elementni toppish vazifasini bajariladi. Bu usul orqali, qiymatlarni tartiblash shart emas. Algoritmdagi muhim nuqtalar - jadvallar, u bilan bitta elementni topadi va bu elementning indeksi qiymat orasida tasodifiy ravishda bo'lishi kerak.


Agar ma’lum elementi bo'lmasa, algoritm bu haqda ma’lumot chiqaradi. Liniya qidiruv algoritmi tashqi for loopdan iboratdir. Loop deshevo - qidiruv uchun kerakli barcha joylar bo‘yicha saylanadi va xohlagancha davom etadi. Algoritmda indeks, nomzod va n ma’lumotlar bo‘lishi mumkin. Chiziqli qidiruv bir uchidan boshlanadigan va kerakli element topilgunga qadar ro‘yxatning har bir elementidan o‘tib ketadigan ketma-ket qidiruv algoritmi sifatida aniqlanadi, aks holda qidiruv ma’lumotlar to‘plamining oxirigacha davom etadi.
Liner Search, ham bir necha elementli to‘plamlarda qidirish uchun ishlatiladigan oddiy algoritmlardan biridir. Bu algoritm to'plamdagi bir elementni qidirish uchun to‘plam barcha elementlarini tekshiradi va qidirayotgan elementga teng bo‘lgan elementni topishi yoki qidirayotgan elementi topilmay qolishi bilan bajariladi.
Liner Search (tenglab qidirish) quyidagi shaklda ifodalash mumkin:
1. Qidiriladigan elementni belgilash.
2. To'plam ichidagi har bir elementni tekshirish va qidirayotgan element bilan solishtirish.
3. Teng holda topilganda, elementni qaytarish.
4. Teng chiqmagan holda, keyingi elementni tekshirish va qaytarish.
5. To'plam tugaguncha element topilmasa, qidirayotgan element yo'q deb topiladi.
Liner Search algoritmi odatda barcha to'plam turlari uchun samarali emas, chunki to'plam hajmi kattaligi bilan barcha elementlarini tekshirishni talab qiladi. Bu esa katta to‘plamlarda qidirishni muammo qilishi mumkin. Bunday hollarda bisector method, binary search kabi boshqa algoritmlar qo'llaniladi.
1-rasm.Liner Search qidiruv algoritmi ishlash jarayoni.

using System;


class GFG {
public static int search(int[] arr, int x)
{
int N = arr.Length;
for (int i = 0; i < N; i++) {
if (arr[i] == x)
return i;
}
return -1;
}
// Driver's code
public static void Main()
{
int[] arr = { 2, 3, 4, 10, 40 };
int x = 10;
// Function call
int result = search(arr, x);
if (result == -1)
Console.WriteLine("Element massivda mavjud emas");
else
Console.WriteLine("Element indeksda mavjud " + result);
}
}
// earch() funksiyasi uchun massiv (arr) va qidirilayotgan element (x) parametrlarini aniqlanadi. Bu funksiya massivni oxirigacha bo'lgan har bir elementni tekshiradi va x-ga teng bo'lsa, undagi elementning indeksini qaytaradi. Agar x massivda topilmasa, funksiya -1 qiymatini qaytaradi.

Main() funksiyasi massiv va qidirilayotgan elementni aniqlaydi va search() funksiyasini chaqiradi. Agar funksiya -1 qiymatini qaytarsa, "Element massivda mavjud emas" deb chiqariladi. Aks holda, "Element indeksda mavjud" deb chiqariladi va indeks ko'rsatiladi.



Liner qidiruvni C#da misollar bilan tushunarliroq ko'ramiz:
1. Elementni qidirish:
public static int FindElement(int[] arr, int element)
{
for (int i = 0; i < arr.Length; i++)
{
if (arr[i] == element)
return i;
}
return -1;
}
int[] arr = { 1, 5, 7, 10, 15 };
int element = 7;
int index = FindElement(arr, element);
Console.WriteLine("Elementning indeksi: " + index);
Bu kod bir massiv ichida bitta elementni qidirish va uning indeksini qaytarish uchun yozilgan. Kodning asosiy funksiyasi FindElement, bu funksiya massivning har bir elementini bir-birini tekshirib, element topilganda uning indeksini qaytaradi. Agar element topilmasa funksiya -1 qiymatini qaytaradi. Keyin esa test natijalari qaytariladi, masalan, yuqoridagi kod ishga tushirilganda "Elementning indeksi: 2"
2. Massiv elementlari orasidan maksimal elementni qidirish:
public static int Maksimalson(int[] arr)
{
int max = arr[0];
for (int i = 1; i < arr.Length; i++)
{
if (arr[i] > max)
max = arr[i];
}
return max;
}
int[] arr = { 1, 5, 7, 10, 15 };
int max = Maksimalson (arr);
Console.WriteLine("Eng kattasi: " + max);
Bu C# dastur kodi sonlarni to'plamida eng kattasini aniqlaydi. ` Maksimalson ` funktsiyasi to'plam elementlarini qabul qiladi va unlar orasidan eng kattasini topadi. Dasturning oxirida ` Maksimalson ` funktsiyasiga berilgan to'plamdan eng katta sonni topib, konsolga chiqaradi.



  1. Ikki arrayda ham bor elementni chiqaradi

public static int Oybek(int[] arr1, int[] arr2)
{
for (int i = 0; i < arr1.Length; i++)
{
for (int j = 0; j < arr2.Length; j++)
{
if (arr1[i] == arr2[j])
return arr1[i];
}
}
return -1;
}
int[] arr1 = { 1, 5, 7, 10, 15 };
int[] arr2 = { 3, 7, 9, 15, 20 };
int Oybek = Oybek1(arr1, arr2);
Console.WriteLine("umumiy element: " +Oybek1);
Bu C# dastur kodi ikkita massiv ichida bir xil elementni topish uchun yaratilgan. Kodning yon tomoni ko'p qatlamli sikllar (nested loops)dan iborat bo'lib, arr1 va arr2 massivlari orasida har bir elementni taqqoslashdan iborat.

Agar massivlar orasida bir xil element mavjud bo'lsa, kod uni topib olinadi va uni qaytaradi. Aks holda, -1 qaytariladi (ya'ni bir xil element topilmadi).


Yuqoridagi kod dasturi arr1 va arr2 massivlarini aniqlash uchun ishlatiladi, va massivlar {1, 5, 7, 10, 15} va {3, 7, 9, 15, 20} mavjud. Dastur arr1 va arr2 massivlari o'rtasidagi shaxsga yozilgan " umumiy element " (ya'ni "umumiy element") matnini o'z ichiga oladi va ularni tayyorlashda Oybek() funktsiyasidan foydalanadi. Shu erda qaytarilayotgan natija birhol element bo'lishi mumkin (va xuddi shu kod mavjud massivlardagi 7 va 15 elementlarini aniqlashni o'rniga chiqadi).

  1. Qidiruv natijalari yig'indisni chiqaradi //7+7+7=21

public static int FindElementSum(int[] arr, int element)
{
int sum = 0;
for (int i = 0; i < arr.Length; i++)
{
if (arr[i] == element)
sum += arr[i];
}
return sum;
}
int[] arr = { 7, 3, 7, 10, 15, 7 };
int element = 7;
int sum = FindElementSum(arr, element);
Console.WriteLine("Qidiruv natijalari yig'indisi: " + sum);
Berilgan massivda berilgan elementni qidirib topib, uning yig'indisini qaytarish

  1. Ushbu dastur berilgan ism massivida qidirilayotgan ismni topadi va indeksini chiqaradi.

public static int Ismlarni_Tekshirish (string[] names, string name)
{
for (int i = 0; i < names.Length; i++)
{
if (names[i] == name)
return i;
}
return -1;
}
string[] names = { "Ali", "Vali", "Hasan", "Husan", "Jamshid" };
string name = "Hasan";
int index = Ismlarni_Tekshirish (names, name);
if (index == -1)
Console.WriteLine("Ism topilmadi");
else
Console.WriteLine("Ismning indeksi: " + index);
Berilgan massivdan bir ism izlash va uning indeksini topish. Ismlarni_Tekshirish () funksiyasi massivdagi ismlarni tekshirib berilgan ism bilan solishtiradi. Eger izlangan ism massivda topilmasa -1 qiymatini qaytaradi. Aks holda hulosa olish uchun topilgan indeksni qaytaradi. Dastur kodida esa yaratilgan massivdan "Hasan" ismini izlayapmiz. FindName() funksiyasi yordamida bu ism massivda borligi tekshiriladi va hulosa sifatida indeksi konsolga chiqariladi. Agar izlangan ism massivda bo'lmasa "Ism topilmadi" degan xatolik chiqariladi.

Misol.Forumda_1


Bu usul chiziqli qidiruvn u berilgan qiymat uchun massiv elementlarini ketma-ket ko'rib chiqish orqali ishlaydigan asosiy qidiruv algoritmidir. Usul "raqamlar" deb nomlangan butun sonlar qatorini aniqlash va uni oltita qiymat bilan ishga tushirishdan boshlanadi. Keyin u matn maydonidan qidirish uchun qiymatni oladi, uni Parse usuli yordamida int ga aylantiradi va uni "searchValue" deb nomlangan o'zgaruvchiga tayinlaydi.
Usul qidiruv qiymati topilgan yoki topilmaganligini kuzatish uchun "topildi" deb nomlangan mantiqiy o'zgaruvchidan foydalanadi. Keyin u for tsikli yordamida "raqamlar" massividagi har bir elementni aylantiradi. Har bir element uchun element qidiruv qiymatiga teng yoki yo'qligini tekshiradi. Agar shunday bo'lsa, u qiymat joriy indeksda (i) topilganligini ko'rsatadigan xabar oynasini ko'rsatadi, "topilgan" o'zgaruvchini rostga o'rnatadi va "break" iborasi yordamida tsikldan chiqadi.
Agar sikl qidiruv qiymatini topmasdan tugasa, "topilgan" o'zgaruvchi hali ham noto'g'ri bo'lib qoladi, bu qiymat topilmaganligini ko'rsatadi. Bunday holda, usul qiymat topilmaganligini ko'rsatadigan xabar oynasini ko'rsatadi.
Umuman olganda, bu usul chiziqli qidiruv yordamida massivdagi qiymatni izlashning oddiy va tushunarli usulini taqdim etadi. Biroq, kattaroq massivlar uchun u eng samarali qidiruv algoritmi bo'lmasligi mumkin, chunki u eng yomon vaqt murakkabligi O(n) ga ega, bu erda n massivdagi elementlar soni.
Bundan tashqari, qidiruv elementi massivda uchragan joyga bog'liq bo'lgan vaqt miqdorini ko'rsatmaydi, ya'ni qiymat massiv boshiga ya oxiriga ya o'rtasiga yaqin bo'lishi tashkil etuvchi ish haqida ma'lumot yo'qdir.
Shunday qilib usul yaxlit ko'p qidiruvlar ko'p berilgan paytda qo'llanish uchun to'g'ri keladi, ammo eng samarali vaqt murakkabligi ostida boshqa usullar mavjudligi sababli eng katta vaqt sarf etadigan qidiruv usullari hisoblanadi.
Misolcha:
vate void linearSearchButton_Click(object sender, EventArgs e)
{
int[] numbers = { 4, 7, 2, 8, 3, 5 }; // array of numbers to search through
int searchValue = int.Parse(textBox1.Text); // value to search for
bool found = false;
for (int i = 0; i < numbers.Length; i++)
{
if (numbers[i] == searchValue)
{
MessageBox.Show("Found at index " + i); // show message box with index where value was found
found = true;
break; // exit loop once value is found
}
}
if (!found)
{
MessageBox.Show("Value not found"); // show message box if value was not found
}
}

  1. misol.Ushbu dastur bir nechta funksialarni bajaradi:


Download 0.62 Mb.

Do'stlaringiz bilan baham:
  1   2




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling