Vous êtes sur la page 1sur 26

AVL fk

Az els kiegyenslyozott fa algoritmus


Kitalli: Adelson-Velskii s Landis (1962)
Tulajdonsgok
Binris rendezfa
A bal s jobb rszfk magassga legfeljebb 1-gyel
klnbzik
A rszfk AVL fk
AVL fa
AVL fa
Jellje m(f) az f binris fa magassgt (szintjeinek
szmt), ha x az f fa egy cscsa; ekkor m(x) jelli
az x-gyker rszfa magassgt.
Definci (AVL-tulajdonsg): Egy binris keresfa
AVL-fa, ha minden x cscsra teljesl, hogy
|m(bal[x]) - m(jobb[x]) | 1
Mekkora a k - szint AVL-fa minimlis
cscsszma?
S
1
= 1 S
2
= 2 S
3
= 4 S
4
= 7
Mekkora a k - szint AVL-fa minimlis cscsszma?
S
5
=12
sszefggs az AVL-fa pontszma s magassga
kztt:
n adattal felpthet fa minimlis magassga?
majdnem teljes binris fa
n adattal felpthet fa maximlis magassga? ugyanez
a krds: az adott h szintszm AVL-fk kzl mennyi a
minimlis pontszm?
A h szintszm minimlis cscsszm AVL-fa gykernek
egyik rszfja h - 1,
a msik h - 2 szint;
az eredeti fa minimalitsa miatt pedig mindkt rszfa
minimlis cscsszm.
h-2
h-1
h
rekurzi:
S
h
= 1 + S
h-1
+ S
h-2
AVL fk - magassg
Ttel:
Egy h magassg AVL fnak legalbb F
h+3
+1 cscsa
van
Bizonyts:
Legyen S
h
a legkisebb h magassg AVL fa mrete
Nyilvn, S
0
= 1 s S
1
= 2
valamint S
h
= S
h-1
+ S
h-2
+ 1
Indukcival ..
S
h
= F
h+3
-1
(3-mal eltolt Fibonacci)
(F
h+2
-1+F
h+1
-1 +1=F
h+3
-1)
AVL fk - magassg
A Fibonacci szmokra igaz:
(
(

]
]

\
|

]
]

\
|
+
=
n n
n
F
2
5 1
2
5 1
5
1
=
|
|

\
|
+
|
|

\
|
+

1
1
]
1

|
|

\
|
|
|

\
|

|
|

\
|
+
+ +
2
2
5 1
2
5 1
5
1
1
2
5 1
2
5 1
5
1
3 3 3 h h h
= + 1 3 h F
n h S h h
h h h
h h
2 2
2
2
log 44 , 1 log
2
5 1
log
1
log /
2
5 1
2
2
5 1
5
2
2
5 1
2
2
5 1
5
5 2
2
2
5 1
8
5 5 5 3 5 3 1
5
1

+
+

+
=
=

+ +
=

+ + + +
nS
h
h nem mehet az optimlis fl
44%- kal tbbel
AVL fk jrakiegyenslyozs beszrsnl
A beszrs elrontja az AVL tulajdonsgot
4 eset
1 s 4 tkrkpek
2 s 3 tkrkpek
Egy j attribtumot vezetnk be:
kiegyenslyozsi tnyez
-1 : bal rszfa magasabb 1-gyel
0 : egyforma magasak a rszfk
+1: jobb rszfa magasabb 1-gyel
1 2 3 4
AVL fk jrakiegyenslyozs beszrsnl
A. A (++,+) szably:

x
y
h
h
h+1
++
+
< x< < y<
Az j levl a rszfba kerlt.
A beszrs eltt a fa magassga h+2 volt.

x
y
h
h h
0
+

beszrs
AVL fk jrakiegyenslyozs beszrsnl
A. A (++,+) szably:

x
y
h
h
h+1
++
+
< x< < y<
Az j levl a rszfba kerlt.
A beszrs eltt a fa magassga h+2 volt.
Forgats:


x
y
h h
h+1
A forgats utn ismt h+2 a magassg.
Ezrt feljebb, a befoglal fban (ha van),
vltozatlanul rvnyes az AVL
tulajdonsg, nem kell feljebb menni
ellenrizni.
Ennek a tkrkpe a (--,-)
szably! (1. eset)
AVL fk jrakiegyenslyozs beszrsnl
Plda:
22
15
10
++
20
+
17
25
-
3
18
21
30
-
ezt szrtuk be
AVL fk jrakiegyenslyozs beszrsnl
Plda:
22
15
10
20
17
25
3
18
21
30
AVL fk jrakiegyenslyozs beszrsnl
B. A (++,-) szably:

x
y
h
h
+
0
< x< < z < < y <
Az j levl a z alatti vagy rszfba kerlt.
A beszrs eltt a z cscs alatti fk egyformk:

z

A beszrs utn az egyik rszfa


magassga h lett, a msik maradt h-1.

x
y
h
++
-

z
h-1
h

h
h-1
h-1
h
h-1
0
AVL fk jrakiegyenslyozs beszrsnl
B. A (++,-) szably:

x
y
h
h
++
-
< x< < z < < y <
Dupla forgats kell: elszr jobbra:

z
h-1
h

h
h-1

x
y

+
++
0 v.+
h
h v.
h-1
h-1 v.
h
AVL fk jrakiegyenslyozs beszrsnl

x
y


x

y
z
azutn balra:
AVL fk jrakiegyenslyozs beszrsnl
B. A (++,-) szably:
< x< < z < < y <
tovbbra is igaz
Vgl teht:

x

y
z
A beszrs eltt az x gyker fa magassga
h+2 volt.
A forgats utn ismt h+2 a magassg. Ezrt
feljebb, a befoglal fban (ha van),
vltozatlanul rvnyes az AVL tulajdonsg,
nem kell feljebb menni ellenrizni.
Ennek a tkrkpe a (--,+)
szably!
AVL fk jrakiegyenslyozs beszrsnl
sszefoglalva:
A beszrs utn az j levltl felfel haladva a
gykr fel jra szmoljuk a cscsok cmkit ezen
az tvonalon. Ha egy x cscs cmkje ++ vagy -
lesz, akkor az x gyker (rsz)fa (esetleg dupla)
forgatsval helyrellthat az AVL tulajdonsg.
Mveletigny: O(1)
Ttel. Legyen S egy n cscsbl ll AVL-fa.
BESZR(s; S) utn legfeljebb egy (esetleg dupla)
forgatssal helyrellthat az AVL-tulajdonsg. A
beszrs kltsge ezzel egytt is O(log n).
Bizonyts: az elzekbl kvetkezik
AVL fk jrakiegyenslyozs trlsnl
A. A (++,+) szably:

x
y
h
h
h+1
++
+
< x< < y<
A trls az rszfban trtnt. Ennek a
magassga h+1 volt s h lett. Az x
gyker fa magassga h+3-rl h+2-re
cskkent. Forgats:


x
y
h h
h+1
A forgats utn h+2 a magassg. Ezrt
feljebb, a befoglal fban (ha van), nem
biztos, hogy vltozatlanul rvnyes az
AVL tulajdonsg, feljebb kell menni
ellenrizni, amg a gykrig nem jutunk.
AVL fk jrakiegyenslyozs trlsnl
B. A (++,-) szably:

x
y
h
h
++
-
< x< < z < < y <
A trls az rszfban trtnt. Ennek a
magassga h+1 volt s h lett. Az x gyker fa
magassga h+3-rl h+2-re cskkent.
A trls eltt a z cscs alatt fa:

z
h h

z
h

h
dupla
forgats
AVL fk jrakiegyenslyozs trlsnl
B. A (++,-) szably:
< x< < z < < y <
tovbbra is igaz
Vgl teht:

x

y
z
A forgats utn h+2 a magassg. Ezrt
feljebb, a befoglal fban (ha van), nem
biztos, hogy vltozatlanul rvnyes az
AVL tulajdonsg, feljebb kell menni
ellenrizni, amg a gykrig nem jutunk.
AVL fk jrakiegyenslyozs trlsnl
sszefoglalva:
Mivel az x gyker fa magassga cskkent a forgatssal, ezrt
feljebb is, ha van befoglal fa, elromolhatott az AVL
tulajdonsg.
A trls utn a trlt elem szljtl kezdve felfel haladva a
gykr fel jra szmoljuk a cscsok cmkit ezen az
tvonalon. Ha egy x cscs cmkje ++ vagy - lesz, akkor az
x gyker (rsz)fa (esetleg dupla) forgatsval helyrelltjuk
annak AVL tulajdonsgt. Ha x nem a gykr, akkor feljebb
kell lpni s folytatni kell az ellenrzst. Szlssges
esetben az adott tvonal minden pontjban forgatni kell!
Ttel: Az n pont AVL-fbl val trls utn legfeljebb
1,44 log
2
n (sima vagy dupla) forgats helyrelltja az AVL-
tulajdonsgot.
Bizonyts: az elzekbl kvetkezik.
AVL fk - adatszerkezetek
AVL implementlsa: egy flag jelzi a cscs llapott
Nzzk meg az animcit!
typedef enum { LeftHeavy, Balanced, RightHeavy }
BalanceFactor;
struct AVL_node {
BalanceFactor bf;
void *item;
struct AVL_node *left, *right;
}
sszefoglals
AVL fk
Az els dinamikusan kiegyenslyozott fk
A magassg az optimlis 44%-n bell
jrakiegyenslyozs forgatsokkal
O(log n)

Vous aimerez peut-être aussi