570 likes | 1.21k Views
AV L Ağaçları : M otivasyon. İ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.
E N D
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.
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. • Adelson-Velskii veLandis (AVL) ağaçları(1962) • Splay ağaçları (1978) • B-ağacıve diğerçok yönlü aramaağaçları (1972) • Red-Black ağaçları (1972) • Ayrıca Simetrikİkili B-Ağaçları(Symmetric Binary B-Trees) şeklinde de bilinir
AVL Ağaçları: Tanım • Tüm boş ağaç AVL ağacıdır. • Eğer T boş olmayan TLve TR ş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 ağacı şeklinde isimlendirilir. • TLve TRAVL ağaçları ise • hLve hR TLve TR nin yükseklikleri olmak üzere |hL – hR| <= 1 olmak zorundadır. TR TL hL+1 or hL-1 hL
0 6 -1 1 7 4 0 1 0 9 Kırmızı numaralar balans fartörüdür. 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ğ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. AVL Ağacı
AVL Ağaçları: Örnekler -1 6 0 0 6 6 1 10 2 4 0 -1 1 1 9 4 7 5 0 0 8 1 0 0 1 8 0 5 4 0 9 9 7 0 0 AVL Ağacı AVL Ağacı AVL Ağacı Değildir 0 -1 6 6 1 6 2 1 7 -2 4 9 2 4 0 0 9 4 -1 1 8 3 -1 0 7 1 0 0 1 5 0 1 0 0 8 9 AVL Ağacı AVL Ağacı Değildir AVL Ağacı Değildir Kırmızı numaralar balans faktörüdür.
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. class AVLDugumu{ intdeger; intyukseklik; AVLTDugumusol; AVLDugumusag; } x key left right height • x’in balans faktörü = x’in sol alt ağacının yüksekliği – x’in sağ alt ağacının yüksekliği • AVL ağaçlarında, “bf” sadece {-1, 0, 1} değerlerini alabilir.
0 6 -1 1 7 5 0 4 0 9 AVL Ağaçları • N düğümlü bir AVL ağacının yüksekliği daima O(log N) dir. • Peki nasıl? AVL Ağacı Yükseklik = O(logN) Kırmızı numaralar balans fartörüdür.
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 0 1 6 6 -1 2 1 -1 7 5 7 5 0 4 4 1 0 9 0 9 3 0 AVL Tree Artık AVL ağacı değil
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 • Balans faktörü düzelterek köke doğru çık. • Eğer düğümün balans faktörü 2 veya -2 ise ağaç bu düğüm üzerinde döndürülerek düzeltilir. 1 6 2 -1 7 5 4 1 9 0 3 0
Denge Sağlama: Örnek Ekle 3 Döndürme 0 1 0 6 6 6 2 -1 -1 1 -1 7 7 5 5 7 0 4 0 4 4 1 5 3 0 0 9 9 0 0 9 0 3 0 AVL AVL AVL Değil • Yenidüğümüeklediktensonra • Balansfaktörüdüzelterekkökedoğruçık. • Eğerdüğümünbalansfaktörü 2 veya -2 iseağaçbudüğümüzerindedöndürülerekdüzeltilir.
AVL Ağacı - Ekleme (1) P Pivot: bf2veya-2 P L R A B C D • Pdüğümünün dengeyi bozan düğüm olduğu düşünülürse. • Ppivotdüğüm şeklinde isimlendirilir. • Eklemeden sonra köke doğru çıkarken bf’nin 2 veya -2 olduğu ilk düğümdür.
AVL Ağacı - Ekleme (2) P Pivot: bf2veya-2 P L R A B C D • 4 farklı durum vardır: • DışDurum(tek döndürme gerektiren) : • P’nin sol alt ağacının soluna eklendiğinde (LL Dengesizliği). • P’nin sağ alt ağacının sağına eklendiğinde(RR Dengesizliği) • İç Durum(2 kez döndürme işlemi gerektiren) : • P’nin sol alt ağacının sağına eklendiğinde (RL Dengesizliği) • P’nin sağ alt ağacının soluna eklendiğinde(LR Dengesizliği)
LLDengesizliği & Düzeltme Döndürme L 2 P P 0 veya 1 L R R A A B B C C D D Ekleme işleminden sonra ağaç LL Düzeltmesinden sonra ağaç • LL Dengesizliği: P’nin sol alt ağacınınsolunaeklendiğimizde (A alt ağacınına) • P’nin bfsi2 • L’nin bfsi0 veya 1 • Düzeltme: P etrafında sağa doğru dönderme.
LLDengesizliği Düzeltme Örneği (1) Ekle(2) Döndür 1 1 1 1 10 10 10 10 2 4 4 1 4 1 20 20 20 0 0 0 0 20 0 0 3 3 3 3 0 0 2 1 4 0 0 Başlangıçtaki AVL Ağacı LL Düzeltmesi yapıldıktan sonra AVL ağacı 2 2 0 0 Pivotun belirlenmesi 2 eklendikten sonra ağacın durumu Dengesizliğin türünün belirlenmesi Balans faktörü düzelterek köke doğru ilerle • LL Dengesizliği: • P(4)’ün bfsi2 • L(3)’ünbfsi0 veya 1
LLDengesizliği Düzeltme Örneği (2) Ekle(2) Döndür 1 2 10 1 10 10 0 4 4 0 1 0 4 20 4 0 20 20 0 0 3 10 0 1 5 3 0 3 3 0 5 5 0 1 0 0 5 20 0 0 2 0 Başlangıçtaki AVL Ağacı 2 2 0 0 LL Düzeltmesi yapıldıktan sonra AVL ağacı Pivotun belirlenmesi 2 eklendikten sonra ağacın durumu Dengesizliğin türünün belirlenmesi Balans faktörü düzelterek köke doğru ilerle • LL Dengesizliği: • P(4)’ün bfsi2 • L(3)’ünbfsi0 veya 1
RRDengesizliği & Düzeltme Döndür R -2 P P L 0 veya -1 R L A A B B C C D D Ekledikten sonra RR Düzeltmesi yapıldıktan sonra • RR Dengesizliği: P’ninsağ alt ağacınınsağınaeklendiğinde (D alt ağacına eklendiğinde) • P bf=-2 • R bf= 0 veya -1 • Düzeltme: P etrafındasala doğrudönderme
RRDengesizliği Düzeltme Örneği (1) -1 Döndür 10 Ekle(40) 10 10 -1 -1 10 -1 -1 -2 0 30 4 0 4 4 20 20 0 0 4 -1 20 0 0 40 20 -1 0 30 30 0 30 0 Başlangıçtaki AVL Ağacı RRDüzeltmesi yapıldıktansonra AVL ağacı 40 40 0 0 40eklendiktensonra ağacındurumu Pivotun belirlenmesi Dengesizliğintürününbelirlenmesi Balansfaktörüdüzelterekkökedoğruilerle • RR Dengesizliği: • P(20) bf= -2 • R(30) bf =0 veya -1
RRDengesizliği Düzeltme Örneği (2) -2 Döndür 10 20 10 -1 0 Ekle(40) 4 -1 20 0 4 0 0 -1 20 0 10 30 -1 30 15 0 4 15 30 15 0 0 0 0 40 0 Başlangıçtaki AVL Ağacı 40 0 RR Düzeltmesi yapıldıktansonra AVL ağacı 40eklendiktensonra ağacındurumu Dengesizliğintürününbelirlenmesi Balansfaktörüdüzelterekkökedoğruilerle ve 10’u pivot olarak belirle • RR Dengesizliği: • P(10) bf= -2 • R(20) bf =0 veya -1
LRDengesizliği & Düzeltme 1. Döndürme 2 2. Döndürme P P LR 2 R 2 -1 L R LR P L L 1 LR R C C C D D D A A A Eklemedensonraağaç 1. Döndürmeden sonra ağaç B1 B2 B1 B2 B1 B2 LR Düzeltmesinden sonra • LR Dengesizliği: P’nin sol alt ağacının sağınaeklendiğinde (LR ağacına) • P bf=2 • L bf=-1 • Düzeltme: L & P etrafında 2 kez döndürme
LR Dengesizliği Düzeltme Örneği 2 Döndür 1 Ekle(5) 0 7 10 10 2 4 4 0 10 0 -1 20 4 -1 0 20 0 1 3 5 0 3 3 0 20 7 0 0 0 0 7 1 LR Düzeltmesinden sonra ağacın durumu Başlangıçtaki AVL Ağacı 5 0 2 eklendikten sonra ağacın durumu Balansfaktörüdüzelterekkökedoğruilerle ve 10’u pivot olarak belirle Dengesizliğintürününbelirlenmesi • LR Dengesizliği: • P(10) bf=2 • L(4) bf =-1
RL Dengesizliği & Düzeltme RL -2 P 1. Döndürme -2 2. Döndürme P P R 2 1 R 2 L RL L L 1 R RL D D D B A B A B A Eklemedensonraağaç RL Düzeltmesinden sonra 1. Döndürmeden sonra C1 C2 C1 C2 C1 C2 • RL Dengesizliği: P’nin sağ alt ağacının solunaeklendiğinde (RL alt ağacına) • P bf=-2 • R bf=1 • Düzeltme:R & P etrafında 2 kez döndürme.
RL Dengesizliği Düzeltme Örneği -2 Ekle(17) Döndür 15 0 10 -1 10 2 4 0 1 20 1 1 10 20 4 0 20 0 15 30 0 4 -1 30 0 0 17 15 30 0 0 0 Başlangıçtaki AVL Ağacı 17 0 RL Düzeltmesi yapıldıktansonra AVL ağacı 17eklendiktensonra ağacındurumu 1 Balansfaktörüdüzelterekkökedoğruilerleve 10’u pivot olarakbelirle Dengesizliğintürününbelirlenmesi • RL Dengesizliği: • P(10) bf= -2 • R(20) bf=1
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.
Silme Örneği (1) Sil(20) Döndür 1 1 2 10 10 10 -1 4 4 0 20 4 0 4 0 10 0 3 1 0 5 0 5 3 0 5 3 5 0 3 0 0 0 0 LL Düzeltmesinden Sonra AVL Ağacı 20 silindikten sonra Ağacın durumu 10’un pivot olarak belirlenmesi Başlangıçtaki AVL Ağacı Dengesizliğin türünün belirlenmesi Balans faktörü düzelterek köke doğru ilerle • LL Dengesizliği: • P(10)’ün bfsi2 • L(4)’ünbfsi0 veya 1
Silme Örneği (2) Sil(20) Döndür 1 1 2 10 10 10 0 5 2 4 -1 20 4 -1 4 10 0 -1 4 0 0 1 LR Düzeltmesinden sonra AVL Ağacı 5 0 5 5 0 0 20 silindikten sonra Ağacın durumu 10’un pivot olarak belirlenmesi Başlangıçtaki AVL Ağacı Balans faktörünü düzelterek köke doğru ilerle Dengesizliğin türünün belirlenmesi • LRDengesizliği: • P(10) bf = 2 • L(4) bf =-1
Silme Örneği (3) 1 15 1 10 Sil(10) -1 5 20 1 -1 20 5 1 -1 30 1 3 7 -1 -1 30 15 1 3 7 0 -1 2 1 4 0 40 8 0 0 2 1 4 0 40 8 0 0 1 0 10 silindikten sonra 10 ve 15(sağ alt ağaçtaki en küçük eleman) yer değiştirdi ve 15 silindi. 1 0 Başlangıçtaki AVL Ağacı Balans faktörü düzelterek köke doğru ilerle
Silme örneği (3) - devam 1 1 15 15 Döndür -2 5 30 1 0 5 20 1 20 0 40 1 7 3 -1 0 -1 30 1 3 7 -1 2 1 4 0 2 8 1 0 4 0 40 8 0 0 1 0 1 0 RR Dengesizliği düzeltildikten sonra 20’nin pivot olarak seçilmesi Dengesizliğin türünü belirle Yukardaki AVL ağacı mıdır? • RR Dengesizliği: • P(20) bf= -2 • R(30) bf=0 veya -1 Balans faktörü düzelterek köke doğru ilerle.
Silme Örneği (3) - devam 2 15 5 0 Döndür 5 30 1 0 1 3 0 15 20 2 0 40 1 7 1 3 0 7 4 -1 0 -1 30 0 2 1 1 0 4 0 8 20 0 0 8 40 0 0 1 0 Düzeltilmiş AVL ağacı 15’in pivot olarak belirlenmesi Dengesizliğin türünü belirle • LL Dengesizliği: • P(15) bf=2 • L(5) bf= 0 veya 1
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.
AVL Ağaçları - Özet • AVL Ağaçlarının Avantajları • AVL ağacı devamlı dengeli olduğu için Arama/Ekleme/Silme işlemi O(logN) yapılır. • Düzeltme işlemi algoritmaların karmaşıklığını etkilemez. • AVL Ağaçlarının Dezavantajları: • Balans faktörü için ekstra yer gereklidir. • 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ı
Splay Ağaçları • Splay ağaçları ikili arama ağaç yapılarından birisidir. • 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.
Örnek Kök Kök • 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. 15 12 Bul(12) den sonra 2 18 15 6 6 Splay ana düşünce: Döndürme kullanarak 12’yi köke getir. 1 3 14 12 9 18 3 9 14 12 arandıktan sonra Başlangıçtaki ağaç
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 Xarası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 P P X X X X X X 2. zig-zig 1. zig 3. zig-zag 4. zag-zig 5. zag-zag 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
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ğ 18 6 15 3 12 3 18 12 • “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.
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. 3 15 6 Zig-Sağ Zig-Sağ 6 1 18 6 15 3 4 15 12 3 4 12 18 1 12 18 1 4 • “zig-zig” işlemi ile birlikte 3 köke taşınmış oldu. • Not: Aile - ata arasındaki döndürme önce yapılıyor.
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 Zig-Sağ 12 15 Zag-Sol 18 6 6 15 18 12 18 14 3 10 12 6 3 14 3 10 14 10 • “zig-zag” işlemi ile birlikte 3 köke taşınmış oldu. • AVL ağacındaki LR dengesizliğini düzeltmek için kullanılan işlemler ile aynıdır.(önce sol dönme, daha sonra sağ dönme)
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 15 Zag-Sol 17 Zig-Sağ 15 20 6 20 6 17 16 30 6 18 20 30 17 16 30 18 18 16 • “zag-zig” işlemi ile birlikte 17 köke taşınmış oldu. • AVL ağacındakiRL dengesizliğini düzeltmek için kullanılan işlemler ile aynıdır.(önce sağ dönme, daha sonra sol dönme)
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 20 Zag-Sol Zag-Sol 30 15 30 20 6 20 40 15 17 6 25 40 25 17 30 17 6 40 25 • “zag-zag” işlemi ile birlikte 30 köke taşınmış oldu. • Not: Aile - ata arasındaki döndürme önce yapılıyor.
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 18 6 15 3 18 12 12 3 • “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.
Splay AğacıÖrnek: 40’a Erişildiğinde 80 80 40 85 70 70 30 85 70 75 60 80 50 40 75 85 75 50 65 60 45 50 30 65 55 40 55 60 45 65 55 30 45 Zig-zig Zig-zig (c) (a) (b)
Splay AğacıÖrnek: 60’a Erişildiğinde 40 40 60 30 60 70 30 40 70 70 50 80 30 50 50 80 65 80 45 65 55 85 75 60 45 85 75 45 55 85 75 65 55 Zig-zag zag (a) (b) (c)
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şı.
Splay Ağaçları - Özet • Splaying işlemi ile ağaç genel olarak dengede kalıyor. • Analiz Sonucu: 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) dir. • 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.
Örnek - 1 • 1, 2, …, 6 elemanları sırası ile boş bir Splay ağacına ekleniyor. • Oluşan ağacı çizerek gösteriniz. • “6" ya erişim nasıl olur. • "1" e erişim sağlandıktan sonra ağacın yapısını çizerek gösteriniz.
Örnek - 2 • 1, 2, …, 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. • “6" ya erişim nasıl olur.