Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
KiadtaAttila Veres Megváltozta több, mint 6 éve
1
Piros-fekete fák Beszúrás, ill. törléskor a fa elveszítheti az egyensúlyát. A piros-fekete fák: az egyensúly megtartását biztosítják. +1 bit információ (szín)a legrövidebb és leghosszabb út legfeljebb 2-szeres arányú lehet Piros-fekete tulajdonságok: 1. minden csúcs vagy fekete, vagy piros 2. minden levél fekete 3. minden piros csúcs mindkét utódja fekete 4. bármely két, azonos csúcsból a levélig futó útban ugyanannyi fekete csúcs van
2
26 17 41 14 21 30 47 10 16 19 23 28 38 7 12 15 20 35 39 3 Fekete magasság: fm(x) az x ből induló, de x-et nem tartalmazó, a levélig vezető utak hossza. (a 4. miatt egyértelmű) Lemma: Bármely, n csúcsot tartalmazó pirosfekete fa magassága legfeljebb 2*lg(n+1) Biz: 1. Lépés. Megmutatjuk, hogy a fa minden x gyökerű részfája legalább 2fm(x)-1 belső csúcsot tartalmaz. Ha x magassága 0, akkor levél (NIL), tehát valóban 20-1=0 belső csúcsa van. Tfh x magassága>0. A fiúk fm-a fm(x) vagy fm(x-1), attól függően, hogy a színük fekete-e. Az indukciós feltevés miatt mindkét részfa legalább 2fm(x)-1-1 belső csúcsot tartalmaz. Vagyis az x gyökerű részfa csúcsainak száma legalább (2fm(x)-1-1)+(2fm(x)-1-1)+1= 2fm(x)-1
3
Következmények 1. Minden elérő művelet (keres, minimum, maximum, stb.) megvalósítható O(lg(n)) időben algoritmikus változtatás nélkül. 2. A módosító műveleteket (beszúr, töröl) meg kell változtatni úgy, hogy a piros-fekete tulajdonságot megőrizzék… Beszúrás: az új csúcsot kezdetben pirosra színezzük Tehát: 1 és 2 tulajdonság nem sérülhet. A 4 nem sérülhet, mert mindkét fia fekete NIL. Tehát csak a 3-t kellhet korrigálni. Futási idő: O(lg n)
4
beszúr (x) BinárisFa:beszúr(x) x. szín=piros while x
beszúr (x) BinárisFa:beszúr(x) x.szín=piros while x.szülő<>NIL and x.szülő.szín=piros do if x.szülő=x.szülő.szülő.bal then y=x.szülő.szülő.jobb if y<>NIL and y.szín=piros then x.szülő.szín=fekete, y.szín=fekete x.szülő.szülő.szín=piros x=x.szülő.szülő elseif x=x.szülő.jobb then x=x.szülő x.szülő.bal=balraForgat(x) x.szülő.szín=fekete x.szülő.szülő.szín=piros jobbraForgat(x.szülő.szülő) else …bal és jobb felcserélésével… Az új csúcs és a szülő színe is pirossérül a 3. Tul. Ha a szülő a nagyszülő bal gyereke 1. Ha a jobb nagybácsi piros… A nagyszülőre lépünk, a hiba ide terjed(het) tovább… Ha a jobb nagybácsi fekete Ezután a hiba már ki van javítva, nem terjed feljebb kilép a ciklusból Forgatás nem függvényszerű
5
Átszínezés, lépés a nagyszülőre…
11 2 14 15 7 Átszínezés, lépés a nagyszülőre… 1 5 8 3 11 2 14 15 7 1 5 8 3 Forgatás balra… 11 7 14 15 2 8 5 1 Átszínezés és forgatás jobbra… 3 7 2 11 14 15 5 8 3 1
6
Törlés Ha a ténylegesen kivágandó csúcs fekete, akkor minden ősére sérül a 4. Tulajdonság A törölJavít eljárást csak ilyen esetben hívjuk meg A kivágandó csúcs fiának „extra fekete” értéket adunk, ami az 1. Tult sérti, és ezt görgetjük lefelé a fában. Minden lépés megőrzi az összes többi tulajdonságot.
7
törölJavít(fia) while fia. őse<>NIL and fia
törölJavít(fia) while fia.őse<>NIL and fia.szín=fekete if fia=fia.szülő.bal then testvér=fia.szülő.jobb if testvér.szín=piros then testvér.szín=fekete fia.szülő.szín=piros balraForgat(fia.szülő) testvér=fia.szülő.jobb if testvér.jobb.szín=testvér.bal.szín.fekete then testvér.szín=piros fia=fia.szülő else if testvér.jobb.szín=fekete then testvér.bal.szín=fekete testvér.szín=piros jobbraForgat(testvér) testvér=fia.szülő.jobb testvér.szín=fia.szülő.szín fia.szülő.szín=fekete testvér.jobb.szín=fekete balraForgat(fia.szülő) fia=gyökér 1.eset. Balra forgatás 2.eset. Csak átszínezés 3.eset. Csak átszínezés 4.eset. Balra forgatás Leállási feltétel
8
Forgatás jobbra D körül
Forgatás balra B körül D D A B C E E A C a b e z g d e z a b g d B B D Átszínezés, lépés D A A C E C E a b a b g d e z Forgatás jobbra D körül g d e z B B D A A C C E D E g a b a b g d e z d Forgatás balra B körül B D e z D A B C E E A C a b e z g d e z a b g d
9
B-fák Kiegyensúlyozott keresőfák, a mágneslemezen történő gyors kereséshez Igen nagy elágazási tényező ( ). (a lemez blokkméretéhez igazítva) M D H Q T X BC EG JKL NP RS VW YZ
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.