logo

Brodala-Okasaki uyumi

Yuklangan vaqt:

12.08.2023

Ko'chirishlar soni:

0

Hajmi:

99 KB
Mavzu: “Brodala-Okasaki uyumi”.
MUNDARIJA
Kirish ......................................................................................................... 2
 I Bob. Ustuvor mavbat va uyum haqida umumiy tushunchalar ............... 3
II Bob. Brodala-okasaki uyumi haqida boshlang'ich tushunchalar ........... 6
2.1. Asimptotik optimallik. ........................................................................ 9
2.2. Uyma tartiblash. ............................................................................... 10
2.3. Uyumni saralash algoritmi ............................................................... 14
Xulosa ...................................................................................................... 19
ADABIYOTLAR RO’YXATI ................................................................ 19
ILOVALAR ............................................................................................. 20
ILOVA 1. Modul N1 boshlang’ich kodi ................................................. 20 Kirish
Ustivor navbatlar ko'pincha uyum (kucha) bilan amalga oshirilsa-da, ular 
konseptual jihatdan uyumlardan farq qiladi. Ustivor navbat - bu  "ro'yxat" yoki 
"karta" ga o'xshash narsa; Ro'yxat bog langan ro'yxat yoki massiv yordamida ʻ
amalga oshirilishi mumkin bo'lganidek, ustivor navbat uyum yoki 
tartiblanmagan massiv kabi boshqa usullar yordamida amalga oshirilishi 
mumkin. Ustivor navbat - bu yozuvlar bir-biri bilan chiziqli taqqoslanadigan 
kalitlarga (masalan, raqamlar) ega bo'lgan va ikkita amalni realizatsiya 
qiladigan axborot tizimidir. Bu ikki amal tizimga tasodifiy yozuvni kiritish va 
yozuv tizimidan eng kichigi bilan tanlov kalit. Dasturiy ta'minot tizimlarida 
ustivor navbatlar juda keng tarqalgan va dasturlarn             I Bob .  Ustuvor mavbat   va uyum haqida umumiy tushunchalar
          Ko'pgina ilovalar kalitlarga ega bo'lgan elementlarni qayta           
ishlashni  talab qiladi, lekin ular to'liq tartibda va birdaniga                                  
hamasi emas.  Ko'pincha, biz bir qator narsalarni to'playmiz,  so'ngra eng katta 
kalit bilan ishlov beramiz, keyin ko'proq narsalarni to'playmiz, so'ngra hozirgi 
eng katta kalit bilan ishlov beramiz va hokazo. Bunday muhitda tegishli 
ma'lumotlar turi ikkita amalni qo'llab-quvvatlaydi: maksimal miqdorni o chirishʻ
va joylashtirish. Bunday ma'lumotlar turi ustivor navbat deb nomlanadi. Ustivor
navbatlar odatdagi navbat yoki stek ma'lumotlar tuzilmasiga o'xshash abstrakt 
ma'lumotlar turi bo'lib, unda har bir element qo'shimcha ravishda bog liq 	
ʻ
bo'lgan "ustivorlikka" ega. Ustivor navbatda yuqori ustivor element past ustivor
elementdan oldin xizmat qiladi.  3
Ustivor navbatlar ko'pincha uyum (kucha) bilan amalga oshirilsa-da, ular 
konseptual jihatdan uyumlardan farq qiladi. Ustivor navbat - bu  "ro'yxat" yoki 
"karta" ga o'xshash narsa; Ro'yxat bog langan ro'yxat yoki massiv yordamida 	
ʻ
amalga oshirilishi mumkin bo'lganidek, ustivor navbat uyum yoki 
tartiblanmagan massiv kabi boshqa usullar yordamida amalga oshirilishi 
mumkin. Ustivor navbat - bu yozuvlar bir-biri bilan chiziqli taqqoslanadigan 
kalitlarga (masalan, raqamlar) ega bo'lgan va ikkita amalni realizatsiya 
qiladigan axborot tizimidir. Bu ikki amal tizimga tasodifiy yozuvni kiritish va 
yozuv tizimidan eng kichigi bilan tanlov kalit. Dasturiy ta'minot tizimlarida 
ustivor navbatlar juda keng tarqalgan va dasturlarning ishlashi to'g ridan-to'g ri 	
ʻ ʻ
ularni amalga oshirish  samaradorligiga bog liq.	
ʻ
  Ustivorda navbatda qo llab-quvvatlanadigan amallar quyidagilar 	
ʻ
hisoblanadi:
1) Insert - navbatga element qo'shish
2) Max - ustivorligi yuqori bo'lgan elementni qaytaradi
3) ExtractMax - navbatdagi eng ustivor elementni olib tashlaydi
4) IncreaseKey - berilgan elementning ustivor qiymatini o'zgartiradi
5) Merge - ikkita navbatni bittaga birlashtiradi
1.1   Binar uyum (kucha) - piramida (binary heap).
Binar   uyum   (binary   heap)   bu   quyidagi   shartlarni
qanoatlantiradigan binar daraxtdir:
-   Har   qanday   uchning   ustivorligi,   uning   avlodlarining
ustivorligidan kichik emas. -   Daraxt   to'liq   ikkilik   daraxt   bo lishi   uchun   (complete   binaryʻ
tree)   -barcha   darajalar   chapdan   o'ngga   to'ldiriladi   (oxirgisi   bundan   mustasno
bo lishi mumkin).	
ʻ 4
                                                                               
4
                                                                                            MAX
                                                                        
                        
1-rasm.    O’smaydigan piramida
max-heap
Har qanday uchning ustuvorligi avlodlarning ustuvorligidan kichik emas 4
                                     MIN 100
10 36
25 1
17
13 1                                                                                 
                                                                                                                        
         
   2-rasm.       Kamaymaydigan piramida
                 min-heap Har qanday uchning ustuvorligi avlodlarning ustuvorligidan 
katta      e mas 2 3
3
6 71
7 1
9
25
100 II Bob.   Brodala-okasaki uyumi haqida boshlang'ich tushunchalar
                                                            
Brodal va Okasakining  Priority Queue kaskadli havolalarsiz binomial 
to'plamdan foydalanishga , minimal elementni qo'shishga va ma'lumotlarning 
strukturaviy yuklash g'oyasiga asoslangan . Birinchisi sizga imkon beradii n s e 
r torqasidaO ( 1 ), ikkinchisi uchun minimal elementni olish imkonini beradiO (
1 ), va uchinchi - amalga oshirish imkonini beradim e r g e orqasidaO ( 1 ). 
Minimal ishlarni olib tashlashO ( logN)eng yomoni. Bu taxminlar barcha 
taqqoslashga asoslangan ustuvor navbatlar orasida asimptotik optimal 
hisoblanadi.
Tuzilishi
Biz Tarjan va Buxbaum Data-structural bootstrapping deb atagan g'oyadan
foydalanamiz.
Ta'rif:
Ma'lumotlarning strukturaviy yuklash - vaqtni qisqartirish g'oyasim e r g 
eoldinO ( 1 )navbatda boshqa navbatni saqlashga ruxsat berish orqali.
Keling, bir juft minimal elementni saqlaydigan Bootstrapping Priority 
Queues strukturasini yarataylikTm i nva ustuvor navbat. Prioritet navbatning 
elementlari bootstrapping Priority Queues tomonidan buyurtma qilinadiTm i n:
BPQ = <int, PQ(BPQ)> 
Bitta elementdan iborat to'plam quyidagicha yaratiladi:
BPQ singleton'(x:int):
     return <x, null>
Ushbu tuzilma cheksiz bo'lmaydi, chunki har safar ustuvor navbat bitta 
kamroq elementni saqlaydi va shu bilan ierarxik tuzilmani hosil qiladi. Har bir 
qiymat qiymatlardan birida saqlanadiTm i n. Operatsiyalar
Birlashtirish
Birlashtirish kamida ikkita qiymatni tanlash orqali amalga oshiriladiTm i 
n. Ushbu element to'pning yuqori qismiga aylanadi. Bu, agar kerak bo'lsa, uni 
istalgan vaqtda doimiy vaqtda ko'rsatishga imkon beradi. Operatsiya yordamida
yig'ma tuzilmaga yana bir kattaroq element kiritiladii n s e r t.       
                                            BPQ merge(<x:int, q:PQ>, <y:int, r:PQ>):
     if x < y
         return <x, insert(q, <y, r>)>
     else
         return <y, insert(r, <x, q>)>
Bu yergai n s e r tu ustuvor navbatga qo'shilmoqda. Agar u ishlayotgan 
bo'lsaO ( 1 ), Bum e r g euchun ishlaydiO ( 1 ).
Kiritmoq
Bu yangi yaratishB PQVam e r g eu asosiy daraxt bilan.
BPQ insert(<x:int, q:PQ>, y:int):
     return merge(<x, q>, singleton(y))
Aslida, operatsiyai n s e r t- xuddi shum e r g e: uchun nol darajali daraxt 
yaratilganO ( 1 ), va keyin u asosiy bilan ham birlashadiO ( 1 ).
getMin
Buni qilish oson, chunkiB PQminimal darajada ushlab turadi.
int getMin(<x:int, q:PQ>):
     return x
uchun ishlaydiO ( 1 ).
ekstraktiMin
Minimal element yuqorida saqlanadiB PQ, shuning uchun uni qidirishning 
hojati yo'q. dan iborat ustuvor navbatdan minimalni chiqarish talab qilinadiB 
PQ.                                                                           
<int, BPQ> extractMin(<x:int, q:PQ>):
     <<y, r>, t> = extractMin(q)
     return <x, <y, merge(r, t)>>
Bu yergae x t r a c t M i nturning minimal elementini chiqaradigan 
funksiyaB PQustuvor navbatdan, u qaytadi y _, r  _turning minimal elementi ⟨ ⟩
hisoblanadiB PQva minimal -ni ajratib olgandan keyin ustuvor navbatning 
qolgan qismit. Mos ravishda,m e r g eikki ustuvor navbatni birlashtiruvchi 
funksiyadir.
Biz minimumni qaytaramiz vaB PQ, Qayerdaxyangi minimal element 
hisoblanadi vam e r g e (r,t)- elementlarsiz ustuvor navbatxVay.
Chunki e x t r a c t M i nVam e r g euchun bajarilganO ( logN), Bue x t r a 
c t M i nuchun bajarilgan O ( logN).
Brodal-Okasaki uyumi- bu to'p xususiyatini qondiradigan daraxt tuzilishi. 
Bu asimpotik optimal, qo'llab-quvvatlaydi
Yangi qiymat kiritilmoqda
Minimal qiymatni topish
Boshqa navbat bilan birlashish
Navbatdagi elementni kamaytirish
O (1) bo'yicha eng yomon bajarilish vaqti va qo'llab-quvvatlovchi
Minimal qiymatni o'chirish
O (logn) vaqtida.
Uyum birinchi bo'lib shu yerdan kirish mumkin bo'lgan qog'ozda 
tasvirlangan . Ushbu dastur asl tavsifga iloji boricha yaqinroq amal qiladi, lekin 
kodda tushuntirilgan bir nechta farqlar/noaniq fikrlar mavjud.
Old shartlar     
Keyinchalik harakat qilishni xohlaydigan kishi tanishishi kerak
Umuman uyumlar va
Binomial uyum (menda ushbu omborda Go dan foydalangan holda dastur 
bor .) Siz ushbu omborda mavjud bo'lgan narsalarni tushunishga harakat 
qilishingiz mumkin, ammo menimcha, bu tushunchalar bilan tanishish sizga 
vaqtni osonroq o'tkazishga yordam beradi.
Brodal-Okasaki uyasi
Ushbu ma'lumotlar strukturasi binomial to'pning qattiq o'zgartirilgan 
versiyasidir;
Insert() ni O(1) da bajarishi uchun boshqa pastki daraxt bog'lash 
mexanizmi kiritilgan.
Oddiy binomial to'pda O(logn) ni oladi.
Bu variant "Skew-binomial Heap" deb ataladi.
Minimal elementni ushlab turadigan ildiz tugunini qo'shish.
Merge() ni O(1) da bajarishi uchun ma lumotlar strukturasi o zini o zida ʼ ʻ ʻ
saqlashga ruxsat berilgan.
Skew-binomial va oddiy binomial uyumlarda O(logn) ni oladi.
Ushbu uchta modifikatsiya bizga asimptotik jihatdan optimal ma'lumotlar 
strukturasini beradi, ya'ni biz boshqa operatsiyalar uchun chegarani 
oshirmasdan eng yomon holatlar chegaralarini yaxshilay olmaymiz.
2.1.     Asimptotik optimallik    .  
Asimptotik optimallik
Skew-Binomial to'plari binomial to'plamlar ustida bajarilgan ishni 
haqiqatan ham kamaytiradi, ammo Brodal-Okasaki to'plari Pop() ostida haqiqiy 
ishlarning ko'pini bajarish orqali bir xil asimptotik yaxshilanishga erishadi.
Peek() (“findMin” operatsiyasi) O(1) vaqtni oladi, chunki biz Pop() 
operatsiyasining ish vaqti ichida keyingi minimal elementni aniqlaymiz. 
Minimal elementni aniqlash O(logn) vaqtini oladi.
Merge() O(1) vaqtni oladi, chunki bu operatsiya oddiygina boshqa 
navbatni gilam ostiga qo'yadi va faqat boshqa navbatning ildiz tugunini kiritadi.
Haqiqiy birlashma operatsiyasi Pop() ning ish vaqti ichida, biz "gilam ostida" 
tugunlari bo'lgan tugunni ochganimizda amalga oshiriladi.
Haqiqiy Pop() operatsiyasi (binomial to'pdagi kabi) allaqachon O(logn) 
vaqtini oladi.
3 logn yoki 50 logn amalni bajarishimiz muhim emasligi sababli , "O" 
belgisi ostida ularning barchasi O(logn) dir. Ushbu kichik buzg'unchilik orqali  biz asimptotik optimallikka erishamiz, bunda Pop() dan boshqa hamma narsa 
O(1) ostida amalga oshiriladi.
Ko'rib turganingizdek, biz bu erda bajarilgan ish hajmini kamaytirmaymiz,
shunchaki ularni bir xil soyabon ostiga surib qo'yamiz, shunda jadval chiroyli 
va chiroyli ko'rinadi. Shu sababli, men mualliflarning ushbu ma'lumotlar 
tuzilmasi amaliy qiziqish uyg'otmasligini ta'kidlaganiga qo'shilaman, ammo 
bunday asimptotik ishlash mumkinligiga nazariy misol bo'lib xizmat qiladi.
Funktsional va imperativ
Qog'ozda Brodal-Okasaki uyasi funktsional amalga oshirilgan. Bu erda 
men amalga oshirishni imperativ tilda (Go) qildim, shuning uchun ba'zi 
tushunchalar to'g'ridan-to'g'ri tarjima qilinmasligi mumkin.
Boshqotirmalar
Ushbu ma'lumotlar strukturasini tushunganingizdan so'ng, siz u bilan 
o'ynashingiz mumkin
Ishlash uchun optimallashtirish. Ushbu dastur dahshatli darajada samarasiz
va optimallashtirish mumkin bo'lgan ko'plab fikrlar mavjud.
Koddagi sharhlar sifatida ba'zi savollarni qoldirdim. Ular bilan kurashishga
harakat qiling, ular juda murakkab emas.
2.2. Uyma tartiblash .
Uyma tartiblash nima
Uyma tartiblash - bu ikkilik uyum ma'lumotlar tuzilishiga asoslangan 
taqqoslashga asoslangan tartiblash usuli . Bu birinchi navbatda minimal 
elementni topadigan va minimal elementni boshiga joylashtirgan tanlash 
tartibiga o'xshaydi . Qolgan elementlar uchun xuddi shu jarayonni takrorlang.
Uyma tartiblash - bu o'z joyida algoritm. 
Uning odatiy amalga oshirilishi barqaror emas, lekin barqaror bo'lishi 
mumkin (Qarang
bu
)
Odatda yaxshi bajarilganidan 2-3 marta sekinroq
Tezkor saralash
. Sekinlik sababi - mos yozuvlar joyining yo'qligi. Heapsortning afzalliklari:
Samaradorlik -  Uyma tartibini bajarish uchun zarur bo'lgan vaqt 
logarifmik ravishda oshadi, boshqa algoritmlar esa saralanadigan elementlar 
soni ortishi bilan eksponent ravishda sekinlashishi mumkin. Ushbu tartiblash 
algoritmi juda samarali.
Xotiradan foydalanish - Xotiradan foydalanish minimal, chunki 
saralanadigan elementlarning dastlabki ro'yxatini saqlash uchun zarur bo'lgan 
narsalardan tashqari, ishlash uchun qo'shimcha xotira maydoni kerak emas.
Oddiylik -  Boshqa teng darajada samarali tartiblash algoritmlariga 
qaraganda tushunish osonroq, chunki u rekursiya kabi ilg'or informatika 
tushunchalaridan foydalanmaydi.
Uyma tartiblashning kamchiliklari:
Qimmatli : yig'ish tartibi qimmat.
Beqaror : Uyma tartiblash beqaror. Bu nisbiy tartibni o'zgartirishi mumkin.
Samarali: Uyma tartiblash juda murakkab ma'lumotlar bilan ishlashda 
unchalik samarali emas. 
HeapSort ilovalari:
Heapsort asosan gibrid algoritmlarda qo'llaniladi
IntroSort
Deyarli tartiblangan (yoki K tartiblangan) massivni saralash 
massivdagi k eng katta (yoki eng kichik) elementlar
  Uyumli tartiblash algoritmi cheklangan foydalanishga ega, chunki 
Quicksort va Mergesort amalda yaxshiroq. Shunga qaramay, Heap ma'lumotlar 
strukturasining o'zi juda ko'p ishlatiladi. 
Heapify - massiv yordamida ifodalangan ikkilik daraxtdan yig'ma 
ma'lumotlar strukturasini yaratish jarayoni. U Min-Heap yoki Max-heap 
yaratish uchun ishlatiladi. Indeksi n/2 – 1 bilan berilgan bargsiz tugunning 
oxirgi indeksidan boshlang. Heapify rekursiyadan foydalanadi.
Heapify uchun algoritm:
heapify(massiv)
  Root = massiv[0]
    Eng katta = eng katta( massiv[0] , massiv [2 * 0 + 1]/ massiv [2 * 0 + 2])
if(Root != Eng katta)   Swap(Root, Largest)
Heapify qanday ishlaydi?  
Massiv = {1, 3, 5, 4, 6, 13, 10, 9, 8, 15, 17}
Tegishli to liq ikkilik daraxt:ʻ
                  1
               / \
            3 5
         / \ / \
       4 6 13 10
      / \ / \
    9 8 15 17
Yuqoridagi massivdan Max-Heap qurish vazifasi .
Jami tugunlar = 11.
Jami bargsiz tugunlar= (11/2)-1=5
oxirgi bargsiz tugun = 6.
Shuning uchun, oxirgi barg bo'lmagan tugun indeksi = 4.
Uyumni qurish uchun faqat tugunlarni to'plang: [1, 3, 5, 4, 6] teskari 
tartibda.
Heapify 6 : 6 va 17-ni almashtiring.
             1
            / \
           3 5
         / \ / \
      4 17 13 10
     / \ / \
   9 8 15 6
Heapify 4 : 4 va 9-ni almashtiring.                   1
               / \
            3 5
         / \ / \
      9 17 13 10
     / \ / \
   4 8 15 6
Heapify 5 : 13 va 5 ni almashtiring.
                  1
               / \
            3 13
         / \ / \
      9 17 5 10
     / \ / \
  4 8 15 6
Heapify 3 : Avval 3 va 17 ni almashtiring, yana 3 va 15 ni almashtiring.
                  1
              / \
         17 13
        / \ / \
     9 15 5 10
    / \ / \
  4 8 3 6
Heapify 1 : Avval 1 va 17 ni almashtiring, yana 1 va 15 ni almashtiring, 
nihoyat 1 va 6 ni almashtiring.                   17
               / \
           15 13
          / \ / \
        9 6 5 10
       / \ / \
     4 8 3 1
2.3.  Uyumni saralash algoritmi
Uyumni saralash algoritmi
Muammoni hal qilish uchun quyidagi fikrga amal qiling:
  Avval massivni heapify-dan foydalanib yig'ma ma'lumotlar strukturasiga 
aylantiring, so'ngra Max-heapning ildiz tugunini birin-ketin o'chiring va uni 
uyumdagi oxirgi tugun bilan almashtiring va keyin uyumning ildizini yig'ing. 
Uyumning o'lchami 1 dan katta bo'lguncha bu jarayonni takrorlang
Muammoni hal qilish uchun quyidagi amallarni bajaring:
Kirish ma'lumotlaridan maksimal to'p hosil qiling. 
Bu vaqtda maksimal element to'pning ildizida saqlanadi. Uni to'plamning 
oxirgi elementi bilan almashtiring, so'ngra to'plam hajmini 1 ga kamaytiring. 
Nihoyat, daraxt ildizini to'plang. 
Uyumning o'lchami 1 dan katta bo'lganda 2-bosqichni takrorlang.
Eslatma: Tugunga to'g'rilash jarayoni faqat uning asosiy tugunlari yig'ilgan
bo'lsa, qo'llanilishi mumkin. Shunday qilib, yig'ish pastdan yuqoriga qarab 
amalga oshirilishi kerak.
Uyma tartiblashning batafsil ishlashi
Uyma tartiblashni aniqroq tushunish uchun keling, tartiblanmagan 
massivni olaylik va uni yig'ma tartiblash yordamida saralashga harakat qilaylik.
Massivni ko'rib chiqing: arr[] = {4, 10, 3, 5, 1}.
To'liq ikkilik daraxtni yaratish: massivdan to'liq ikkilik daraxtni yarating.
Massivdan to'liq ikkilik daraxtni yarating
Massivdan to'liq ikkilik daraxtni yarating Maksimal to'pga aylantirish: Shundan so'ng, vazifa o'sha tartiblanmagan 
massivdan daraxt qurish va uni maksimal to'pga aylantirishga harakat qilishdir.
Uyumni maksimal yig'maga aylantirish uchun asosiy tugun har doim 
kichik tugunlardan katta yoki teng bo'lishi kerak
Bu erda, ushbu misolda, 4- ota tugun 10-chi tugundan kichikroq bo'lgani 
uchun, ularni maksimal yig'ish uchun almashtiring.
Uni maksimal yig'ma tasvir vidjetiga aylantiring
Endi, ko'rinib turganidek, ota-ona sifatida 4 bola 5 dan kichikroq , shuning 
uchun ikkalasini ham almashtiring va natijada hosil bo'lgan to'p va massiv 
quyidagicha bo'lishi kerak:
Daraxtni maksimal to'pga aylantiring
Daraxtni maksimal to'pga aylantiring
Uyumni saralashni amalga oshiring: Har bir qadamda maksimal elementni 
olib tashlang (ya'ni, uni oxirgi holatga o'tkazing va uni olib tashlang) va keyin 
qolgan elementlarni ko'rib chiqing va uni maksimal to'pga aylantiring.
Ildiz elementni (10) maksimal to'pdan o'chiring. Ushbu tugunni o'chirish 
uchun uni oxirgi tugun bilan almashtirishga harakat qiling, ya'ni (1). Ildiz 
elementni olib tashlaganingizdan so'ng, uni maksimal to'plamga aylantirish 
uchun yana yig'ing.
Natijadagi to'p va massiv quyidagicha ko'rinishi kerak:
10 ni olib tashlang va heapify qiling
10 ni olib tashlang va heapify qiling
Yuqoridagi amallarni takrorlang va u quyidagicha ko'rinadi:
5 ni olib tashlang va heapify qiling
5 ni olib tashlang va heapify qiling
Endi ildizni (ya'ni 3) yana olib tashlang va heapify-ni bajaring.
4 ni olib tashlang va heapify qiling
4 ni olib tashlang va heapify qiling
Endi ildiz yana bir marta olib tashlanganda, u tartiblanadi. va tartiblangan 
massiv arr[] = {1, 3, 4, 5, 10} kabi bo'ladi .
Saralangan massiv
Saralangan massi Uyma tartibini amalga oshirish
Quyida yuqoridagi yondashuvni amalga oshirish ko'rsatilgan:
// Heap Sort in C  
#include <stdio.h>
   // Function to swap the position of two elements  
void swap(int* a, int* b)
{      int temp = *a;  
     *a = *b;
  
     *b = temp;
}
   // To heapify a subtree rooted with node i
// which is an index in arr[].
// n is size of heap
void heapify(int arr[], int N, int i)
{
     // Find largest among root, left child and right child  
     // Initialize largest as root
     int largest = i;
       // left = 2*i + 1
     int left = 2 * i + 1;
       // right = 2*i + 2
     int right = 2 * i + 2;  
     // If left child is larger than root
     if (left < N && arr[left] > arr[largest])  
         largest = left;  
     // If right child is larger than largest
     // so far      if (right < N && arr[right] > arr[largest])
           largest = right;  
     // Swap and continue heapifying if root is not largest
     // If largest is not root
     if (largest != i) {
          swap(&arr[i], &arr[largest]);  
         // Recursively heapify the affected
         // sub-tree
         heapify(arr, N, largest);    }}  
// Main function to do heap sort
void heapSort(int arr[], int N)
{      // Build max heap
     for (int i = N / 2 - 1; i >= 0; i--)  
         heapify(arr, N, i);  
     // Heap sort
     for (int i = N - 1; i >= 0; i--)   
         swap(&arr[0], &arr[i]);
           // Heapify root element to get highest element at
         // root again
         heapify(arr, i, 0);
     }
}  
// A utility function to print array of size n
void printArray(int arr[], int N)
{
     for (int i = 0; i < N; i++)
         printf("%d ", arr[i]);
     printf("\n"); }
  
// Driver's code
int main()
{
     int arr[] = { 12, 11, 13, 5, 6, 7 };
     int N = sizeof(arr) / sizeof(arr[0]);  
     // Function call
     heapSort(arr, N);
     printf("Sorted array is\n");
     printArray(arr, N);
  
// This code is contributed by _i_plus_plus_.
Chiqish
Saralangan massiv
5 6 7 11 12 13
Vaqt murakkabligi: O(N log N)
Yordamchi fazo: O(1)
Uyma tartiblash bilan bog'liq ba'zi tez-tez so'raladigan savollar
Uyma tartiblashning ikki bosqichi qanday?
Uyumni saralash algoritmi ikki bosqichdan iborat. Birinchi bosqichda 
massiv maksimal to'pga aylantiriladi. Va ikkinchi bosqichda eng yuqori element
(ya'ni, daraxt ildizidagi) olib tashlanadi va qolgan elementlar yangi max to'pni 
yaratish uchun ishlatiladi.
Nima uchun Uyma tartiblash barqaror emas?
Uyma tartiblash algoritmi barqaror algoritm emas. Bu algoritm barqaror 
emas, chunki uyada bajariladigan amallar ekvivalent kalitlarning nisbiy tartibini
o'zgartirishi mumkin.
Heap Sort "Bo'l va zabt et" algoritmiga misolmi? Uyma tartiblash umuman Bo'l va bosib ol algoritmi EMAS . U 
elementlarni saralash uchun “bo‘l va zabt et” yondashuvidan emas, balki uning 
elementini samarali saralash uchun yig‘ma ma’lumotlar strukturasidan 
foydalanadi.
Qaysi tartiblash algoritmi yaxshiroq - yig'ish tartibi yoki birlashtirish 
tartibi?
Javob ularning vaqt murakkabligi va makonga bo'lgan talabni taqqoslashda
yotadi. Birlashtirish tartibi Uyma tartiblashdan biroz tezroq. Biroq, boshqa 
tomondan, birlashtirish tartibi qo'shimcha xotirani oladi. Talabga qarab, qaysi 
birini ishlatishni tanlash kerak.
Nima uchun Uyma tartiblash Tanlashdan yaxshiroq?
Uyumni saralash tanlov tartibiga o'xshaydi, lekin maksimal elementni 
olishning yaxshiroq usuli bilan. Doimiy vaqtda maksimal elementni olish uchun
u yig'ma ma'lumotlar strukturasidan foydalanadi
Xulosa
Brodala-okasaki algoritmi o'rtacha darajadagi algoeitmlar qatoriga qo'shish
mumkin bo'lgan algoritm hisoblanadi.
Kamchiliklari murakkablik tomondan vaqt masalasida natija kamroq , 
lekin xotira masalasida optimal ishlaydigan algoritmlar singari xotiradan tejash 
mumkin.
ADABIYOTLAR RO’YXATI
1.  https://neerc.ifmo.ru/wiki/index.php?title=Куча_Бродала-Окасаки; 2.  https://yandex.ru/search/?text=About+Brodala-
okasaki+heap.geeksforgeeks&lr=10334&clid=2384857-110&win=541;
3.  https://www.google.com/search?q=Brodala-
okasaki+heap.org&oq=Brodala-
okasaki+heap.org&aqs=chrome..69i57j33i10i160.12407j0j7&sourceid=chrom
e&ie=UTF-8;
4.  https://en.wikipedia.org/wiki/Brodal_queue;   
ILOVALAR
ILOVA 1. Modul N1 boshlang’ich kodi       
// Heap Sort in C  
#include <stdio.h>
   // Function to swap the position of two elements  
void swap(int* a, int* b)
{      int temp = *a;  
     *a = *b;
  
     *b = temp;
}
   // To heapify a subtree rooted with node i
// which is an index in arr[].
// n is size of heap
void heapify(int arr[], int N, int i)
{
     // Find largest among root, left child and right child  
     // Initialize largest as root
     int largest = i;
       // left = 2*i + 1
     int left = 2 * i + 1;        // right = 2*i + 2
     int right = 2 * i + 2;  
     // If left child is larger than root
     if (left < N && arr[left] > arr[largest])  
         largest = left;  
     // If right child is larger than largest
     if (right < N && arr[right] > arr[largest])
           largest = right;  
     // Swap and continue heapifying if root is not largest
     // If largest is not root
     if (largest != i) {
          swap(&arr[i], &arr[largest]);  
         // Recursively heapify the affected
         // sub-tree
         heapify(arr, N, largest);    }}  
// Main function to do heap sort
void heapSort(int arr[], int N)
{      // Build max heap
     for (int i = N / 2 - 1; i >= 0; i--)  
         heapify(arr, N, i);  
     // Heap sort
     for (int i = N - 1; i >= 0; i--)   
         swap(&arr[0], &arr[i]);
           // Heapify root element to get highest element at
         // root again
         heapify(arr, i, 0);
     }
}   // A utility function to print array of size n
void printArray(int arr[], int N)
{
     for (int i = 0; i < N; i++)
         printf("%d ", arr[i]);
     printf("\n");
}
  
// Driver's code
int main()
{
     int arr[] = { 12, 11, 13, 5, 6, 7 };
     int N = sizeof(arr) / sizeof(arr[0]);  
     // Function call
     heapSort(arr, N);
     printf("Sorted array is\n");
     printArray(arr, N);
  
// This code is contributed by _i_plus_plus_.
Chiqish
Saralangan massiv
5 6 7 11 12 13
Vaqt murakkabligi: O(N log N)
Yordamchi fazo: O(1)

Mavzu: “Brodala-Okasaki uyumi”. MUNDARIJA Kirish ......................................................................................................... 2 I Bob. Ustuvor mavbat va uyum haqida umumiy tushunchalar ............... 3 II Bob. Brodala-okasaki uyumi haqida boshlang'ich tushunchalar ........... 6 2.1. Asimptotik optimallik. ........................................................................ 9 2.2. Uyma tartiblash. ............................................................................... 10 2.3. Uyumni saralash algoritmi ............................................................... 14 Xulosa ...................................................................................................... 19 ADABIYOTLAR RO’YXATI ................................................................ 19 ILOVALAR ............................................................................................. 20 ILOVA 1. Modul N1 boshlang’ich kodi ................................................. 20

Kirish Ustivor navbatlar ko'pincha uyum (kucha) bilan amalga oshirilsa-da, ular konseptual jihatdan uyumlardan farq qiladi. Ustivor navbat - bu "ro'yxat" yoki "karta" ga o'xshash narsa; Ro'yxat bog langan ro'yxat yoki massiv yordamida ʻ amalga oshirilishi mumkin bo'lganidek, ustivor navbat uyum yoki tartiblanmagan massiv kabi boshqa usullar yordamida amalga oshirilishi mumkin. Ustivor navbat - bu yozuvlar bir-biri bilan chiziqli taqqoslanadigan kalitlarga (masalan, raqamlar) ega bo'lgan va ikkita amalni realizatsiya qiladigan axborot tizimidir. Bu ikki amal tizimga tasodifiy yozuvni kiritish va yozuv tizimidan eng kichigi bilan tanlov kalit. Dasturiy ta'minot tizimlarida ustivor navbatlar juda keng tarqalgan va dasturlarn

I Bob . Ustuvor mavbat va uyum haqida umumiy tushunchalar Ko'pgina ilovalar kalitlarga ega bo'lgan elementlarni qayta ishlashni talab qiladi, lekin ular to'liq tartibda va birdaniga hamasi emas. Ko'pincha, biz bir qator narsalarni to'playmiz, so'ngra eng katta kalit bilan ishlov beramiz, keyin ko'proq narsalarni to'playmiz, so'ngra hozirgi eng katta kalit bilan ishlov beramiz va hokazo. Bunday muhitda tegishli ma'lumotlar turi ikkita amalni qo'llab-quvvatlaydi: maksimal miqdorni o chirishʻ va joylashtirish. Bunday ma'lumotlar turi ustivor navbat deb nomlanadi. Ustivor navbatlar odatdagi navbat yoki stek ma'lumotlar tuzilmasiga o'xshash abstrakt ma'lumotlar turi bo'lib, unda har bir element qo'shimcha ravishda bog liq ʻ bo'lgan "ustivorlikka" ega. Ustivor navbatda yuqori ustivor element past ustivor elementdan oldin xizmat qiladi. 3 Ustivor navbatlar ko'pincha uyum (kucha) bilan amalga oshirilsa-da, ular konseptual jihatdan uyumlardan farq qiladi. Ustivor navbat - bu "ro'yxat" yoki "karta" ga o'xshash narsa; Ro'yxat bog langan ro'yxat yoki massiv yordamida ʻ amalga oshirilishi mumkin bo'lganidek, ustivor navbat uyum yoki tartiblanmagan massiv kabi boshqa usullar yordamida amalga oshirilishi mumkin. Ustivor navbat - bu yozuvlar bir-biri bilan chiziqli taqqoslanadigan kalitlarga (masalan, raqamlar) ega bo'lgan va ikkita amalni realizatsiya qiladigan axborot tizimidir. Bu ikki amal tizimga tasodifiy yozuvni kiritish va yozuv tizimidan eng kichigi bilan tanlov kalit. Dasturiy ta'minot tizimlarida ustivor navbatlar juda keng tarqalgan va dasturlarning ishlashi to'g ridan-to'g ri ʻ ʻ ularni amalga oshirish samaradorligiga bog liq. ʻ Ustivorda navbatda qo llab-quvvatlanadigan amallar quyidagilar ʻ hisoblanadi: 1) Insert - navbatga element qo'shish 2) Max - ustivorligi yuqori bo'lgan elementni qaytaradi 3) ExtractMax - navbatdagi eng ustivor elementni olib tashlaydi 4) IncreaseKey - berilgan elementning ustivor qiymatini o'zgartiradi 5) Merge - ikkita navbatni bittaga birlashtiradi 1.1 Binar uyum (kucha) - piramida (binary heap). Binar uyum (binary heap) bu quyidagi shartlarni qanoatlantiradigan binar daraxtdir: - Har qanday uchning ustivorligi, uning avlodlarining ustivorligidan kichik emas.

- Daraxt to'liq ikkilik daraxt bo lishi uchun (complete binaryʻ tree) -barcha darajalar chapdan o'ngga to'ldiriladi (oxirgisi bundan mustasno bo lishi mumkin). ʻ 4 4 MAX 1-rasm. O’smaydigan piramida max-heap Har qanday uchning ustuvorligi avlodlarning ustuvorligidan kichik emas 4 MIN 100 10 36 25 1 17 13 1

2-rasm. Kamaymaydigan piramida min-heap Har qanday uchning ustuvorligi avlodlarning ustuvorligidan katta e mas 2 3 3 6 71 7 1 9 25 100