Niderlandiya bayrog’i masalasi asosida saralash
Mavzu: “Niderlandiya bayrog’i masalasi asosida saralash” MUNDARIJA KIRISH ............................................................................................................ 2 I Bob. Niderlandiya bayrog’i masalasi ............................................................ 3 1.1 Niderlandiya bayrog’ini saralash ......................................................... 3 1.2.Niderlandiya bayrog’i muammosi. ...................................................... 4 1.3.Niderlandiya bayrog’i algoritmi. ......................................................... 5 II Bob. Niderlandiya bayrog’i masalasini algoritmlar orqali saralash ............ 7 2.1.QuikSort(Niderlandiya davlat bayrog’i). ............................................ 7 2.2.Ko’rsatkich yondashuvi ....................................................................... 9 2.3.Niderlandiya bayrog’i muammosi ..................................................... 13 XULOSA ................................................................................................. 16 ADABIYOTLAR RO’YXATI ................................................................ 17 ILOVALAR. ............................................................................................ 18
KIRISH Hozirgi zamonaviy texnologiyalar davrida axborot texnologiyalariga bo’lgan talabning ortib borishi natijasida, axborotlarni tartiblash , saralash va qayta tartiblash algoritmlari ham rivojlanib bormoqda Saralash algoritimlar ichida bayroqlar masalasi ham keltirib o’tilgan. Bayroq masalasi yechish algoritmi ko’p dasturlarda keng qo’llaniladi. Biz Niderlandiya bayrog’i masalasini saralash algoritmini kelib chiqishi haqda o’raganamiz. Niderlandiya bayrog’i saralash algoritmi Amerika bayrog’i bayrog’ning saralash algoritmining sodaroq ko’rinishidir. Niderlandiyaning davlat bayrog'i muammosi Edsger Dijkstra tomonidan kiritilgan dasturlash bilan bog'liq bo'lgan kompyuterda taniqli muammodir .Bunday muamolarni yechish saralash algoritmining loyhalash uchun qiziqish uyg’otadi Niderlandiya bayrog'i uchta rangdan iborat: qizil, ko'k va oq. To'plar ushbu uchta rangda berilgan (to'plar soni muhim emas) va vazifa to'plarni bir-birining yonida bir xil rangda bo'lishi va ular xuddi shu tartibda joylashganligi uchun joylashtirishdir.
I Bob. Niderlandiya bayrog’i masalasi 1.1 Niderlandiya bayrog’ini saralash Nniderlandiya bayrog'ini saralash :: Nniderlandiya bayrog'ini saralash "Amerika bayrog'i " turining soddaroq versiyasi (ixtiyoriy raqamlar o'rniga uchta raqam). Ikki rangli bayroq algoritmi Nniderlandiya isbatan soddalashtirilgan versiyadir. Bu odatiy ma'noda tartiblash emas, balki raqamlarni uchta raqamga taqsimlovchi algoritm: eng kam ahamiyatli raqam - shartli 0, o'rta raqam - shartli 1 va eng muhim raqam - shartli 2. Massiv tugmalariga uchta ko'rsatgich o'rnatilgan. Massivning boshida past va o'rta raqamlarga, oxirida - yuqoriga ko'rsatgichlar mavjud.Keyin massivning elementlari chapdan o'ngga qaraladi. Agar keyingi element eng kam ahamiyatli bitga to'g'ri kelsa, past tartibli ko'rsatgich bir pozitsiya o'ngga siljiydi. Agar keyingi element o'rta raqamga to'g'ri keladigan bo'lsa, u holda almashish o'rta raqam uchun ko'rsatgich tomonidan ko'rsatilgan raqam bilan amalga oshiriladi va o'rta raqamning o'zi bir pozitsiya o'ngga siljiydi. Agar keyingi element eng muhim raqamga to'g'ri keladigan bo'lsa, u holda almashish eng muhim raqamlar uchun ko'rsatgich tomonidan ko'rsatilgan raqam bilan amalga oshiriladi va eng muhim raqamning ko'rsatgichining o'zi bir pozitsiya chapga siljiydi. Niderlandiyaning davlat bayrog'i muammosi Edsger Dijkstra tomonidan kiritilgan dasturlash bilan bog'liq bo'lgan kompyuterda taniqli muammodir . Niderlandiya bayrog'i uchta rangdan iborat: qizil, ko'k va oq. To'plar ushbu uchta rangda berilgan (to'plar soni muhim emas) va vazifa to'plarni bir-birining yonida bir xil rangda bo'lishi va ular xuddi shu tartibda joylashganligi uchun joylashtirishdir. Muammoni massiv elementlarining tartibini o'zgartirish nuqtai nazaridan ko'rish mumkin . Mumkin bo'lgan elementlarning har birini uchta toifadan biriga (pastki, o'rta va yuqori) tasniflash mumkin deb taxmin qiling. Misol uchun, agar barcha elementlar 0 dan 1 gacha bo'lgan oraliqda bo'lsa, pastki qismi 0 dan 0,1 gacha bo'lgan elementlar bilan aniqlanishi mumkin (0,1 dan tashqari), o'rtasi 0,1 dan 1 gacha bo'lgan oraliqdagi elementlar bilan belgilanadi. 0,3, yuqori qismi esa 0,3 dan katta bo'lgan elementlardir. (Ushbu qiymatlarning tanlanishi toifalar teng diapazonda bo lishi shart emasligini ko rsatadi.) Demak, muammo “pastki”ʻ ʻ toifadagi barcha elementlardan oldin keladigan massiv yaratishdir (indeks quyidagidan kichik bo lishi kerak). ) yuqoridagi elementlardan oldin keladigan ʻ o'rtadagi elementlar. Bunga shunday erishish kerakki, massivga kiritilgan element tartiblash oxirigacha boshqa joyga ko'chirilmaydi. Algoritmlardan biri - massivning yuqori qismidan pastga tushadigan yuqori elementlarga, massivning pastki qismidan ko'tariladigan pastki elementlarga ega bo'lish va o'rta elementlarni faqat pastki elementlardan yuqorida tutishdir. Algoritm quyidagi joylarning indekslarini saqlaydi : yuqoridagi elementlardan aniq pastda, pastdan elementlardan yuqorida va o'rtadagi elementlardan to'liq yuqorida. Har bir qadamda massivning o'rtasidan to'liq yuqorida joylashgan element
tekshiriladi. Agar u yuqori qismga tegishli bo'lsa, biz uni yuqoridan pastroqdagi element bilan almashtiramiz (ya'ni, biz avval saqlangan tegishli indeksga ega bo'lgan element bilan). Agar u pastki qismga tegishli bo'lsa, biz uni pastki qismdan yuqorida joylashgan element bilan almashtiramiz. Agar u o'rtaga tegishli bo'lsa, biz hech narsani o'zgartirmaymiz. Keyin tegishli indekslar yangilanadi. Algoritm vaqt va makon murakkabligi O(n)ga ega. Tez tartiblash algoritmi qo'llaniladi . Quicksort elementlarni aylanma o rtadagi elementlarga teng bo lishi uchun qismlarga bo lish uchun, bu esaʻ ʻ ʻ keyinchalik burilishga teng bo lgan elementlarni siljitishning oldini oladi. ʻ 1.2.Niderlandiya bayrog’i muammosi. C++ Niderlandiya milliy bayrog'i muammosi.Gollandiya milliy bayrog'i (DNF) muammosi Edsger Dijkstra tomonidan taklif qilingan eng mashhur dasturlash muammolaridan biridir. Gollandiya bayroq algoritmi (DFA) massivlar uchun eng asosiy va muhim algoritmlardan biridir. U chiziqli vaqt murakkabligida 3 ta raqamdan iborat massivni ajratish uchun ishlatiladi.DFA uchun eng yomon vaqt murakkabligi O(n) va algoritm uchun fazoviy murakkablik O(1) dir. Niderlandiya bayrog'i uchta rangdan iborat: oq, qizil va ko'k. Vazifa oq, qizil va ko'k rangli to'plarni tasodifiy tartibga solishdir, shunda bir xil rangdagi to'plar bir-biriga joylashtiriladi. Nolga asoslangan massiv indeksatsiyasini nazarda tutuvchi uch tomonlama bo linish uchun quyidagi psevdokod Dijkstraning o zi tomonidan taklif ʻ ʻ qilingan. [2] U i ≤ j ≤ k invariantini saqlab, uchta i , j va k indekslaridan foydalanadi . 0 dan (lekin shu jumladan emas) i gacha bo'lgan yozuvlar o'rtadan kichik qiymatlardir , i dan (lekin shu jumladan emas) j gacha bo'lgan yozuvlar mid ga teng qiymatlardir , j dan (shu jumladan) k gacha yozuvlar hali tartiblanmagan qiymatlar va k + 1 dan massivning oxirigacha bo'lgan yozuvlar o'rtadan kattaroq qiymatlardir . Eslatma: ushbu algoritm uchta noyob elementga ega bo'lgan massivda amalga oshirilishi mumkin. procedure three-way-partition(A : array of values, mid : value): i ← 0 j ← 0 k ← size of A - 1 while j <= k: if A[j] < mid: swap A[i] and A[j] i ← i + 1 j ← j + 1 else if A[j] > mid: swap A[j] and A[k] k ← k - 1
else: j ← j + 1 1.3.Niderlandiya bayrog’i algoritmi. Gollandiyalik bayroq algoritmi (DFA) massivlar uchun eng asosiy va muhim algoritmlardan biridir. U chiziqli vaqt murakkabligida 3 ta raqamdan iborat massivni ajratish uchun ishlatiladi.DFA uchun eng yomon vaqt murakkabligi O(n) va algoritm uchun fazoviy murakkablik O(1) dir. Muammo bayonoti quyidagicha: Sizga 0, 1 va 2 dan iborat massiv taqdim etiladi. Vazifa barcha raqamlarni bir- biriga ajratadigan funktsiyani yozishdir. Buyurtma har qanday bo'lishi mumkin. Faraz qilaylik, taqdim etilgan A massivi A = [1, 2, 0, 1, 2, 0, 1, 2, 0] va kutilgan natija A = [2, 2, 2, 0, 0, 0, 1” , 1, 1] Muammoni hal qilish uchun birinchi navbatda buyurtmani tanlashimiz kerak. Bu misol uchun 2,1,0 ni tanlaymiz. Endi biz massivning uch xil indeksini ko'rsatuvchi 3 ta ko'rsatkichga ega bo'lishimiz kerak, ya'ni start, end va P .Boshlanish o'rta elementning birinchi indeksini, ya'ni bu erda 0 ni bildiradi . End o'rta elementning oxirgi indeksini bildiradi va P ko'rsatkichi massivni aylanib o'tish uchun ishlatiladi. P belgisi End ga teng bo'lmaganda tsikl ishlaydi . P harakatlanayotganda, agar P 2 ga duch kelsa, u uni start bilan almashtiradi va startni oshiradi. Xuddi shunday, agar P 1 ga duch kelsa, u uni oxiri va kamaytiruvchi uchi bilan almashtiradi C++ dasturlash tilida qisqacha dasturyiy qism public class DutchFlagAlgorithm { public int[] dutchFlagAlgorithm(int[] inputArray, int size) { int start = 0; int p = 0; int end = size - 1; int temp; while (p < end) { if (inputArray[p] == 2) { temp = inputArray[p]; inputArray[p] = inputArray[start]; inputArray[start] = temp; start++; p++; } else if (inputArray[p] == 0) { p++; } else { temp = inputArray[p];