• Nem Talált Eredményt

Algoritmuselmélet Keres˝ofák, piros-fekete fák Katona Gyula Y.

N/A
N/A
Protected

Academic year: 2022

Ossza meg "Algoritmuselmélet Keres˝ofák, piros-fekete fák Katona Gyula Y."

Copied!
13
0
0

Teljes szövegt

(1)

Algoritmuselmélet

Keres ˝ofák, piros-fekete fák

Katona Gyula Y.

Számítástudományi és Információelméleti Tanszék Budapesti M ˝uszaki és Gazdaságtudományi Egyetem

7. el ˝oadás

Katona Gyula Y. (BME SZIT) Algoritmuselmélet 7. el ˝oadás 1 / 26

Keres ˝ofák

Tároljuk az U rendezett halmaz elemeit, hogy BESZÚR, TÖRÖL, KERES, MIN, (MAX, TÓLIG) hatékonyak legyenek.

Bináris fa bejárása

teljes fa (új def.): az alsó szint is tele van =⇒ l szint ˝u, teljes fának 2l − 1 csúcsa van.

Fa csúcsai → elem(x),bal(x),jobb(x) esetleg apa(x) és reszfa(x)

*

5 6

+

8 9

Ha x a gyökér, y pedig a 9-es csúcs, akkor

bal(jobb(x)) = y, apa(apa(y)) = x, elem(bal(x)) = ∗,

reszfa(x) = 7.

(2)

PREORDER, INORDER, POSTORDER

pre(x) in(x) post(x)

begin begin begin

látogat(x); in(bal(x)); post(bal(x));

pre(bal(x)); látogat(x); post(jobb(x));

pre(jobb(x)) in(jobb(x)) látogat(x)

end end end

*

5 6

+

8 9

PREORDER: + ∗8 5−9 6 INORDER: 8 ∗5+ 9− 6 POSTORDER: 8 5∗9 6− +

Lépésszám: O(n)

Katona Gyula Y. (BME SZIT) Algoritmuselmélet 7. el ˝oadás 3 / 26

Bináris keres ˝ofa

Definíció (Keres ˝ofa-tulajdonság)

Tetsz ˝oleges x csúcsra és az x baloldali részfájában lev ˝o y csúcsra igaz, hogy elem(y) ≤ elem(x). Hasonlóan, ha z egy csúcs az x jobb részfájából, akkor elem(x) ≤ elem(z).

4 2

13 1

6

9 8

10

Házi feladat: Igazoljuk, hogy egy bináris keres ˝ofa elemeit a fa inorder bejárása nemcsökken ˝o sorrendben látogatja meg.

Egy kényelmes megállapodás: a továbbiakban feltesszük, hogy

(3)

Naiv algoritmusok

2 4

6

1

8 9 KERES(4,S)

KERES(s,S): Összehasonlítjuk s-et S gyökeré- ben tárolt s0 elemmel.

Ha s = s0, akkor megtaláltuk.

Ha s < s0, akkor balra megyünk tovább.

Ha s > s0, akkor jobbra megyünk.

Ugyanezt az utat járjuk be a KERES(5,S) kapcsán, de azt nem találjuk meg.

Lépésszám: O(l), ahol l a fa mélysége MIN: mindig balra lépünk, amíg lehet MAX: mindig jobbra lépünk, amíg lehet Lépésszám: O(l)

TÓLIG(a,b,S): KERES(a,S) −→ INORDER a-tól b-ig

Lépésszám: O(l +k), ahol k az a és b között lev ˝o elemek száma

Katona Gyula Y. (BME SZIT) Algoritmuselmélet 7. el ˝oadás 5 / 26

Naiv BESZÚR

BESZÚR(s,S): KERES(s,S)-sel megkeressük, hova kerülne, és új levelet adunk hozzá, pl. BESZÚR(3,S):

4 2

6

1

8 9

=⇒

4 2

3 1

6

8 9

Lépésszám: O(l)

(4)

Naiv TÖRÖL

TÖRÖL(s,S): Ha s levél, akkor triviális, pl. TÖRÖL(3,S):

4 2

3 1

6 8

9

=⇒ 2

1 4

6 8

9

TÖRÖL(s,S): Ha s-nek egy fia van, akkor: s ← fiú(s), pl.

TÖRÖL(4,S):

4 2

3 6

1

8 9

=⇒

3 2 1

6 8

9

Katona Gyula Y. (BME SZIT) Algoritmuselmélet 7. el ˝oadás 7 / 26

Naiv TÖRÖL

Vagy pl. TÖRÖL(8,S0):

2 4

11 6

3

8

1

9 10

=⇒

2

4 11

6

3

1 9

10

TÖRÖL(s,S): Ha s-nek két fia van, akkor visszavezetjük az el ˝oz ˝o esetre. s helyére tegyük y := MAX(bal(s))-t és töröljük y-t. Pl.

TÖRÖL(6,S0):

4 2

11 6

3 1

8

9 10

=⇒

3 2

11 4

1

8

9 10

(5)

Naiv TÖRÖL

Állítás

y := MAX(bal(s)) csúcsnak nem lehet két fia.

Bizonyítás.

Ha lenne két fia, akkor lenne egy y0 jobb fia is. De ekkor y0 > y.

Lépésszám: O(l)

Katona Gyula Y. (BME SZIT) Algoritmuselmélet 7. el ˝oadás 9 / 26

Faépítés naiv beszúrásokkal

Ha pl. az 1,2, . . . ,n sorozatból építünk fát így, akkor ezt kapjuk:

n 3

2 1

Az építés költsége: 2+ 3+ . . .+ (n − 1) = O(n2)

Tétel

Ha egy véletlen sorozatból építünk fát naiv beszúrásokkal, akkor az építés költsége átlagosan O(nlog2n). A kapott fa mélysége átlagosan O(log2n).

(6)

Piros-fekete fák

Olyan bináris keres ˝ofa, melynek mélysége nem lehet nagy.

BESZÚR, TÖRÖL, KERES, MIN, (MAX, TÓLIG) hatékonyak.

Definíció

A piros-fekete fa egy bináris keres ˝ofa, melyre teljesülnek a következ ˝ok:

1 Minden nem levél csúcsnak 2 fia van.

2 Elemeket bels ˝o csúcsokban tárolunk.

3 Teljesül a keres ˝ofa tulajdonság.

4 A fa minden csúcsa piros vagy fekete.

5 A gyökér fekete.

6 A levelek feketék.

7 Minden piros csúcs mindkét gyereke fekete.

8 Minden v csúcsra igaz, hogy az összes v -b ˝ol levélbe vezet ˝o úton ugyanannyi fekete csúcs van.

Katona Gyula Y. (BME SZIT) Algoritmuselmélet 7. el ˝oadás 11 / 26

Példa

13 8

1

6

11

17

15 25

22 27

Megj.: A szokásos bináris fát kiegészítjük üres levelekkel.

(7)

Piros-fekete fák

Jelölések

Fv: v gyöker ˝u részfa

m(v): v magassága, a leghosszabb v-b ˝ol levélbe vezet ˝o út éleinek száma

fm(v): v fekete-magassága, a v-b ˝ol levélbe vezet ˝o összes úton a fekete csúcsok száma, v-t nem számolva.

(Ez minden úton egyforma a 8 . tulajdonság miatt.)

Katona Gyula Y. (BME SZIT) Algoritmuselmélet 7. el ˝oadás 13 / 26

Tulajdonságok

Állítás

Egy piros-fekete fa minden v csúcsára teljesül m(v)

2 ≤ fm(v) ≤ m(v).

Bizonyítás.

A leghosszab levélbe vezet ˝o úton a feketék száma nem lehet több az élek számánál =⇒ fm(v) ≤ m(v). √

7 . pont miatt a leghosszabb úton a pontoknak legalább a fele fekete

=⇒ m(v2 ) ≤ fm(v). √

(8)

Tulajdonságok

Állítás

Fv bels ˝o csúcsainak száma bv ≥ 2fm(v) − 1.

Bizonyítás.

Indukcióval m(v)-re: m(v) = 0 =⇒ fm(v) = 0, bv ≥ 20− 1 √ Ha m(v) > 0, akkor legyen x,y a két fia.

=⇒ m(x) < m(v) és m(y) < m(v)

fm(v) −1 ≤ fm(x) ≤ fm(v) és fm(v) −1 ≤ fm(y) ≤ fm(v) bv = bx + by + 1 =⇒

bv ≥ (2fm(x)−1)+(2fm(y)−1)+1 ≥ 2·(2fm(v)−1−1)+1 = 2fm(v)−1.

Katona Gyula Y. (BME SZIT) Algoritmuselmélet 7. el ˝oadás 15 / 26

Tulajdonságok

Állítás

Ha egy piros-fekete fában n elemet tárolunk, akkor a fa magassága

≤ 2 log(n +1).

Bizonyítás.

Ha r a gyökér =⇒ br = n.

n = br ≥ 2fm(r) − 1 =⇒ log(n+ 1) ≥ fm(r) ≥ m(r2 )

Tétel

KERES, MAX, MIN lépésszáma piros-fekete fában O(logn).

Bizonyítás.

Általában minden keres ˝ofában a lépésszám a fa magasságával arányos =⇒ O(l) = O(logn).

(9)

BESZÚR lépésszáma

Ha a keres ˝ofáknál használatos beszúrást használnánk, akkor megsérülhetne a piros-fekete tulajdonság.

Forgatás

x y

Fy

z t s

Fs Ft

=⇒

x y

Fy

z

t s

Fs

Ft

Megj.: Ez a m ˝uvelet megtartja a keres ˝ofa tulajdonságot.

Katona Gyula Y. (BME SZIT) Algoritmuselmélet 7. el ˝oadás 17 / 26

BESZÚR

Szúrjuk be az új elemet a keres ˝ofáknál megismert módon. =⇒ Új bels ˝o csúcs keletkezik (gyerekei csak üres fekete levelek): z

Ha z a gyökér, akkor legyen fekete =⇒ z Ha z nem gyökér, akkor legyen az apja x, =⇒ z legyen piros.

(1) Hax fekete =fekete-magasságok sehol nem változnak

=

x z

(2) Hax piros =nem teljesül a piros-fekete tulajdonság =

x z

(10)

BESZÚR

(2) Mivel x piros, nem gyökér =⇒

legyen x apja t (fekete), x testvére y. (2.1) Ha y piros =⇒ átszínezzük t-t pirosra

t x

z

y =⇒

t x

z

y

Evvel a problémát két szinttel feljebb toltuk, ott folytatjuk a fa rendbetételét.

Kivéve, ha t a gyökér =⇒ t marad fekete =⇒ fm(t) eggyel nagyobb lesz.

Katona Gyula Y. (BME SZIT) Algoritmuselmélet 7. el ˝oadás 19 / 26

BESZÚR

(2.2) Ha y fekete:

(2.2.1) Haz és x nem azonos oldali gyerek = forgatunk x körül.

t x

z

y =

t z

x

y

Evvel a következ ˝o esetre vezettük a problémát.

(11)

BESZÚR

(2.2) Ha y fekete:

(2.2.2) Haz és x azonos oldali gyerek

=forgatunk t körül, majd átszínezünk.

t x

z

y

=

x

z t

y

=

x

z t

y

Evvel a gyökér fekete-magassága nem változik, és teljesül a piros-fekete tulajdonság.

Katona Gyula Y. (BME SZIT) Algoritmuselmélet 7. el ˝oadás 21 / 26

BESZÚR

Tétel

A BESZÚR során

(a) a lépésszám O(logn),

(b) legfeljebb 2 forgatás történik.

Bizonyítás.

(a) y piros esetben a (2.1) pontban 2 szinttel feljebb kerül a baj =⇒ szintenként konstans lépés =⇒ O(logn). √

(b) Forgatás csak a (2.2) esetben történik, de ekkor nincs felgy ˝ur ˝uzés, rögtön kijavítjuk a fát. √

(12)

TÖRÖL

Hasonló módszerek, de bonyolultabb.

Tétel

A TÖRÖL során

(a) a lépésszám O(logn),

(b) legfeljebb 3 forgatás történik.

Katona Gyula Y. (BME SZIT) Algoritmuselmélet 7. el ˝oadás 23 / 26

Példa BESZÚRásokra

Szúrjuk be egy üres fába sorban a 2,7,9,4,3,1 elemeket.

2 =⇒

2

7 =⇒ 2

7 9

(2.2.2) forgatás

=⇒

7

2 9

(2.2.2) átszín.

=⇒

7

2 9

7 2

4

9 (2.1) átszín.

=⇒

7 2

4

9

(13)

Példa BESZÚRásokra

Szúrjuk be egy üres fába sorban a 2,7,9,4,3,1 elemeket.

7 2

4 3

9 (2.2.1) forgatás

=⇒

7 2

3 4

9 (2.2.2) forgatás

=⇒

7 3

2 4

9 (2.2.2) átszín.

=⇒

7 3

2 4

9

Katona Gyula Y. (BME SZIT) Algoritmuselmélet 7. el ˝oadás 25 / 26

Példa BESZÚRásokra

Szúrjuk be egy üres fába sorban a 2,7,9,4,3,1 elemeket.

7 3

2 1

4

9 (2.1)

átszín.

=⇒

7 3

2 1

4

9

Hivatkozások

KAPCSOLÓDÓ DOKUMENTUMOK

Egész számok egy S véges részhalmazát szeretnénk tárolni, hogy a beszúrás és a minimális elem törlése (mintör ) hatékony

Ha P = NP teljesülne, akkor minden olyan problémára, amelyre van hatékony tanúsítvány (azaz NP-beli), lenne polinomiális algoritmus is. Fogunk mutatni olyan problámákat,

Egy piros-fekete f´ aban valamelyik, a gy¨ ok´ ert˝ ol egy lev´ elig vezet˝ o ´ uton sorban az al´ abbi sz´ın˝ u pontok vannak: fekete, piros, fekete, fekete.. Mekkora a

Nem az összhasonlítás id ˝oigényes, hanem az adatok kiolvasása, de sokszor egy adat kiolvasásához amúgy is kiolvasunk több más adatot, egy lapot. = ⇒ A fa csúcsai legyenek

Olyan bináris keres ˝ofa, melynek mélysége nem lehet nagy. BESZÚR, TÖRÖL, KERES, MIN, (MAX,

Ez a színezés takaros, ha van G-nek olyan minimális költség ˝u feszít ˝ofája, ami az összes kék élet tartalmazza, és egyetlen piros élet sem tartalmaz.. Katona

Ez a színezés takaros, ha van G-nek olyan minimális költség ˝u feszít ˝ofája, ami az összes kék élet tartalmazza, és egyetlen piros élet sem tartalmaz.... A

Az algoritmus lefutásának leírása egy hatékony tanúsítvány arra is, hogy a probléma NP-ben van, és arra is, hogy coNP-ben van, hiszen a végén a válasz vagy IGEN vagy NEM ,