Fibonacci-kasa

Fibonacci-kasa ( eng.  Fibonacci-kasa ) on tietorakenne , joka on joukko puita , jotka on järjestetty ei-laskevan pyramidin ominaisuuden mukaisesti. Michael Fredman ja Robert Tarjan esittelivät Fibonacci-kasat vuonna 1984 .

Rakenne on " Priority Queue " -abstraktin tietotyypin toteutus , ja se on huomionarvoinen siinä mielessä, että toimintojen, jotka eivät vaadi poistamista, kuoletettu ajoaika on ( binäärikeon ja binomiaalisen keon jaksotettu ajoaika on ). Tavallisten operaatioiden , , lisäksi Fibonacci-keon avulla voit suorittaa kahden kasan yhdistämisen ajassa. INSERTMINDECREASE-KEYUNION

Rakenne

Toiminnot

Uuden Fibonacci-keon luominen

Make_Fib_Heap-proseduuri palauttaa fibonacci-keon objektin ja = NULL. Ei ole puita .

Toimenpiteen jaksotettu hankintameno on yhtä suuri kuin sen todellinen hankintameno .

Solmun lisääminen

Fib_Heap_Insert 1 ← 0 2 ← NULL 3 ← NULL 4 ← 5 ← 6 ← EPÄTOSI 7 Liitä juuriluettelo, joka sisältää , juuriluetteloon 8 jos = NULL tai 9 sitten ← 10 ← + 1

Toimenpiteen jaksotettu hankintameno on yhtä suuri kuin sen todellinen hankintameno .

Minimisolmun etsiminen

Fib_Heap_Minimum-proseduuri palauttaa .

Toimenpiteen jaksotettu hankintameno on yhtä suuri kuin sen todellinen hankintameno .

Kahden Fibonacci-kasan liitto

Fib_Heap_Union 1 ← Make_Fib_Heap() 2 ← 3 juuriluettelon lisääminen juuriluetteloon 4 jos ( = NULL) tai ( ≠ NULL ja < ) 5 sitten ← 6 ← 7 Vapauta objektit ja 8 palaa

Toimenpiteen jaksotettu hankintameno on yhtä suuri kuin sen todellinen hankintameno .

Vähimmäissolmun purkaminen

Fib_Heap_Extract_Min 1 ← 2 jos ≠ NULL 3 ja sitten jokaiselle solmun 4 alapuolelle tee Lisää juuriluetteloon 5 ← NULL 6 Poista juuriluettelosta 7 if = 8 sitten ← NULL 9 muuta ← 10 Yhdistä 11 ← 12 palautusta

Yhdessä minimisolmun purkamisen vaiheista suoritetaan juuriluettelon tiivistäminen ( eng.  consolidating ) . Voit tehdä tämän käyttämällä Consolidate Helper -menettelyä. Tämä menettely käyttää aputaulukkoa . Jos , niin on tällä hetkellä juuri ja aste .

Yhdistä 1 arvolle ← 0 - 2 do ← NULL 3 jokaiselle juuriluettelon solmulle 4 tee ← 5 ← 6 , kun taas ≠ NULL 7 tee ← //Solmu samalla asteella kuin 8 , jos 9 sitten vaihda ↔ 10 Fib_Heap_Link 11 ← NULL 12 ← 13 ← 14 ← NULL 15 ← 0 - 16 tee , jos ≠ NULL 17 sitten Lisää juuriluetteloon 18 if = NULL tai 19 sitten ← Fib_Heap_Link 1 Poista juuriluettelosta 2 Tee lapsisolmu , lisäys 3 ← FALSE

Minimisolmun purkamisen jaksotettu hankintameno on .

Pienennysnäppäin

Fib_Heap_Decrease_Key 1 , jos 2 , niin virhe "Uusi avain on suurempi kuin nykyinen" 3 ← 4 ← 5 jos ≠ NULL ja 6 sitten Leikkaa 7 Cascading_Cut 8 jos 9 niin ← Leikkaa 1 Poista lapsisolmujen luettelosta , pienennä 2 Lisää juuriluetteloon 3 ← NULL 4 ← EPÄTOSI Cascading_Cut 1 ← 2 , jos ≠ NULL 3 sitten jos = EPÄTOSI 4 sitten ← TRUE 5 else Cut 6 Cascading_Cut

Avainvähennyksen jaksotettu hankintameno ei ylitä .

Solmun poistaminen

Fib_Heap_Delete 1 Fib_Heap_Decrease_Key ∞ 2 Fib_Heap_Extract_Min

Toimenpiteen jaksotettu ajoaika on .

Katso myös

Linkit

Kirjallisuus