İkili Arama Ağaçları

Download Report

Transcript İkili Arama Ağaçları

İkili Arama Ağaçları
(Binary Search Trees)
BST
Ders 5
1
İkili arama ağacı özelliği
x ikili arama ağacında herhangi bir düğüm olsun.
– Eğer y düğümü x’in sol alt ağacında ise
key[y] ≤ key[x]
– Eğer y düğümü x’in sağ alt ağacında ise
key[y] ≥ key[x]
İkili arama ağacı özelliği
x ikili arama ağacında herhangi bir düğüm olsun.
Eğer y düğümü x’in sol alt ağacında ise key[y] ≤ key[x]
Eğer y düğümü x’in sağ alt ağacında ise key[y] ≥ key[x]
Kök
Kök
2
5
SolAA
7
3
SağAA
3
SağAA
7
4
2
<5
>2
8
>5
5
4
8
3
İkili Arama Ağaçları (BST)
• İki arama ağacı bağlı veri yapısı kullanılarak
gerçekleştirilebilir.
• Ağaçtaki her düğüm 3 adet pointer alanına sahip bir
nesnedir.
• Sol çocuk sol ile, sağ çocuk sağ ile ebeveyn ise p ile
temsil edilir.
• NIL ya da NULL herhangi bir çocuk veya ebeveyn
olmadığını ifade eder.
• Kök düğümü bir İAA’da p alanı NIL’e sahip tek
düğümdür.
4
İkili Arama Ağaçlarında İşlemler
•
•
•
•
•
•
•
•
Dolaşma (Traversal)
Arama (Search)
Minimum
Maximum
Successor
Predessor
Ekleme (Insertion)
Silme (Deletion)
5
1-) Dolaşma (Traversal)
Ağaç yapısı üzerinde herhangi bir düğüme erişme
sürecimize ağacı gezmek (traverse) denir. Bir ağacı
en çok bilinen üçdeğişik yöntemle gezebiliriz :
i) Sıralı (Inorder) ya da kök ortada
ii) Kök sonda (Postorder)
iii) Kök başta (Preorder)
6
Inorder-tree walk
Bu dolaşma yönteminde önce sol alt ağaç sonra alt ağacın
kökü ve en sonda ise sağ alt ağaç dolaşılır.
INORDER- T REE- WALK(x )
1 if x  NIL th e n
2
INORDER- T REE- WALK(leftx )
3
print keyx 
4
INORDER- T REE- WALK(rightx )
T ( n )  ( n )
7
Preorder-tree walk
Bu dolaşma yönteminde alt ağaçlardan önce kök dolaşılır.
P REORDER- T REE- WALK(x )
1 if x  NIL th e n
2
print keyx 
3
P REORDER - T REE- WALK(leftx )
4
P REORDER - T REE- WALK(rightx )
T ( n )  ( n )
8
Postorder-tree walk
Bu dolaşma yönteminde ise alt ağaçlardan sonra kök
dolaşılır.
P OST ORDER- T REE- WALK(x )
1 if x  NIL th e n
2
P OST ORDER - T REE- WALK(leftx )
3
P OST ORDER - T REE- WALK(rightx )
4
print keyx 
T ( n )  (n )
9
Inorder-tree walk
INORDER- T REE- WALK(x )
6
1 if x  NIL th e n
2
INORDER- T REE- WALK(leftx )
3
print keyx 
4
INORDER- T REE- WALK(rightx )
T ( n )  ( n )
7
3
2
5
8
2-Arama
15
18
6
7
3
2
17
20
4
13
13’ü ara
9
11
2-Arama (Özyinelemeli)
TREE - SEARCH(x, k )
1 if x  NILL or key  keyx
2
then return x
3 if k  keyx 
4
5
then return TREE - SEARCH(left x, k )
else return TREE - SEARCH(rightx, k )
T ( n)  O ( h)
12
2-Arama (İteratif)
T ( n)  O ( h)
13
3- Minimum Bulma
En küçük elemanı içeren düğüm en soldaki düğümde
bulunur.
Kökten başlayarak devamlı sola gidilerek bulunur
15
18
6
7
3
2
17
20
4
13
Minimum
9
14
3- Minimum Bulma
TREE - MINIMUM( x)
1 while left [ x]  NILL
2 do x  left [ x]
3 return x
T ( n)  O ( h)
15
4- Maksimum Bulma
En büyük elemanı içeren düğüm en sağdaki düğümde
bulunur.
Kökten başlayarak devamlı sağa gidilerek bulunur
15
18
6
7
3
2
17
20
Maximum
4
13
9
16
4- Maksimum Bulma
TREE - MAXIMUM( x)
1 while right[ x]  NILL
2 do x  right[ x]
3 return x
T ( n)  O ( h)
17
5- Successor (sonra gelen en küçük)
Bir x düğümünün successor’u key[x] değerinden büyük en
küçük değerli düğümdür.
18
5- Successor (sonra gelen en küçük)
15
18
6
7
3
2
17
20
15’in Successor’ı
4
13
9
Durum 1: x düğümünün sağ alt ağacı boş değilse
19
5- Successor (sonra gelen en küçük)
13’ün successor’ı
15
18
6
7
3
2
17
20
4
13
9
Durum 2: x düğümünün sağ alt ağacı boş ise
20
5- Successor (sonra gelen en küçük)
T REE- SUCCESSOR( x )
1 if right[ x ]  NILL
2
15
th e nre tu rnT REE MINIMUM( right[ x ])
3 y  p[ x ]
4 wh il ey  NILL and x  right[ y ]
5
do x  y
6
y  p[ y ]
2
7 re tu rn y
18
6
7
3
17
20
4
13
9
21
6-Ekleme
12
18
5
2
9
15
13
19
17
13 elemanını ekleme
22
TREE  INSERT(T , z )
1 y  NILL
2 x  root[T ]
6-Ekleme
3 while x  NILL
4
5
do y  x
if key[ z ]  key[ x]
6
then x  left [ x]
7
8 p[ z ]  y
else x  right[ x]
T ( n)  O ( h)
9 if y  NILL
10
11
then root[T ]  z
 Tree T was empty
else if key[ z ]  key[ y ]
12
then left [ y ]  z
13
else right[ y ]  z
23
TREE  INSERT(T , z )
6-Ekleme
12
1 y  NILL
2 x  root[T ]
3 while x  NILL
4
5
do y  x
if key[ z ]  key[ x]
6
then x  left [ x]
7
8 p[ z ]  y
else x  right[ x]
2
9 if y  NILL
10
11
18
5
9
13
15
19
17
then root[T ]  z
 Tree T was empty
else if key[ z ]  key[ y ]
12
then left [ y ]  z
13
else right[ y ]  z
24
7-Silme
15
16
5
12
3
2
20
13
10
z
18
23
6
7
13 elemanını silme
(z’nin çocuğu olmadığı durum)
25
7-Silme
15
16
5
12
3
2
10
20
18
23
6
7
13 elemanını silme
(z’nin çocuğu olmadığı durum)
26
7-Silme
15
16
5
z
12
3
2
20
13
10
18
23
6
7
16 elemanını silme
(z’nin bir çocuğu olduğu durum)
27
7-Silme
15
5
20
12
3
2
18
23
13
10
6
7
16 elemanını silme
(z’nin bir çocuğu olduğu durum)
28
7-Silme
15
z
55
16
12
3
2
10
6
20
13
18
23
y
7
5 elemanını silme (5’in successor’u 6)
(z’nin ikiçocuğu olduğu durum)
29
7-Silme
15
6
y
z
55
16
12
3
2
10
20
13
18
23
7
5 elemanını silme
(z’nin ikiçocuğu olduğu durum)
30
7-Silme
15
6
5
16
12
3
2
10
20
13
18
23
7
5 elemanını silme
(z’nin ikiçocuğu olduğu durum)
31
TREE  DELETE (T , z )
1 if left [ z ]  NIL or right[ z ]  NIL
2
3
4
5
6
7
8
then y  z
else y  TREE - SUCCESSOR( z )
if left [ y ]  NIL
then x  left [ y ]
else x  right[ y ]
if x  NIL
then p[ x ]  p[ y ]
9 if p[ y ]  NIL
10
then root[T ]  x
11
else if y  left [ p[ y ]]
12
7-Silme
T ( n)  O ( h)
then left [ p[ y ]]  x
13
else right[ p[ y ]]  x
14 if y  z
15 then key[ z ]  key[ y ]
16
copy y ' s satellite data into z
17 return
32
İkili Arama ağacı Uygulamaları
• İkili arama ağacı harita, sözlük gibi birçok
uygulamada kullanılır.
– İkili arama ağacı (anahtar, değer) çifti şeklinde
kullanılacak sistemler için uygundur.
– Ö.g.: Şehir Bilgi Sistemi
•
Posta kodu veriliyor , şehir ismi döndürülüyor. (posta
kodu/ Şehir ismi)
– Ö.g.: telefon rehberi
•
İsim veriliyor telefon numarası veya adres
döndürülüyor. (isim, Adres/Telefon)
– Ö.g.: Sözlük
•
Kelime veriliyor anlamı döndürülüyor. (kelime, anlam)
33
İkili Arama Ağacı – Sonuç
•
•
•
•
İki arama ağaç işlemlerinin karmaşıklığı O(h)
Fakat h ağacın derinliğine bağlı.
Örnek: 1 2 3 4 5 6 sayılarını sıralı bir şekilde
ekleyelim.
Ortaya çıkan ağaç bağlantılı listeye
benzemektedir. Dolayısıyla karmaşıklık O(n)
şeklinde olacaktır.
kök
•
1
2
Daha iyisi yapılabilir mi?
Ağacımızı dengeli
yaparsak evet?
1.
2.
3.
4.
3
4
5
AVL-ağaçları
Splay ağaçları
Red-Black ağaçları
B ağaçları, B+ agaçları
34
6