Chapter 6 Transform-and-Conquer Copyright © 2007 Pearson Addison-Wesley. All rights reserved.
İkili Arama Ağaçları (BST) İkili arama ağaçları aşağıdaki özellikli ağaçlardır: K <K >K Örnek: 5, 3, 1, 10, 12, 7, 9
Dengeli arama ağaçları 2 yol var: yeni eleman eklendiğinde “çok dengesizlik” oluşursa denge ayarı yap AVL ağaçlar kırmızı siyah ağaçlar arama ağacında her düğüm (node) için birden fazla anahtara izin ver 2-3 ağaçlar 2-3-4 ağaçlar B-ağaçlar
AVL ağaçlar
Dengeli ikili arama ağaçları En kötü durumda bile yüksekliği O(log n) olan ağaçlara dengeli ağaçlar denir En iyi örneklerinden biri AVL (Adelson-Velsky ve Landis) ağaçlarıdır
AVL Ağaçları Tanım İkili ağaçtır. T boş olmayan ikili bir ağaç ve TL ve TR bu ağacın sol ve sağ altağaçları olsun. Aşağıdaki koşullar sağlanırsa T ağacına AVL ağacı denir: TL ve TR ikisi de AVL ağaçlarıdır ve |hL – hR| 1 dir, burada hL ve hR TL ve TR ağaçlarının yükseklikleridir
AVL arama ağaçları AVL arama ağaçları ikili arama ağaçlarıdır ve aynı zamanda AVL ağaçlarıdır
Denge faktörü (df) Her ekleme ve silme işlemi sonrasında her düğüm için denge faktörü (df) hesaplanır Bir x düğümü için df(x) aşağıdaki gibi tanımlanır: height(xleftChild) – height(xrightChild) AVL ağaçlarda her düğüm için df(x) –1, 0, veya 1 olur.
AVL ağaçları ve denge faktörü -1 1 10 40 30 45 20 35 25 60 7 3 8 1 5 Bu bir AVL ağacı mıdır? Her düğüm için denge faktörleri kaçtır? Bu bir AVL arama ağacı mıdır?
AVL arama ağaçlarına ekleme Eklemeden sonra AVL ağacı özelliği bozulabilir Yani ağaç dengesizleşebilir Bu durumda ağacın dengesini onarmamız gerekir, bunun için yapılan işleme döndürme( rotation) denir.
Dengesizlik çeşitleri Eklemeden sonra, A düğümünün denge faktörü –2 veya 2 ise A düğümünde aşağıdaki 4 çeşit dengesizlik oluşabilir : LL: yeni düğüm A nın sol alt ağacının sol alt ağacındadır. LR: yeni düğüm A nın sol alt ağacının sağ alt ağacındadır. RR: yeni düğüm A nın sağ alt ağacının sağ alt ağacındadır . RL: yeni düğüm A nın sağ altağacının sol alt ağacındadır.
Döndürme (Rotation) iki veya üç komşu düğüm için çocuk ve veli arasında dönüşüm (ağacın dengesini onarmak için)
Döndürme
Sol Döndürme Tanım İkili arama ağacını dengelemek için A düğümünü aşağı ve sola çeker . A‘nın sağ çocuğu A nın yerine geçer, A ise bu sağ çocuğun sol çocuğu olur, A nın sağ çocuğunun sol çocuğu A nın sağ çocuğu olur . 9 4 15 12 22 A 15 22 9 12 4 Left Rotation
Sol döndürme Root P A Q C B
Sol döndürme Root P A Q C B
Sol döndürme Root P A Q C B
Sol döndürme Root P A Q C B
Sol döndürme Root Q P C A B
Sol döndürme Root Q C P A B
Sağ döndürme Tanım İkili arama ağacını dengelemek için A düğümünü aşağı ve sağa çeker . A‘nın sol çocuğu A nın yerine geçer, A ise bu sol çocuğun sağ çocuğu olur, A nın sol çocuğunun sağ çocuğu A nın sol çocuğu olur . 15 22 9 12 4 A 9 4 15 12 22 Right Rotation
Sağ döndürme Root Q C P A B
Sağ döndürme Root Q C P A B
Sağ döndürme Root Q C P A B
Sağ döndürme Root Q C P B A
Sağ döndürme Root P Q A C B
Sağ döndürme Root P A Q C B
B’nin çocuğu olarak yeni düğüm eklenirse? Çift Döndürme B’nin çocuğu olarak yeni düğüm eklenirse? Root Q C P A B
Ağaç dengeli olacak mı?? Değilse sağ döndürme sorunu çözer mi ? Çift döndürmeler Ağaç dengeli olacak mı?? Değilse sağ döndürme sorunu çözer mi ? Root Q C P A B D
Çift döndürmeler Deneyelim…. Root Q C P A B D
Çift döndürmeler Deneme…. Root Q C P A B D
Çift Döndürmeler Deneme…. Root Q C P A B D
Çift döndürmeler Dengelendi mi?? Root P A Q C B D
Çift döndürmeler Sağ döndürmenin çalışmamasının nedeni sol altağacın pozitif denge faktörüne sahip olmasıdır. Root Q C P A B D
Sonra ise ağacın tamamında sağ döndürme yapılır. Çift döndürmeler Problemi çözmek için, önce sol alt ağaçta sol döndürme yapmak gerekir ki solun solu ağırlaşsın. Sonra ise ağacın tamamında sağ döndürme yapılır. Root Q C P A B D
Sol döndürme “sol alt ağaçta” Çift döndürmeler Sol döndürme “sol alt ağaçta” Root Q C P SubRoot A B D
Sol döndürme “sağ altağaçta” Çift döndürme Sol döndürme “sağ altağaçta” Root Q C P SubRoot A B D
Sol döndürme “sol altağaçta” Çift döndürmeler Sol döndürme “sol altağaçta” Root Q C P SubRoot A B D
Çift döndürmeler Şimdi “sol” altağacın “solu” ağırdır ve biz tüm ağaçta “sağ” döndürme yapıyoruz . Root Q C B P D A
Çift döndürmeler Root Q C B P D A
Çift döndürmeler Root Q C B P D A
Çift döndürmeler Root Q C B P D A
Çift döndürmeler Root Q C B P D A
Çift döndürmeler Root Q B D P C A
Çift döndürmeler B Root Q P C A D
Tek ve Çift Döndürmeler Tek döndürme: LL ve RR dengesizliği içindir Çift döndürme: LR ve RL dengesizliğinde kullanılır LR dengesizliği için önce RR döndürmesi sonra LL döndürmesi yap RL dengesizliği için önce LL sonra RR döndürmesi yap
1. Durum (RR sağın sağı) Bu şekilde X ve Y birer düğüm, A ve B ise birer altağaç olsun. A ağacının yüksekliği h(A)= h, B ağaçıcın yüksekliği h(B)= h, C ağacının yüksekliği h(C)=h+1 olsun. df(Y)=h-(h+1)=-1 ve df(X)=h-(h+2)=-2 olur X A Y C B
1. Durum (RR sağın sağı devam ) Bir önceki slayttaki şekilde dengesi bozulmuş düğümün denge faktörü -2 ve onun çocuğunun denge faktörü -1 dir. Bu durumda X e göre sol döndürme yapılır ve sonuç aşağıdaki gibi olur Y X C A B
2. Durum (LL solun solu) Aşağıdaki şekilde X ve Y birer düğüm, A,B,C birer altağaç ve h(A)=h+1, h(B)=h(C)=h olsun. Bu durumda df(Y)=1, df(X)=2 olur. X Y C A B
2. Durum (LL solun solu devam) Bir önceki slayttaki şekilde dengesi bozulmuş düğümün yani X in denge faktörü 2 ve çocuğu Y nin denge faktörü 1 dir. Bu durumda X e göre sağ döndürme yapılır ve yukarıdaki şekil oluşur. Y A X C B
3. Durum (RL sağın solu) X Y A D Z C B Aşağıdaki şekilde X, Y, Z birer düğüm, A,B,C,D birer alt ağaç olsun. Yükseklikler h(A)=h(C)=h(D)=h ve h(B)=h-1 olsun. Bu durumda df(X)=-2, df(Y)=1 ve df(Z)=-1 olur. X Y A D Z C B
3. Durum (RL sağın solu devam) df(X)=-2, df(Y)=1 ve df(Z)=-1 durumunda çift döndürme yapılır ve aşağıdaki sonuca ulaşılır (Burada önemli olan -2 den sonra 1 gelmesidir yani zıt işaretler olmasıdır) Z Y X D A B C
3. Durum (RL sağın solu devam) Peki bu sonuca nasıl ulaşıldı? Önce Y den sağ döndürme yapıldı ve aşağıdaki şekil oluştu Sonra da X den sol döndürme yapıldı X Z A Y B D C
4. Durum (LR solun sağı) X D Y A Z B C Aşağıdaki şekilde X, Y, Z birer düğüm, A,B,C,D birer alt ağaç olsun. Yükseklikler h(A)=h(B)=h(D)=h ve h(C)=h-1 olsun. Bu durumda df(X)=2, df(Y)=-1 ve df(Z)=1 olur. X D Y A Z B C
4. Durum (LR solun sağı devam) df(X)=2, df(Y)=-1 ve df(Z)=1 durumunda çift döndürme yapılır ve aşağıdaki sonuca ulaşılır. (Burada önemli olan 2 den sonra -1 gelmesidir yani zıt işaretler olmasıdır) Z X Y D A B C
4. Durum (LR solun sağı devam) Peki bu sonuca nasıl ulaşıldı? Önce Y den sol döndürme yapıldı ve aşağıdaki şekil oluştu Sonra da X den sağ döndürme yapıldı X D Z Y C A B
AVL Ağacı döndürmeler Tek döndürmeler: ekle 14, 15, 16, 13, 12, 11, 10 Önce 14 ve 15 ekle: 14 15 Şimdi16 yı ekle
AVL ağacı döndürmeler Tek döndürmeler: 16 eklenmesi AVL özelliğini bozuyor 14 15 16 Döndürme gereksinimi var.
16 eklenmesi AVL özelliğini bozuyor: AVL Ağacı döndürmeler Tek döndürmeler: 16 eklenmesi AVL özelliğini bozuyor: 14 15 16 Döndürme gerekir.
AVL ağac döndürmeleri Tek döndürmeler: Döndürme : 14 15 16
Döndürme sonucu AVL özelliği onarıldı: AVL Ağaç döndürmeleri Tek döndürme: Döndürme sonucu AVL özelliği onarıldı: 15 14 16
AVL Ağaç döndürmeleri Tek döndürme: 13 ve 12ekle AVL özelliği bozuldu. 15 14 16 13 12 AVL özelliği bozuldu.
AVL ağaç döndürmeler Tek döndürmeler: Döndürme çeşidi?: 15 14 16 13 12
AVL ağaç döndürmeler Tek döndürmeler: 15 13 16 12 14 Ekle11.
AVL ağaç döndürmeler Tek döndürme: AVL özelliği bozuldu 15 13 16 12 14 11 AVL özelliği bozuldu
AVL ağaç döndürmeleri Tek döndürmeler: Döndürme çeşidi: 15 13 16 12 14 11
AVL ağaç döndürmeleri Tek döndürmeler: 13 12 15 16 14 11 ekle 10.
AVL ağaç döndürmeleri Tek döndürmeler: AVL özelliği bozuldu 13 12 15 16 14 11 10 AVL özelliği bozuldu
AVL ağaç döndürmeleri Tek döndürmeler: Döndürme çeşidi?: 13 12 15 16 14 11 10
AVL ağaç döndürmeleri Tek döndürmeler: 13 11 15 10 12 14 16 .
AVL ağaç döndürmeler Çift döndürmeler: ekle 1, 2, 3, 4, 5, 7, 6, 9, 8 Ekle 1 ve 2: 13 11 15 10 12 14 16
AVL ağaç döndürmeleri Çift döndürmeler: AVL özelliği bozuldu 13 11 15 16 14 10 12 1 2
AVL ağaç döndürmeleri Çift döndürmeler: Döndürme çeşitleri: 13 11 15 16 14 12 10 1 2
AVL özelliği onarıldı: AVL ağaç döndürmeleri Çift döndürmeler: AVL özelliği onarıldı: 13 15 11 2 12 14 16 1 10 Ekle 3.
AVL ağaç özellikleri Çift föndürmeler: AVL özelliği bozuldu: 13 11 15 16 2 12 14 1 10 3
AVL ağaç döndürmeleri Çift döndürmeler: Döndürme çeşitleri: 13 11 15 2 12 16 14 1 10 3
AVL ağaç döndürmeleri Çift Döndürmeler: AVL dengesi onarıldı: Ekle 4. 13 10 15 2 11 14 16 1 3 12 Ekle 4.
AVL ağaç döndürmeleri Çift döndürmeler: AVL özelliği bozuldu 13 10 15 2 14 16 11 1 12 3 4
AVL ağaç döndürmeleri Çift döndürmeler: Döndürme çeşidi: 13 10 15 16 2 11 14 1 12 3 4
AVL Ağaç döndürmeleri Çift döndürmeler: Ekle 5. 10 13 2 15 1 11 3 12 14 16 4 Ekle 5.
AVL Ağaç döndürmeleri Çift döndürmeler: AVL özelliği bozuldu. 10 2 13 15 1 11 3 12 14 16 4 5 AVL özelliği bozuldu.
AVL ağaç döndürmeleri Tek döndürme: Döndürme çeşidi: 10 13 2 15 1 11 3 12 14 16 4 5
AVL ağaç döndürmeleri Tek döndürme: AVL dengesi onarıldı: ekle7. 10 13 2 15 1 11 4 12 14 3 5 16 ekle7.
AVL ağaç döndürmeleri Tek döndürme: AVL özelliği bozuldu. 10 13 2 15 1 11 4 12 14 16 3 5 7
AVL ağaç döndürmeleri Tek döndürme: Döndürme çeşidi?: 10 13 2 15 1 11 4 12 14 16 3 5 7
AVL ağaç döndürmeleri Çift döndürme: AVL dengesi onarıldı. ekle 6. 10 13 4 15 2 11 5 12 14 16 7 1 3 ekle 6.
AVL ağaç döndürmeleri Çift döndürme: AVL özelliği bozuldu. 10 13 4 15 2 11 5 12 14 16 7 1 3 6
AVL ağaç döndürmeleri Çift döndürmeler: Döndürme çeşidi?: 10 13 4 11 15 2 5 12 14 16 7 1 3 6
AVL ağaç döndürmeleri Çift döndürmeler: AVL dengesi onarıldı. 10 13 4 11 15 2 6 12 14 16 1 3 5 7 ekle 9 ve 8.
AVL ağaç döndürmeleri Çift döndürmeler: AVL özelliği bozuldu. 10 13 4 15 2 11 6 12 14 16 1 3 5 7 9 8
AVL ağaç döndürmeler Çift döndürmeler: Döndürme çeşidi?: 10 13 4 15 2 11 6 12 14 16 1 3 5 7 9 8
Ağaç neredeyse tam dengeli bir ağaçtır AVL ağaç döndürmeler Son ağaç: Ağaç neredeyse tam dengeli bir ağaçtır 10 13 4 15 2 11 6 12 14 16 1 3 5 8 7 9
AVL ağacı oluşturma AVL ağacı oluştur liste: 5, 6, 8, 3, 2, 4, 7
Örnek devamı
AVL ağacı yüksekliği AVL ağacında N düğüm varsa, yükseklik en fazla 1.44log(N+2)-0.328 olur. Pratikte log N den bir az çoktur. Örnek: AVL ağaçı 9 yüksekli 143 düğümlü
AVL Ağacı yüksekliği Düğümlerim minimum sayısı S(h), yükseklik h ise S(0)=1, S(1)=2, S(h) = S(h-1) + S(h-2) +1 Fibonacci sayıalrı: (F(0) = F(1) = 1, F(n)=F(n-1) + F(n-2)) İddia: S(h) = F(h+2) -1 her h ≥ 0 için. İspat: Tümevarım. Temel durum; S(0)=1=F(2)-1=2-1, S(1)=2=F(3)-1=3-1. Tüm h , h-1,h-2,... için doğru olsun. Bu durumda S(h+1) = S(h) + S(h-1) + 1 = F(h+2) -1 +F(h+1) -1 + 1 (by inductive hypothesis) = F(h+3) – 1 Fibonacci sayıları
AVL ağacı yüksekliği