To'g'ridan-to'g'ri qo - O`zbekiston respublikasi oliy ta`lim, fan va innovatsiyalar vazirligi osiyo xalqaro universiteti...

|
O`zbekiston respublikasi oliy ta`lim, fan va innovatsiyalar vazirligi osiyo xalqaro universiteti “Umumkasbiy fanlar” kafedrasi
|
bet | 5/7 | Sana | 17.01.2024 | Hajmi | 39,27 Kb. | | #139544 |
Bog'liq Kurs ishi bajardi S2-kt-21 guruh talabasi-fayllar.org2. To'g'ridan-to'g'ri qo'shish usuli bilan saralash algoritmi
Bunday usul karta o'yinida keng qo'llaniladi. Elementlar (kartalar) hayolan “tayyor” a(1),...,a(i-1) va boshlang'ich ketma-ketliklarga bo'linadi. Har bir qadamda (i=2 dan boshlanib, har bir qadamda bir birlikka oshirib boriladi) boshlang'ich ketma-ketlikdan i-chi element ajratib olinib tayyor ketma-ketlikning kerakli joyiga qo'yiladi.
To'g'ridan-to'g'ri qo'shish orqali saralash algoritmi quyidagicha bo'ladi:
for (int i=1;i
x=a[i];
x ni a[0]...a[i] oraliqning mos joyiga qo‘shish
}
Kerakli joyni qidirish jarayonini quyidagi tartibda olib borish qulay bo'ladi. 2-elementdan boshlab har bir elementni qarab chiqamiz, ya'ni har bir element o'zidan oldin turgan element bilan solishtiriladi. Agar qaralayotgan element kichik bo'lsa, oldinda turgan element bilan o'rin almashadi va yana o'zidan oldinda turgan element bilan solishtiriladi, jarayon shu kabi davom etadi. Bu jarayon quyidagi shartlarning birortasi bajarilganda to'xtatiladi:
1. x elementi oldida uning kalitidan kichik kalitli a(j) elementi chiqqanda.
2. x elementi oldida element qolmaganda.
for (int i=1;i
int j=i;
while(a[j]
int t=a[j-1];
a[j-1]=a[j];
a[j]=t;
j=j-1;
}
}
Algoritm samaradorligi
Faraz qilaylik, taqqoslashlar soni C, o'rinlashtirishlar soni M bo'lsin. Agar massiv elementlari kamayish tartibida bo'lsa, u holda taqqoslashlar soni eng katta bo'lib, u ga teng bo'ladi, ya'ni . O'rinlashtirishlar soni esa ga teng bo'ladi, ya'ni . Agar berilgan massiv o'sish tartibida saralangan bo'lsa, u holda taqqoslashlar va o'rinlashtirishlar soni eng kichik bo'ladi, ya'ni ,
Yangi bo’limimiz dasturlashda eng muhim mavzulardan bo’lgan saralash mavzusiga bag’ishlanadi. Biror bir ma’lumotni saralash yoki qandaydir qolipga solish juda ham muhim. Sababi, tartibsiz ma’lumotlar bilan ishlash doimo noqulayliklar keltirib chiqaradi va bunday tizim sekin va xatoliklarga moyil bo’ladi.
Tasavvur qilaylik sizda telefon raqamlari saqlanadigan daftarchasi bor (hali qo’l telefonlari ommalashmagan vaqtni eslang) va undagi nomlar tartibsiz holda yozilgan. Siz, aytaylik, Nodir ismli do’stingizning raqamini topishingiz uchun bu daftarchani boshidan boshlab axtarib chiqishga majbur bo’lasiz, bu esa ko’p vaqtni oladi. Lekin, agar ular alifbo tartibida saralab qo’yilgan bo’lsa, siz to’g’ri N harfiga o’tib izlashni boshlaysiz va vaqtdan bir necha barobarga yutasiz. (Chiziqli va Ikkilik saralash mavzularini eslang)
Biz bu bo’limda saralash deganda, eng oddiy bo’lgan arraydagi ma’lumotlarni saralashni nazarda tutamiz va bu kabi saralash algoritmlarining olti xilini ko’rib chiqamiz:
Selection sort (Tanlab saralash)
Bubble sort (Pufakchali saralash)
Insertion sort (Joylashtirib saralash)
Quick sort (Tezkor saralash)
Merge sort (Qo’shib saralash)
Radix sort
Ularning deyarli hammasi (6-sidan tashqari) ma’lumotlarni taqqoslab ko’rish orqali saralaydi va tayyor saralangan arrayni javob sifatida beradi. Birinchi 3 ta algoritm O(n²) vaqtda ishlasa, 4–5 lari O(nlogn) vaqtda ishlaydi. Algoritmlar bir xil ishni bajarsa va ularning aksariyatining ishlash vaqti ham bir xil bo’lsa, unda ularning hammasi nimaga kerak degan haqli savol tug’iladi.
Algoritm xilma-xilligiga ikkita asosiy sabab keltirish mumkin:
Algoritmlarning ishlash vaqtlari har doim ham bir xil bo’lmaydi va ularning ishlashi qandaydir ma’lum holatlarda o’zgarib turadi. Ya’ni, umumiy holatda biror algoritmdan yomonroq ishlovchi boshqa bir algoritm, aynan, qandaydir holat uchun undan ko’ra yaxshiroq ishlashi mumkin.
Buni tushunish uchun quyidagi misolni keltiramiz. Bu yerda turli xil saralash algoritmlarining ishlashi vizual holda bir biri bilan taqqoslangan. Birinchi holatda kiruvchi ma’lumotlar, ya’ni saralanishi kerak bo’lgan ma’lumotlar ixtiyoriy turda va holatda:
Source: toptal.com
Bu holatda Heap, Merge, Quick sort kabi algoritmlar o’z ishini boshidagi 3 ta algoritmdan ko’ra ancha tez yakunlayapti.
Endi esa bu misolga e’tibor bering. Endi saralanishi kerak bo’lgan ma’lumotlar to’liq bo’lmasa ham, deyarli saralangan holatda:
Source: toptal.com
Bu holda e’tibor bergan bo’lsangiz, Insertion sort (birinchi turgani) algoritmi yuqorida aytilgan murakkab algoritmlardan ko’ra bir necha barobar tez ishlashini ko’rishingiz mumkin.
Biz yuqorida faqat ikki xil holatni, ixtiyoriy va deyarli saralangan ma’lumotlarni saralagan holatni ko’rib chiqdik. Bunday holatlar esa ko’plab topiladi, masalan teskari saralangan, bir turdagi ma’lumotlar ko’p yoki kam bo’lgan va h.k ma’lumotlarni saralash. Har bir holat uchun ma’lum bir algoritmlar qolganlaridan ko’ra tezroq yoki sekinroq ishlab qolishi mumkin.
Ikkinchi sabab sifatida esa, albatta, saralash algoritmining xotiradan qo’shimcha joy egallashi va uning turg’unlik xususiyati inobatga olinadi.
Saralash algoritmlarida turg’unlik (stability) deganda, ikkita bir xil elementning ilk holatdagi bir biriga nisbatan o’rninini saralashdan keyin ham saqlab qolishiga aytiladi.
Masalan, 3 1 2 4 1 5 sonlari bor deylik, ularni saralmoqchimiz. Agar biz qo’llagan algoritm saraladan keyin doim birinchi 1 sonini ikkinchi 1 sonidan doim oldin joylashtirsa, bu algoritm turg’un saralovchi algoritm deyiladi.
Yana haqli savol tug’ilishi mumkin, “Bu narsaning kimga keragi bor, baribir natija 1 1 2 3 4 5 bo’ladiku?” degan. Albatta, bu holatda turg’unlik ahamiyati sezilmasligi mumkin. Lekin, aytaylik siz biror korxona ishchilari ma’lumotlarini ularning nomiga ko’ra saralagan paytda turg’unlik kerak bo’lib qolishi mumkin. Ya’ni, birinchi Nodirbek ma’lumotlari, ikkinchi Nodirbek ma’lumotlaridan keyin turishi kerak degan kabi.
Saralash algoritmlari ichidagi Quick Sort ko’p hollarda Merge yoki Heap sortdan tez ishlagani bilan u turg’un saralash algoritmi hisoblanmaydi (Turg’un holga keltirishning iloji bor).
Ko’rib turgangizdek har xil algoritmlar ishlash tezliklari bir xil bo’lgani bilan bizga turli holatlarda aynan bir turdagi algoritm kerak bo’lib qolishi va u biz tuzayotgan tizim samaradorligiga ta’sir qilishi mumkin. Shu sababdan, turli xil saralash algoritmlari ishlashini o’rganish va tushunish professional dasturchi uchun muhim hislatlardan biri hisoblanadi.
|
|
Bosh sahifa
Aloqalar
Bosh sahifa
O`zbekiston respublikasi oliy ta`lim, fan va innovatsiyalar vazirligi osiyo xalqaro universiteti “Umumkasbiy fanlar” kafedrasi
|