Middle
Kas yra stekas (duomenų struktūrų kontekste)?
sobes.tech AI
Atsakymas iš AI
Aukštynas (heap) — tai specializuota medžio struktūra, naudojama kaip duomenų struktūra. Pagrindinė aukštyno savybė — dalinė tvarka: kiekvienam medžio mazgui taikomas sąlyga, kad tėvo reikšmė yra didesnė arba lygi bet kurios iš jo vaikų reikšmei (max-heap) arba mažesnė arba lygi (min-heap).
Pagrindinės savybės:
- Dvejetainis medis: Dažniausiai įgyvendinamas kaip dvejetainis medis, kur kiekvienas mazgas turi ne daugiau kaip du vaikus.
- Pilnas dvejetainis medis: Visuose lygiuose, išskyrus galbūt paskutinį, medis yra visiškai užpildytas. Paskutinio lygio mazgai užpildomi iš kairės į dešinę. Tai leidžia efektyviai saugoti aukštyną kaip masyvą.
- Aukštyno savybė:
- Max-heap: Kiekvieno mazgo reikšmė yra didesnė arba lygi jo vaikų reikšmėms. Didžiausias elementas visada yra viršuje.
- Min-heap: Kiekvieno mazgo reikšmė yra mažesnė arba lygi jo vaikų reikšmėms. Mažiausias elementas visada yra viršuje.
Pagrindinės operacijos su aukštynu:
- Elemento įterpimas: Pridedamas naujas elementas ir išlaikoma aukštyno savybė.
- Elemento šalinimas: Šalinamas šakninis elementas (maksimalus arba minimalus, priklausomai nuo aukštyno tipo) ir išlaikoma aukštyno savybė.
- Aukštyno kūrimas: Aukštyno sudarymas iš masyvo.
Aukštyno taikymas:
- Rikiavimas: Heapsort algoritmas.
- Prioritetinių eilių: Efektyvi įgyvendinimas, kai elementai apdorojami pagal prioritetą.
- Paieškos algoritmai: Pavyzdžiui, k-ojo pagal dydį elemento paieška.
- Grafų algoritmai: Pavyzdžiui, Dijkstros algoritmas.
Aukštyno vaizdavimas masyvu:
Kadangi aukštynas yra pilnas dvejetainis medis, jį galima efektyviai saugoti masyve be nuorodų.
- Jei mazgas yra indeksu
i, jo kairysis vaikas yra indeksu2*i + 1. - Jo dešinysis vaikas yra indeksu
2*i + 2. - Jo tėvas yra indeksu
(i - 1) / 2.
# Min-heap pavyzdys kaip masyvas
heap_array = [10, 15, 20, 17, 25, 30]
# Šaknys: heap_array[0] = 10
# Kairysis vaikas: heap_array[2*0 + 1] = heap_array[1] = 15
# Dešinysis vaikas: heap_array[2*0 + 2] = heap_array[2] = 20
# Tėvas elemento indeksu 3 (17): heap_array[(3-1)//2] = heap_array[1] = 15