Sunuyu indir
1
AVL-Ağaçları (Trees)
2
Dengeli İkili Ağaç İkili arama ağacının dezavantajı, yüksekliğin N-1 kadar olabilmesidir. Bunun manası: Ekleme ve silme ve diğer bir çoğu işlem gerçekleştirilirken karmaşıklığın en kötü durumda O(N) olmasıdır. İstenen özellik ağacın yüksekliğinin küçük olmasıdır. N tane düğümü olan ikili ağacın yüksekliği en az (log N) ‘ dir. Bu nedenle, amaç ikili arama ağacının yüksekliğini O(log N) olarak tutabilmektir. Bu tür ağaçlara dengeli ikili ağaçlar denilir. Örnekler AVL ağaçlar, kırmızı-siyah ağaçlar (red-black tree)
3
AVL ağaçlar Bir düğümün yüksekliği
Bir yaprağın yüksekliği 1’dir. Null işaretçinn yüksekliği sıfırdır. İç bir düğümün yüksekliği çocuklarının maksimum yüksekliğinin 1 fazlasıdır. Not: Burada yapılan yükseklik tanımı daha önce yapılandan farklıdır.
4
AVL Ağaçlar AVL ağaç bir ikili ağaçtır ve aşağıdaki şartı sağlar
ağaçtaki herbir düğüm için, sol ve sağ altağaçların yükseklikleri en fazla 1 farklılık gösterir. AVL özelliği burada ihlal edilmiştir
5
AVL Ağaç x, yüksekliği h olan bir AVL ağacın kökü olsun.
Nh , yüksekliği h olan bir AVL ağaçtaki düğümlerin minimum sayısını göstersin. Açıkça görülebilir ki Ni ≥ Ni-1 Böylece Genel form aşağıdaki gibi olur. Sınır şartlar: N1=1 ve N2 =2. Buradan h = O(log Nh) manası çıkarılır. Böylece, AVL ağaç üzerinde yapılacak işlemlerin çoğu O(log N) zaman alır.
6
Dönüşler (Rotations) Ağaç yapısı değiştiği zaman (ekleme veya silme gibi), AVL ağaç özelliğini sağlama için ağacı değiştirmeliyiz. Bu işlem tek dönüş veya çift dönüş yapılarak sağlanır. Örnek: Tek dönüş y x x A y B C C B A Dönüşten sonra Dönüşten önce
7
Dönüşler Ekleme/ silme işlemi tek bir düğüm ekleme ve silme içerdiği için, bazı altağaçların yüksekliği 1 kadar artabilir / azalabilir. Böylece, bir x düğümünde, AVL ağaç özelliği ihlal edildiği zaman, bunun manası of left(x) ve right(x) kesinlikle 2 birim fark ediyor demektir. AVL ağaç özelliğini korumak için x’ e dönüpler uygulanacaktır.
8
Ekleme (Insertion) Öncelikle, sıradan bir ikili ağaca ekleniyormuş gibi yeni anahtarı yeni bir yaprak olarak ekle Yeni yapraktan köke kadar olan yolu takip et. Karşılaşılan herbir x düğümü için left(x) ve right(x) ‘in en fazla 1 farklılık içerip içermediğini kontrol et. Evet ise parent(x) ile devam et. Değilse, ya bir tek dönüş yada bir çift dönüş ile Eklem için, x düğümünde bir dönüş gerçekleştirdikten sonra, x’ in geri kalan ata sında herhangi bir dönüp gerçekleştirilmesine gerek yoktur.
9
Ekleme X, left(x) ve right(x) değerlerinin birden fazla farklı olduğu yerde bir düğüm olsun. x in yüksekliğini h+3 olduğunu varsayalım Bu halde 4 durum oluşur. left(x) in yüksekliği h+2 (yani right(x) in yüksekliği h) left(left(x)) in yüksekliği h+1 sol çocuk ile (üzerinde) tek dönüş right(left(x)) in yüksekliği h+1 sol çocuk ile çift dönüş right(x) yüksekliği h+2 (yani left(x) in yüksekliği h) right(right(x)) in yüksekliği h+1 sağ çocuk ile (üzerinde) tek dönüş left(right(x)) in yüksekliği h+1 sağ çocuk ile (üzerinde) çift dönüş
10
Tek dönüş A altağacına yeni bir anahtar eklendi.
x ‘ de AVL ağaç özelliği ihlal edildi. left(x) yüksekliği h+2 right(x) yüksekliği h.
11
Tek dönüş C altağacına yeni bir anahtar eklendi.
x ‘ de AVL ağaç özelliği ihlal edildi. Tek dönüş O(1) kadar zaman alır. Ekleme O(log N) kadar zaman alır.
12
x AVL Tree C y 8 B A Ekle 0.8 3 5 Dönüşten sonra 5 5 8 3 3 4 1 4 1 0.8
13
Çift dönüş B1 veya B2 alt ağaçlarına yeni anahtar eklendi.
x de AVL-özelliği ihlal edildi. x-y-z bir zig-zag şekli oluşturur Ayrıca sol-sağ dönüş olarak da isimlendirilir
14
Çift dönüş B1 veya B2 alt ağaçlarına yeni anahtar eklendi.
x de AVL-özelliği ihlal edildi. Ayrıca sağ-sol dönüş olarak da isimlendirilir
15
x y A z B C AVL Tree 8 ekle 3.5 4 5 Dönüşten sonra 5 5 8 3 3 4 1 4 1
16
Genişletilmiş örnek ekle 3,2,1,4,5,6,7, 16,15,14 3 3 3 5 Tek dönüş
Şekil 3 2 1 3 Şekil 4 3 2 Şekil 2 3 Şekil 1 2 1 3 4 Şekil 5 2 1 3 4 5 Şekil 6 Tek dönüş
17
5 Tek dönüş Şekil 10 6 2 1 4 5 3 Şekil 8 2 1 4 5 3 Şekil 7 Tek dönüş 4
18
4 2 6 7 1 3 5 16 Şekil 12 4 2 6 7 1 3 5 16 15 Şekil 13 Çift dönüş 4 2 6 15 1 3 5 16 7 Şekil 14
19
5 4 2 7 15 1 3 6 16 14 Şekil 16 4 2 6 15 1 3 5 16 7 14 Şekil 15 Çift dönüş
20
Silme Sıradan bir ikili ağaçta olduğu gibi x düğümünü sil. Daha sonra köke olan yol aşağıdaki gibi incelenir. Karşılaşılan herbir x düğümü için sol(x) (left(x)) ve sağ(x) (right(x)) altağaçlarının yükseklik farkının 1 olup olmadığına bak. Eğer fark 1 ise ebeveyn(x) üzerinden işleme devam et. Aksi takdirde x üzerinde gerekli dönüşleri yap. Eklemede olduğu gibi silmede de 4 durum vardır. Silme için, x’de dönüş yaptıktan sonra, x’in atalarında da (ancestor) dönüşler yapmamız gerekebilir. Bu işlemi köke ulaşana kadar uygularız.
21
Deletion Silme için tek dönüşler 4 duruma (iki durum yerine ) ayrılabilir. On closer examination: the single rotations for deletion can be divided into 4 cases (instead of 2 cases) Sol çocukla dönüşler için iki durum. Sağ çocukla dönüşler için iki durum.
22
Silme işlemindeki tek dönüşler
Her iki şekilde de , altağaç C’den bir düğüm silimiştir ve yükseklihi h’ a düşürmüştür. y’nin yüksekliği h+2 ‘ dir. A’nın yüksekliği h+1 olduğu zaman, B’nin yüksekliği ya h’dır yada h+1’dir. Her iki durumu da aynı tek dönüş düzeltebilir. Sol çocuk üzerinden dönüş
23
Silme işlemindeki tek dönüşler
Her iki şekilde de altağaaç A’dan bir düşüm silimiştir ve yükseklik h’ a düşmüştür. y’nin yüksekliği h+2’ dir. C’nin yüksekliği h+1 olduğu zaman, B’nin yükseklikliği h veya h+1 olabilir. Her iki durumu da tek dönüş düzeltebilir. rotate with right child
24
Silmedeki dönüşler Tek dönüş için 4 durum vardır fakat hepsini ayrı ayrı değerlendirmeye gerek olmayabilir. Çift dönüş için eklemede olduğu gibi 2 durum vardır. Dolayısı ile eklemede belirlendiği mantıkla silmede de hangi dönüşlerin gerçekleştirilebileceği belirlenebilir.
Benzer bir sunumlar
© 2024 SlidePlayer.biz.tr Inc.
All rights reserved.