#2 Izlew ha’m tan’law algoritmleri
Dizimdegi kerekli mag’liwmatlardi qidiriw teoriyaliq dasturlewdin’ waziypalarinin’ tiykarg’I na’rselerinen biri bolip esaplanadi. Qidiriw algoritmlerin taliqlap atirg’a waqitta, mag’liwmat bazi bir dizimdi payda etetin jaziwlarda bar bolg’an dep oylaymiz. Jaziwlar yamasa dizimler elementleri massivde jaylasqan boladi ha’m olar arasinda hesh qanday bosliq bolmawi kerek. Sanlardi jazamiz ha’m dizimde jaziwlardin’ uluwmaliq sani 1 den n ge shekem. Negizinde jaziwlar maydanlardan ibarat boliwi mu’mkin, biraq bizler ushin usi maydanlardan tek g’ana birewinin’ ma’nisine qizig’amiz. Ha’m bul gilt dep ataladi. Dizimler gilt maydanin’ ma’nisine qarap sortlanbag’an yamasa sortlang’an boliwi mu’mkin. Sortlanbag’an dizimde ma’nisler ta’rtipsiz jaylasqan boladi al sortlang’an o’siw ta’rtibinde dizimde izbe-iz jaylasqan boladi.
Sortlanbag’an dizimde kerek bolg’an gilt ma’nisin qidiriw dizimnin’ bar bolg’an elementlerin izlep atqan ma’niske ten’ bolaman degenshe ko’rip shig’iwdan ibarat boladi. Bul en’ an’sat ha’m a’piwayi algoritmlerden biri bolip esaplanadi. Bul algoritmnin’ effektivligi joqari emes ha’m ol ta’rtibsiz dizimde isleydi.
Sortlang’an dizimde ekilik qidiriw mu’mkin boladi. Ekilik qidiriwdi salistirsaq, onda izbe-iz jaylasqan elementlerden bir elemnti salistiriw ushin bir neshshe elementlerdi taslap qoyadi. Na’tiyjede qidiriw effektivli boladi.
Izbe-iz qidiriw algoritmi
Qidiriw algoritmlerinde bizge qandayda bir elementti izlewdegi dizimdi ko’rip shig’iw protsessi qiziq boladi. Biz bunda elementler dizimin sortlanbag’an dep esaplaymiz, sebebi bazi bir algoritmler sortlanbag’an dizimde effekti joqari boladi. Adette qidiriw izlep atirg’an giltimiz dizimde tek g’ana bar yamasa joq ekenligin aniqlaw esem yag’niy sol haqqinda toliq mag’liwmatqa iye boliw. Misali gilt ma’nis degenimiz jumisshinin’ nomeri yamasa tartib sani, yamasa basqa da identifikasiyon nomeri boliwi mu’mkin. Kerek bolg’an gilt aniqlang’annan son’ programma sol element benen baylanisli mag’liwmatlardi o’zgertiwge yamasa sol mag’liwmatlardi shig’arip beriwdi soraymiz. Izlew algoritminin’ maqsedi izlenip atirg’an giltimizdin’ jaylasqan ornin tawip beriwden ibarat boaldi. Sonliqdan qidiriw algoritmi dizimde indeksdi tawip beredi. Eger gilt ma’nis tawilmasa onda qidiriw algoritmi massivdin’ en’ joqarg’I shegarasinin’ u’stindegi indeksin shig’arip beredi. Dizimdegi jaziwlar 1 den n ge shekem bar bolsa biraq gilt ma’nisimiz joq bolsa onda bizge 0 ma’nisin qaytarip beredi. Izbe-iz qidiriw algoritmi dizimde birden baslap izlep atirg’an element tawilaman degenshe birme bir ko’rip shig’adi. Bunnan ko’rinip turipti gilt ma’nis dizimde turiwina baylanisili onin’ izlewine sonsha waqit ketedi.
public class Siziqli_izlew {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int n; int search, find, index;
n = input.nextInt();
int [] a = new int [n];
for(int i=0; i
{ a[i] = (int)(Math.random() * 50); }
System.out.println(Arrays.toString(a));
System.out.println("Qidirilib atirgan sandi kiritin = ");
search= input.nextInt();
for(int i=0; i
{ if(search == a[i])
{ search = a[i];
index = i;
System.out.println("search number= "+ search + " "+ "index= "+index);
} } } }
Binar qidiriw algoritmi:
Belgilangan ro'yxatning o'rta elementi bilan maqsadli qiymatni taqqoslashda uchta natijadan bittasini olish mumkin: qiymatlar teng, maqsad qiymati ro'yxat elementidan kamroq yoki maqsad qiymati ro'yxat elementlaridan kattaroqdir. Birinchi va eng yaxshi holatda, qidiruv yakunlandi. Qolgan ikkita holatda biz ro'yxatning yarmini tushirishimiz mumkin.
Agar maqsad qiymati o'rta elementdan past bo'lsa, biz bilamizki, agar u ro'yxatda bo'lsa, u ushbu o'rta elementdan oldin. Agar u o'rta elementdan kattaroq bo'lsa, biz bilamizki, agar u ro'yxatda bo'lsa, unda bu o'rtadagi elementdan keyin. Bu bitta taqqoslash bilan biz ro'yxatning yarmini tashlab yuborishimiz uchun etarli. Ushbu protsedurani takrorlashda biz ro'yxatning qolgan qismini yarmiga tashlashimiz mumkin.
Saralash tanlov usuli
public class Tanlaw_sort {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int n; n = input.nextInt();
int [] a = new int [n];
for(int i=0; i
{ a[i] = (int)(Math.random() * 50); }
System.out.println(Arrays.toString(a));
for (int i = 0; i < a.length; i++) {
/* Birinchi element (elementlarning har bir kichik qismida) minimal deb taxmin qilamiz */
int min = a[i];
int min_i = i;
/* Ichki qismning qolgan qismida biz kutilgan minimal darajadan past bo'lgan elementni qidiramiz */
for (int j = i+1; j < a.length; j++) {
//topilgan elementni saqlab qolamiz
if (a[j] < min) {
min = a[j];
min_i = j; } }
/* Agar mavjud holatdan kichikroq element topilsa, biz ularni almashtiramiz */
if (i != min_i) {
int tmp = a[i];
a[i] = a[min_i];
a[min_i] = tmp; } }
System.out.println(Arrays.toString(a)); }}
Binar qidiruw
static void BinarySearch(int [] a, int search)
{ int low=0; System.out.println("low= " +low);
int high = a.length -1; System.out.println("high= " + high);
while(low <= high)
{ int mid = (low + high) /2;
System.out.println("mid= " + mid);
if(search >= a[mid])
{ low = mid +1;
System.out.println("low= " + low); }
else if (search <= a[mid])
{ high = mid -1;
System.out.println("high= " + high); }
else break;
if (a[mid] == search)
{ System.out.println("san= "+ search + " "+ "index= "+mid);}
} }
Do'stlaringiz bilan baham: |