Transcript Document

AVL Ağaçları: Motivasyon

• İkili arama ağaçları üzerindeki tartışmalarımızı hatırlarsak – Ağacın yüksekliği ekleme sırasına bağımlıdır.

• Ö.g., 1, 2, 3, 4, 5, 6, 7 sayılarını boş bir ağaca eklersek • Problem : Dengenin bozulması – Ağaç bağlantılı liste seklinde bozulur.

– Tüm operasyonların karmaşıklığı O(h) olduğunda, log N <= h <= N-1, İkili arama ağacı operasyonlarının en kötü çalışma zamanı O(N) olur.

• Soru : Ekleme sırasına bakmadan BST nin yüksekliği log(n) olabilir mi? Bir başka deyişle, BST’yi dengeli bir şekilde tutabilir miyiz.

1

Yükseklik Dengeli Ağaçlar

• BST operasyonlarını daha kısa sürede gerçekleştirmek için pek çok BST dengeleme algoritması vardır. – A delson V elskii ve L andis (AVL) ağaçları (1962) – Splay ağaçları – B-ağacı (1978) ve diğer çok yönlü arama ağaçları (1972) – Red-Black ağaçları (1972) • Ayrıca Simetrik İkili B-Ağaçları(Symmetric Binary B-Trees) şeklinde de bilinir 2

AVL Ağaçları: Tanım

1. Tüm boş ağaç AVL ağacıdır.

2. Eğer T boş olmayan T 1. T L ve T R L AVL ağaçları ise ve T ağacı şeklinde isimlendirilir.

R şeklinde sol ve sağ alt ağaçları olan ikili arama ağacı ise, T ancak ve ancak aşağıdaki şartları sağlarsa AVL 2. h L |h L ve h R T L ve T R nin yükseklikleri olmak üzere – h R | <= 1 olmak zorundadır.

h L T L T R h L +1 or h L -1 3

• • • •

AVL Ağaçları

AVL ağaçları dengeli ikili arama ağaçlarıdır.

Bir düğümdeki denge faktörü yükseklik ( sol altağaç ) yükseklik ( sağ altağaç ) =

AVL Ağacı 1

4 6

0

7

-1

AVL ağaçlarında balans faktörü sadece -1, 0, 1 olabilir.

Her bir düğümün sol ve sağ alt ağaçlarının yükseklikleri arasındaki fark en fazla 1 olabilir.

0

1 9

0 Kırmızı numaralar balans fartörüdür.

4

AVL Ağaçları: Örnekler

1

5 6

0

7

-1 1

4 6

-1

10

2 0

4 6

0

9

1 0

4

AVL Ağacı

9

0 0

1

0

7 8

0

9

0 AVL Ağacı Değildir 0

1 5 8

AVL Ağacı 0 1

4 6

-1

9

2 0

1 7

-1

8

0 AVL Ağacı Değildir 2

4 6

0 0

4 6

1

9

0

7

-2 0

1 5

0 AVL Ağacı Kırmızı numaralar balans faktörüdür.

1

3 8

-1 0

1 9

0 AVL Ağacı Değildir

5

AVL Ağacı: Gerçekleştirim

• AVL ağacının gerçekleştirimi için her x düğümünün yüksekliği kaydedilir.

x left key height right class AVLDugumu{ int deger; int yukseklik; AVLTDugumu sol; AVLDugumu sag; } • x’in balans faktörü yüksekliği – x’in sağ alt ağacının yüksekliği • AVL ağaçlarında, “ = x’in sol alt ağacının bf ” sadece {-1, 0, 1} değerlerini alabilir.

6

AVL Ağaçları

• N düğümlü bir AVL ağacının yüksekliği daima O(log N) dir.

• Peki nasıl?

Yükseklik = O(logN) AVL Ağacı

6

0 1

5 7

-1 0

4 9

0 Kırmızı numaralar balans fartörüdür.

7

• • –

AVL Ağaçları: Güzel ve Çirkin

Güzel: Arama süresi O(h) = O(logN) • Çirkin Ekleme ve silme işlemleri ağacın dengesiz olmasına neden olabilir.

Ekle 3 1

5 6

0

7

-1 0

4 9

0 AVL Tree 2

5 6

1

7

-1 1

4 9

0 0

3

Artık AVL ağacı değil

8

AVL Ağacında Dengenin Sağlanması

Problem : Ekleme işlemi bazı durumlarda ekleme noktasına göre kök olan bölgelerde balans faktörün 2 veya -2 olmasına neden olabilir.

• Fikir : Yeni düğümü ekledikten sonra 1. Balans faktörü düzelterek köke doğru çık.

2. Eğer düğümün balans faktörü 2 veya -2 ise ağaç bu düğüm üzerinde döndürülerek düzeltilir.

6

1 2

5 7

-1 1

4 9

0 0

3 9

Denge Sağlama: Örnek

0

4

1

5 6

0

7

-1 Ekle 3 2

5 6

1

7

-1 Döndürme 0

4 6

0

7

-1

9

0 1

4 9

0 0

3 5

0

9

0

AVL 0

3

AVL AVL Değil

Yeni düğümü ekledikten sonra 1. Balans faktörü düzelterek köke doğru çık.

2. Eğer düğümün balans faktörü 2 veya -2 ise ağaç bu düğüm üzerinde döndürülerek düzeltilir.

10

AVL Ağacı - Ekleme (1)

L P P Pivot: bf 2 veya -2 R A B C D • P düğümünün dengeyi bozan düğüm olduğu düşünülürse.

– P pivot düğüm şeklinde isimlendirilir.

– Eklemeden sonra köke doğru çıkarken bf’nin 2 veya 2 olduğu ilk düğümdür.

11

AVL Ağacı - Ekleme (2)

L P P Pivot: bf 2 veya -2 R • A B C D 4 farklı durum vardır: – Dış Durum (tek döndürme gerektiren) : 1. P’nin sol alt ağacının soluna eklendiğinde (LL Dengesizliği).

2. P’nin sağ alt ağacının sağına eklendiğinde (RR Dengesizliği) − İç Durum (2 kez döndürme işlemi gerektiren) : 3. P’nin sol alt ağacının sağına eklendiğinde (RL Dengesizliği) 4. P’nin sağ alt ağacının soluna eklendiğinde(LR Dengesizliği) 12

LL

Dengesizliği & Düzeltme

Döndürme L

2

P

0 veya 1

L P R A R A B C D B Ekleme işleminden sonra ağaç C D LL Düzeltmesinden sonra ağaç • LL Dengesizliği: – P – L ’nin ’nin bf bf si si 2 P’nin sol alt ağacının soluna eklendiğimizde (A alt ağacınına) 0 veya 1 – Düzeltme: P etrafında sağa doğru dönderme.

13

LL

Dengesizliği Düzeltme Örneği (1)

1

10 Ekle(2)

1

10

1

10 Döndür

1

10

1

4 20

0 1

4 20

0 2

4

0

20

0 0

3 20

0 0

3

0

3

1

3

0

2 4

0

Başlangıçtaki AVL Ağacı

0

2

0

2 eklendikten sonra ağacın durumu 2 Balans faktörü düzelterek köke doğru ilerle • Pivotun belirlenmesi LL Düzeltmesi yapıldıktan sonra AVL ağacı Dengesizliğin türünün belirlenmesi – – LL Dengesizliği:

P(4)

’ün

bf

si

L(3)

’ ün

bf

si 2 0 veya 1 14

LL

Dengesizliği Düzeltme Örneği (2)

1

10 Ekle(2)

1

10

2

10 Döndür

0

4

0

4 20

0 0

4 20

0 1

4 20

0 1

3 10

0 0

3 5

0 0

3 5

0 1

3 5

0 0

2 5

0

20

0

Başlangıçtaki AVL Ağacı

0

2

0

2 eklendikten sonra ağacın durumu 2 Balans faktörü düzelterek köke doğru ilerle • Pivotun belirlenmesi LL Düzeltmesi yapıldıktan sonra AVL ağacı Dengesizliğin türünün belirlenmesi – – LL Dengesizliği: P(4) ’ün bf si L(3) ’ ün bf si 2 0 veya 1 15

RR

Dengesizliği & Düzeltme

Döndür R P

-2

P L R

0 veya -1

D L C A B C D Ekledikten sonra A B RR Düzeltmesi yapıldıktan sonra • RR Dengesizliği: – P – R   bf bf = = -2 P’nin sağ alt ağacının sağına eklendiğinde (D alt ağacına eklendiğinde) 0 veya -1 – Düzeltme: P etrafında sala doğru dönderme 16

RR

Dengesizliği Düzeltme Örneği (1)

0

4 10

-1

Ekle(40) 20

-1 0

4 10

-1

20

-1 0

4 10

-1

20

-2

Döndür

0

4 10

-1

30

0

30

0

Başlangıçtaki AVL Ağacı 30

0

30

-1 0

20 40

0

40

0

40 eklendikten sonra ağacın durumu Balans faktörü düzelterek köke doğru ilerle 40

0

Pivotun belirlenmesi RR Düzeltmesi yapıldıktan sonra AVL ağacı • Dengesizliğin türünün belirlenmesi RR Dengesizliği: – P(20)  bf = 2 – R(30)  bf = 0 veya -1

RR

Dengesizliği Düzeltme Örneği (2)

10

-1

Ekle(40) 10

-2

Döndür 20

0 0

4 20

0 0

4 20

-1 0

10 30

-1 0

15 30

0 0

15 30

-1 0

4 15

0

40

0

Başlangıçtaki AVL Ağacı 40

0

Balans faktörü düzelterek köke doğru ilerle ve 10’u pivot olarak belirle 40 eklendikten sonra ağacın durumu Dengesizliğin türünün belirlenmesi • RR Düzeltmesi yapıldıktan sonra AVL ağacı RR Dengesizliği: – P(10)  bf = 2 – R(20)  bf = 0 veya -1

LR

Dengesizliği & Düzeltme

2

P 1. Döndürme P 2. Döndürme LR

-1

L 2 R LR 2 R L P A 1 LR C D L B2 C D A B1 B2 R B1 B2 A B1 C D Eklemeden sonra ağaç 1. Döndürmeden sonra ağaç LR Düzeltmesinden sonra • LR Dengesizliği: P’nin sol alt ağacının sağına eklendiğinde ( LR ağacına ) – P  – L  bf bf = = 2 -1 – Düzeltme: L & P etrafında 2 kez döndürme

LR

Dengesizliği Düzeltme Örneği

0

3

0

4

1

10 7

0

20

0

Ekle(5)

2

10

0

3

-1

4 2 20

0

1 7

1

Başlangıçtaki AVL Ağacı Balans faktörü düzelterek köke doğru ilerle ve 10’u pivot olarak belirle Döndür

0

3

0

4

0

7 5

0

10

-1

20

0

5

0

2 eklendikten sonra ağacın durumu Dengesizliğin türünün belirlenmesi LR Düzeltmesinden sonra ağacın durumu • LR Dengesizliği: – P(10)  bf = 2 – L(4)  bf = -1 20

RL

Dengesizliği & Düzeltme

1. Döndürme 2. Döndürme RL P

-2

P

-2

L 2 R

1

L 2 RL P R RL 1 R L A B D A B C1 C1 C2 D C2 D 1. Döndürmeden sonra A B C1 C2 Eklemeden sonra ağaç RL Düzeltmesinden sonra • RL Dengesizliği: – P – R   bf bf = – Düzeltme: = -2 1 P’nin sağ alt ağacının soluna eklendiğinde (RL alt ağacına) R & P etrafında 2 kez döndürme.

RL

Dengesizliği Düzeltme Örneği

-1

10

0

4 20

0 0

15 Başlangıçtaki AVL Ağacı 30

0

Ekle(17) Balans faktörü düzelterek köke doğru ilerle ve 10’u pivot olarak belirle

0

4

-2

10 2 20

1 -1

15 1 30

0

Döndür

0

4

1

10 15

0 0

17 20

1

30

0

17

0

17 eklendikten sonra ağacın durumu RL Düzeltmesi yapıldıktan sonra AVL ağacı • Dengesizliğin türünün belirlenmesi RL Dengesizliği: – P(10)  bf = 2 – R(20)  bf = 1 22

Silme

• Silme işlemi ekleme işlemi ile benzerlik gösterir.

• Öncelikle ikili arama ağacındaki gibi normal silme işlemi yapılır.

• Düğüm silindikten sonra, ağaçta köke doğru ilerleyin ve balans faktörünü güncelleyin.

− Eğer dengesiz bir düğüm tespit edilirse, uygun döndürme işlemlerini yapın.

− Bu işlem sırasında birden fazla döndürme işlemi yapılabilir.

23

Silme Örneği (1)

1

10 Sil(20)

1

10 Döndür 4

-1

Balans faktörü düzelterek köke doğru ilerle • Dengesizliğin türünün belirlenmesi – – LL Dengesizliği:

P(10)

’ün

bf

si

L(4)

’ ün

bf

si 2 0 veya 1

Silme Örneği (2)

1

10 Sil(20)

1

10

2

10 Döndür 5

0 -1

4 5

0

Başlangıçtaki AVL Ağacı 20

0 -1

4

-1

4 2

0

4 10

0

5

0

1 5

0

LR Düzeltmesinden sonra AVL Ağacı 20 silindikten sonra Ağacın durumu Balans faktörünü düzelterek köke doğru ilerle 10’un pivot olarak belirlenmesi • Dengesizliğin türünün belirlenmesi LR Dengesizliği: – P(10)  bf = 2 – L(4)  bf = -1 25

Silme Örneği (3)

1

5

1

10 20

-1 0

1

1

2

1

3

-1

7

0

15

0

4

0

8 30

0 -1

40 Başlangıçtaki AVL Ağacı Sil(10)

1

15

1

5 20

-1 0

1

1

2

1

3

-1

7

0

4

0

8 30

-1 0

40 10 silindikten sonra 10 ve 15(sağ alt ağaçtaki en küçük eleman) yer değiştirdi ve 15 silindi.

Balans faktörü düzelterek köke doğru ilerle 26

Silme örneği (3) - devam

1

15 Döndür

1

5 20

-2 1

3

-1

7 30

-1 1

2

0

4

0

8

0

40

0

1 • 20’nin pivot olarak seçilmesi Dengesizliğin türünü belirle RR Dengesizliği: – P(20)  bf = 2 – R(30)  bf = 0 veya -1

1

15

1

5 30

0 0

1

1

2

1

3

-1

7

0

4

0

8 20

0

40

0

RR Dengesizliği düzeltildikten sonra Yukardaki AVL ağacı mıdır?

Balans faktörü düzelterek köke doğru ilerle.

27

Silme Örneği (3) - devam

2

15

1

5 30

0 1

3

-1

7 20

0

40

0 1

2

0

4

0

8

0

1 • 15’in pivot olarak belirlenmesi Dengesizliğin türünü belirle LL Dengesizliği: – P(15)  bf = 2 – L(5)  bf = 0 veya 1 Döndür

0

5

0

1

1

2

1

3

0

4 7

-1

15

0

30

0 0

8 20

0

40 Düzeltilmiş AVL ağacı

0

28

Arama (Bul)

• AVL ağacı bir tür İkili Arama Ağacı (BST) olduğundan arama algoritması BST ile aynıdır.

• O(logN) de çalışması garantidir.

29

AVL Ağaçları - Özet

• AVL Ağaçlarının Avantajları 1. AVL ağacı devamlı dengeli olduğu için Arama/Ekleme/Silme işlemi O(logN) yapılır.

2. Düzeltme işlemi algoritmaların karmaşıklığını etkilemez.

• AVL Ağaçlarının Dezavantajları: 1. Balans faktörü için ekstra yer gereklidir.

2. Arı dengeli ağaçlarda AVL ağaçları kadar iyi performans verir ayrıca bu tür algoritmalarda balans faktör kullanılmaz • Splay ağaçları 30

birisidir.

Splay Ağaçları

• Splay ağaçları ikili arama ağaç yapılarından – Her zaman dengeli değildir.

– Arama ve ekleme işlemlerinde dengelemeye çalışılır böylece gelecek operasyonlar daha hızlı çalışır.

• Sezgiseldir.

– Eğer X bir kez erişildi ise, bir kez daha erişilecektir.

– X erişildikten sonra "splaying" operasyonu yapılır.

• X köke taşınır.

31

Örnek

Kök Kök

• • 3 15

Bul(12) den sonra

12 2 6 1 12 18

Splay ana düşünce: Döndürme kullanarak 12 ’yi köke getir.

3 6 9 14 15 18 9 14

12 arandıktan sonra Başlangıçtaki ağaç

Burada ağacın dengeli olmasının yanı sıra 12 ye O(1) zamanında erişilebiliyor.

Aktif (son erişilenler) düğümler köke doğru taşınırken aktif olmayan düğümler kökten uzaklaştırılır.

32

• • • • •

Splay Ağacı Terminolojisi

– – X kök olmayan bir düğüm olsun. (ailesi olan) P düğümü X’in aile düğümü olsun.

G düğümü X’in ata düğümü olsun.

G ve X arasındaki yol düşünüldüğünde: Her sola gitme işlemine “ zig ” işlemi denilmektedir.

Her sağa gitme işlemine “ zag ” işlemi denilmektedir.

Toplam 6 farklı durum oluşabilir: G G G G P P P P X

1. zig

X

2. zig-zig

P X

3. zig-zag

X

4. zag-zig

X

5. zag-zag

P X 33

6. zag

Splay Ağaç İşlemleri

• X’e erişildiğinde 6 tane rotasyon işleminden birisi uygulanır: – Tek Dönme (X P’ye sahip ama G’ye sahip değil) • zig, zag – Çift Dönme (X hem P hemde G’ye sahip) • zig-zig, zig-zag • zag-zig, zag-zag 34

• •

Splay Ağaçları: Zig İşlemi

“Zig” işlemi AVL ağacındaki gibi tek döndürme işlemidir.

Örneğin erişilen elemanın 6 olduğu düşünülürse.

• • • 15 6

Zig-Sağ

6 18 3 15 3 12 12 18 “Zig-Sağ” işlemi 6’yı köke taşır.

Bir sonraki işlemde 6’ya O(1) de erişilebilir.

AVL ağacındaki sağ dönme işlemi ile benzerdir.

35

• •

Splay Ağaçları: Zig-Zig İşlemi

“Zig-Zig” işlemi aynı türde 2 tane dönme işlemi içerir.

Örneğin erişilen elemanın 3 olduğu düşünülürse.

1 3 6 4 15 12 18

Zig-Sağ

6

Zig-Sağ

1 3 4 15 12 18 1 3 4 6 15 12 18 • • “zig-zig” işlemi ile birlikte 3 köke taşınmış oldu.

Not: Aile - ata arasındaki döndürme önce yapılıyor.

36

• •

Splay Ağaçları: Zig-Zag İşlemi

“Zig-Zag” işlemi farklı türde 2 tane dönme işlemi içerir.

Örneğin erişilen elemanın 3 olduğu düşünülürse.

• • 15

Zag-Sol

15

Zig-Sağ

12 6 18 12 18 6 15 3 10 14 18 3 12 6 14 10 14 3 10 “zig-zag” işlemi ile birlikte 3 köke taşınmış oldu.

AVL ağacındaki LR dengesizliği sonra sağ dönme) ni düzeltmek için kullanılan işlemler ile aynıdır.(önce sol dönme, daha 37

• •

Splay Ağaçları: Zag-Zig İşlemi

“Zag-Zig” işlemi farklı türde 2 tane dönme işlemi içerir.

Örneğin erişilen elemanın 17 olduğu düşünülürse.

• • 15

Zig-Sağ

15

Zag-Sol

17 6 20 6 17 15 20 6 16 18 17 30 16 20 18 30 16 18 “zag-zig” işlemi ile birlikte 17 köke taşınmış oldu.

AVL ağacındaki RL dengesizliği kullanılan işlemler ile aynıdır.(önce sağ dönme, daha sonra sol dönme) ni düzeltmek için 38 30

• •

Splay Ağaçları: Zag-Zag İşlemi

“Zag-Zag” işlemi aynı türde 2 tane dönme işlemi içerir.

Örneğin erişilen elemanın 30 olduğu düşünülürse.

• • 15

Zag-Sol

20

Zag-Sol

30 6 20 15 30 20 6 17 25 40 15 25 17 30 6 17 25 40 “zag-zag” işlemi ile birlikte 30 köke taşınmış oldu.

Not: Aile - ata arasındaki döndürme önce yapılıyor.

40 39

• •

Splay Ağaçları: Zag İşlemi

“Zag” işlemi AVL ağacındaki gibi tek döndürme işlemidir.

Örneğin erişilen elemanın 15 olduğu düşünülürse.

15 6

Zag-Sol

6 18 3 15 12 18 3 12 • • • “Zag-sol işlemi 15’i köke taşır.

Bir sonraki işlemde 15’e O(1) de erişilebilir.

AVL ağacındaki sol dönme işlemi ile benzerdir.

40

Splay Ağacı Örnek: 40’a Erişildiğinde

80 80 70 85 70 30 40

(a)

50 45 60 55 75 40 75 65

Zig-zig

30 50 45 60 55 65

(b)

85

Zig-zig

40 30 70 50 45 60 55 65 75 80 85

(c)

41

Splay Ağacı Örnek: 60’a Erişildiğinde

40 30 70 50 45 60 55 65 75 80 85 40 30 60 45 50 55 70 65 75 80 85 60 40 70 30 45 50 55 65 75 80 85

Zig-zag zag (a) (b) (c)

42

Diğer işlemler Sırasında Splaying

Splaying sadece Arama işleminden sonra değil Ekle/Sil gibi değer işlemlerden sonra da uygulanabilir.

• Ekle X : X yaprak düğüme eklendikten sonra (BST işlemi) X’i köke taşı.

• Sil X : X’i ara ve köke taşı. Kökte bulunan X’i sil ve sol alt ağaçtaki en büyük elemanı köke taşı. • Bul X: Eğer X bulunamazsa aramanın sonlandığı yaprak düğümü köke taşı.

43

Splay Ağaçları - Özet

Splaying işlemi ile ağaç genel olarak dengede kalıyor.

• Analiz Sonucu: dir.

N boyutlu bir Splay ağacı üzerinde M tane işlemin çalışma süresi O(M log N) dir. Dolayısıyla tek bir işlem için çalışma zamanı O(log N) • Erişilecek elemanların derinliği çok büyük olsa bile, arama işlemlerinin süresi bir süre sonra kısalacaktır. Çünkü her bir arama işlemi ağacın dengelenmesini sağlıyor.

44

Örnek - 1

• 1, 2, …, • “ 6 6 elemanları sırası ile boş bir Splay ağacına ekleniyor.

• Oluşan ağacı çizerek gösteriniz.

" ya erişim nasıl olur.

• "1" e erişim sağlandıktan sonra ağacın yapısını çizerek gösteriniz.

45

Örnek - 2

• 1, 2, …, • “ 6 6 elemanları sırası ile boş bir AVL ağacına ekleniyor.

• Her bir eleman eklendiğinde oluşan ağaçları çizerek gösteriniz.

" ya erişim nasıl olur.

46