Algorimuselméle Keresőfák, piros-fekee fák Kaona Gyula Y. Sámíásudományi és Információelmélei Tansék Budapesi Műsaki és Gadaságudományi Egyeem. előadás Kaona Gyula Y. (BME SZIT) Algorimuselméle. előadás / Keresőfák Tároljuk a U rendee halma elemei, hogy BESZÚR, TÖRÖL, KERES, MIN, (MAX, TÓLIG) haékonyak legyenek. Bináris fa bejárása eljes fa (új def.): a alsó sin is ele van l sinű, eljes fának l csúcsa van. Fa csúcsai elem(), bal(), jobb() eseleg apa() és resfa() + Ha a gyökér, y pedig a -es csúcs, akkor * 5 bal(jobb()) = y, apa(apa(y)) =, elem(bal()) =, resfa() =. Kaona Gyula Y. (BME SZIT) Algorimuselméle. előadás /
PREORDER, INORDER, POSTORDER pre() in() pos() begin begin begin láoga(); in(bal()); pos(bal()); pre(bal()); láoga(); pos(jobb()); pre(jobb()) in(jobb()) láoga() end end end + * 5 PREORDER: + 5 INORDER: 5 + POSTORDER: 5 + Lépéssám: O(n) Kaona Gyula Y. (BME SZIT) Algorimuselméle. előadás / Bináris keresőfa Definíció (Keresőfa-ulajdonság) Tesőleges csúcsra és a baloldali résfájában levő y csúcsra iga, hogy elem(y) elem(). Hasonlóan, ha egy csúcs a jobb résfájából, akkor elem() elem(). 0 Hái felada: Igaoljuk, hogy egy bináris keresőfa elemei a fa inorder bejárása nemcsökkenő sorrendben láogaja meg. Egy kényelmes megállapodás: a ovábbiakban felessük, hogy nincsenek ismélődő elemek a keresőfában. Kaona Gyula Y. (BME SZIT) Algorimuselméle. előadás /
Naiv algorimusok KERES(s,S): Össehasonlíjuk s-e S gyökerében árol s elemmel. Ha s = s, akkor megaláluk. Ha s < s, akkor balra megyünk ovább. KERES(, S) Ha s > s, akkor jobbra megyünk. Ugyane a ua járjuk be a KERES(5, S) kapcsán, de a nem aláljuk meg. Lépéssám: O(l), ahol l a fa mélysége MIN: mindig balra lépünk, amíg lehe MAX: mindig jobbra lépünk, amíg lehe Lépéssám: O(l) TÓLIG(a, b, S): KERES(a, S) INORDER a-ól b-ig Lépéssám: O(l + k), ahol k a a és b köö levő elemek sáma Kaona Gyula Y. (BME SZIT) Algorimuselméle. előadás 5 / Naiv BESZÚR BESZÚR(s, S): KERES(s, S)-sel megkeressük, hova kerülne, és új levele adunk hoá, pl. BESZÚR(, S): Lépéssám: O(l) Kaona Gyula Y. (BME SZIT) Algorimuselméle. előadás /
Naiv TÖRÖL TÖRÖL(s, S): Ha s levél, akkor riviális, pl. TÖRÖL(, S): TÖRÖL(s, S): Ha s-nek egy fia van, akkor: s fiú(s), pl. TÖRÖL(, S): Kaona Gyula Y. (BME SZIT) Algorimuselméle. előadás / Naiv TÖRÖL Vagy pl. TÖRÖL(, S ): 0 0 TÖRÖL(s, S): Ha s-nek ké fia van, akkor vissaveejük a előő esere. s helyére együk y := MAX(bal(s))- és öröljük y-. Pl. TÖRÖL(, S ): 0 0 Kaona Gyula Y. (BME SZIT) Algorimuselméle. előadás /
Naiv TÖRÖL Állíás y := MAX(bal(s)) csúcsnak nem lehe ké fia. Bionyíás. Ha lenne ké fia, akkor lenne egy y jobb fia is. De ekkor y > y. Lépéssám: O(l) Kaona Gyula Y. (BME SZIT) Algorimuselméle. előadás / Faépíés naiv besúrásokkal Ha pl. a,,..., n soroaból épíünk fá így, akkor e kapjuk: A épíés kölsége: + +... + (n ) = O(n ) Téel n Ha egy vélelen soroaból épíünk fá naiv besúrásokkal, akkor a épíés kölsége álagosan O(n log n). A kapo fa mélysége álagosan O(log n). Kaona Gyula Y. (BME SZIT) Algorimuselméle. előadás 0 /
Java animáció: Bejárások, bináris keresőfa Kaona Gyula Y. (BME SZIT) Algorimuselméle. előadás / Piros-fekee fák Olyan bináris keresőfa, melynek mélysége nem lehe nagy. BESZÚR, TÖRÖL, KERES, MIN, (MAX, TÓLIG) haékonyak. Definíció A piros-fekee fa egy bináris keresőfa, melyre eljesülnek a kövekeők: Minden nem levél csúcsnak fia van. Elemeke belső csúcsokban árolunk. Teljesül a keresőfa ulajdonság. A fa minden csúcsa piros vagy fekee. 5 A gyökér fekee. A levelek fekeék. Minden piros csúcs mindké gyereke fekee. Minden v csúcsra iga, hogy a össes v-ből levélbe veeő úon ugyanannyi fekee csúcs van. Kaona Gyula Y. (BME SZIT) Algorimuselméle. előadás /
Példa 5 5 Megj.: A sokásos bináris fá kiegésíjük üres levelekkel. Kaona Gyula Y. (BME SZIT) Algorimuselméle. előadás / Piros-fekee fák Jelölések F v : v gyökerű résfa m(v): v magassága, a leghossabb v-ből levélbe veeő ú éleinek sáma fm(v): v fekee-magassága, a v-ből levélbe veeő össes úon a fekee csúcsok sáma, v- nem sámolva. (E minden úon egyforma a. ulajdonság mia.) Kaona Gyula Y. (BME SZIT) Algorimuselméle. előadás /
Tulajdonságok Állíás Egy piros-fekee fa minden v csúcsára eljesül m(v) fm(v) m(v). Bionyíás. A leghossab levélbe veeő úon a fekeék sáma nem lehe öbb a élek sámánál fm(v) m(v).. pon mia a leghossabb úon a ponoknak legalább a fele fekee m(v) fm(v). Kaona Gyula Y. (BME SZIT) Algorimuselméle. előadás 5 / Tulajdonságok Állíás F v belső csúcsainak sáma b v fm(v). Bionyíás. Indukcióval m(v)-re: m(v) = 0 fm(v) = 0, b v 0 Ha m(v) > 0, akkor legyen, y a ké fia. m() < m(v) és m(y) < m(v) fm(v) fm() fm(v) és fm(v) fm(y) fm(v) b v = b + b y + b v ( fm() )+( fm(y) )+ ( fm(v) )+ = fm(v). Kaona Gyula Y. (BME SZIT) Algorimuselméle. előadás /
Tulajdonságok Állíás Ha egy piros-fekee fában n eleme árolunk, akkor a fa magassága log(n + ). Bionyíás. Ha r a gyökér b r = n. n = b r fm(r) log(n + ) fm(r) m(r) Téel KERES, MAX, MIN lépéssáma piros-fekee fában O(log n). Bionyíás. Álalában minden keresőfában a lépéssám a fa magasságával arányos O(l) = O(log n). Kaona Gyula Y. (BME SZIT) Algorimuselméle. előadás / BESZÚR lépéssáma Ha a keresőfáknál hasnálaos besúrás hasnálnánk, akkor megsérülhene a piros-fekee ulajdonság. Forgaás y s y s F y F F s F F y F s Megj.: E a művele megarja a keresőfa ulajdonságo. Kaona Gyula Y. (BME SZIT) Algorimuselméle. előadás /
BESZÚR Súrjuk be a új eleme a keresőfáknál megismer módon. Új belső csúcs kelekeik (gyerekei csak üres fekee levelek): Ha a gyökér, akkor legyen fekee Ha nem gyökér, akkor legyen a apja, legyen piros. () Ha fekee fekee-magasságok sehol nem válonak () Ha piros nem eljesül a piros-fekee ulajdonság ovábbi lépések kellenek. Kaona Gyula Y. (BME SZIT) Algorimuselméle. előadás / BESZÚR () Mivel piros, nem gyökér legyen apja (fekee), esvére y. (.) Ha y piros ásíneük - pirosra y y Evvel a problémá ké sinel feljebb oluk, o folyajuk a fa rendbeéelé. Kivéve, ha a gyökér marad fekee fm() eggyel nagyobb les. Kaona Gyula Y. (BME SZIT) Algorimuselméle. előadás 0 /
BESZÚR (.) Ha y fekee: (..) Ha és nem aonos oldali gyerek forgaunk körül. y y Evvel a kövekeő esere veeük a problémá. Kaona Gyula Y. (BME SZIT) Algorimuselméle. előadás / BESZÚR (.) Ha y fekee: (..) Ha és aonos oldali gyerek forgaunk körül, majd ásíneünk. y y y Evvel a gyökér fekee-magassága nem váloik, és eljesül a piros-fekee ulajdonság. Kaona Gyula Y. (BME SZIT) Algorimuselméle. előadás /
BESZÚR Téel A BESZÚR során (a) a lépéssám O(log n), (b) legfeljebb forgaás örénik. Bionyíás. (a) y piros eseben a (.) ponban sinel feljebb kerül a baj sinenkén konsans lépés O(log n). (b) Forgaás csak a (.) eseben örénik, de ekkor nincs felgyűrűés, rögön kijavíjuk a fá. Kaona Gyula Y. (BME SZIT) Algorimuselméle. előadás / TÖRÖL Hasonló módserek, de bonyolulabb. Téel A TÖRÖL során (a) a lépéssám O(log n), (b) legfeljebb forgaás örénik. Kaona Gyula Y. (BME SZIT) Algorimuselméle. előadás /
Példa BESZÚRásokra Súrjuk be egy üres fába sorban a,,,,, elemeke. (..) forgaás (..) ásín. (.) ásín. Kaona Gyula Y. (BME SZIT) Algorimuselméle. előadás 5 / Példa BESZÚRásokra Súrjuk be egy üres fába sorban a,,,,, elemeke. (..) forgaás (..) forgaás (..) ásín. Kaona Gyula Y. (BME SZIT) Algorimuselméle. előadás /
Példa BESZÚRásokra Súrjuk be egy üres fába sorban a,,,,, elemeke. (.) ásín. Kaona Gyula Y. (BME SZIT) Algorimuselméle. előadás / Java animáció: Piros-fekee fa Kaona Gyula Y. (BME SZIT) Algorimuselméle. előadás /