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
- Fibonacci-kasa on kokoelma puita .
- Jokainen puu on keon ominaisuuden alainen ( eng. min-heap property ): kunkin solmun avain ei ole pienempi kuin sen pääsolmun avain.
- Jokainen solmu sisältää seuraavat osoittimet ja kentät:
- - kenttä, johon avain on tallennettu;
- — osoitin pääsolmuun;
- — osoitin yhteen lapsisolmuista;
- - osoitin vasempaan sisarsolmuun;
- - osoitin oikeaan sisarsolmuun;
- - kenttä, joka tallentaa lapsisolmujen lukumäärän;
- on boolen arvo, joka osoittaa, onko solmu menettänyt lapsisolmuja sen jälkeen, kun siitä tuli jonkin toisen solmun lapsisolmu.
- Lapsisolmut yhdistetään osoittimien avulla yhdeksi sykliseksi kaksoislinkitetyksi lapsisolmuluetteloksi ( eng. child list ) .
- Kaikkien puiden juuret on yhdistetty osoittimien avulla ja sykliseksi kaksoislinkitetyksi juuriluetteloksi ( eng. root list ).
- Koko Fibonacci-kasalle tallennetaan myös osoitin solmuun, jossa on vähimmäisavain , joka on yhden puun juuri. Tätä solmua kutsutaan minimisolmuksi .
- Nykyinen solmujen määrä sijainnissa on tallennettu kohtaan .
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
- Thomas H. Kormen et al. Algoritmit: rakentaminen ja analyysi. - 2. painos - M . : Williams Publishing House , 2007. - S. 1296. - ISBN 5-8459-0857-4 .
- Mehlhorn, Kurt, Sanders, Peter. 6.2.2 Fibonacci-kekot // Algoritmit ja tietorakenteet: Perustyökalut. - Springer, 2008. - 300 s. — ISBN 978-3-540-77978-0 .