B Ağaçları

Download Report

Transcript B Ağaçları

B+-Ağaçları
AVL Trees / Slide 2
İkincil Depolama için İndeksleme

AVL ağacı, eğer bütün yapı ana hafızaya sığabilirse
iyi bir indeksleme yapısıdır.


Bir işaretçiyi bulmak veya güncellemek için bir hafıza birimi
(döngüsü) yeterlidir.
Eğer veri hafızaya sığamayacak kadar büyükse, AVL
ağacının performansı ciddi ölçüde düşer


Bir işaretçiyi bulma veya güncelleme diske erişimi gerektirir.
Kökten ağaca kadar gezme diske log2 n zamanı kadar
erişmeyi gerektirir.
= 1048576 = 220 olduğu zaman 20 disk erişimi gerekir.
7200rpm hızla dönen bir disk için, bu işlem 0.166 saniye alır.
10 arama işlemi 1 saniyeden fazla zaman alacaktır. Bu oldukça
yavaştır.
n
AVL Trees / Slide 3
B+ Ağacı

İşlemci çok hızlı olduğu için, daha çok cpu komutu
kullanarak diske erişimi azaltmak önemlidir.

fikir: ağacın düğümlerinin çok çocuğa sahip olmasına
izin verilmelidir.

Eğer ağaçtaki herbir iç düğüm M çocuğa sahip olursa,
ağacın yüksekliği log2 n yerine logM n olacaktır.


Örnek olarak, eğer M = 20, öyleyse log20 220 < 5.
Böylece, arama işlemini önemli ölçüde
hızlandırabiliriz.
AVL Trees / Slide 4
B+ Ağacı
Pratikte: Herbir iç düğüm için aynı sayıda çocuk
tutmak imkansızdır.
 M ≥ 3 olan bir B+-ağaç M-ary ağaçtır ve aşağıdaki
özellikleri sağlar :



Herbir iç düğüm en fazla M çocuğa sahiptir.
Herbir iç düğüm, kök hariç, M/2-1 ve M-1 arasında
anahtara sahiptir




Bu ağacın ikili ağaca dönüşmemesini sağlar.
Herbir düğümdeki anahtar sıralıdır.
Kök ya bir yaprağa sahiptir yada 1 ve M-1 arası kadar
anahtara sahiptir.
Veri öğeleri yapraklarda depolanır. Bütün yapraklar aynı
derinliktedir. Herbir yaprak L/2-1 ve L-1 arası kadar veri
öğesi içerir. Bazıları için L (genellikle L << M, fakat çoğu örnekte M=L
olduğu varsayılacak)
AVL Trees / Slide 5
Örnek



Burada, M=L=5
Kayıtlar yapraklarda depolanmıştır, fakat burada sadece
anahtarlar gösterilmektedir.
İç düğümlerde, sadece anahtarlar sıralıdır (bunlara ayırıcı
anahtarlar da denilir.)
AVL Trees / Slide 6
M=L=4 için bir B+ ağaç



Bu durumda sol ve sağ çocuk işaretçilerinden hala sözedebiliriz
Örnek, N in sol çocuk işaretçisi, J nin sağ çocuk işaretçisi ile
aynıdır.
İç düğümlerin sol alt ağaç ve sağ alt ağaçlarından söz edilebilir
AVL Trees / Slide 7
B+ Ağaç

İç düğümlerde hangi anahtarlar depolanır.

Bunu yapmanın değişik yolları vardır. Farklı kitaplar
farklı yöntemler gösterir.

Bu ders kapsamında aşağıdaki mantık kullanılacaktır:


bir iç düğümün içindeki anahtar i, kendisinin i+1 altağacındaki
en küçük anahtardır. (örnek. Anahtar i nin sağ altağacı)
Bu mantık takip edilse bile, aynı kümedeki elemanlar
için tek bir B+-ağaç yapısı yoktur.
AVL Trees / Slide 8
B+ ağaç

Herbir düğüm/yaprak, bir I/O bloğunun içerisine
sığması için tasarlanmıştır. Bir I/O blok oldukça fazla
veri tutabilir. Böylece, bir iç düğüm çok fazla sayıda
anahtar (çok büyük M değeri gibi) tutabilir. Bu ağacın
birkaç katmanının olduğunu ifade eder ve birkaç disk
erişii ile arama, ekleme veya silme işlemi yapılabilir.

B+-ağacı ticari veritabanlarında kullanılan popüler bir
yapıdır. Aramayı daha fazla hızlandırmak için B+ağacın ilk bir veya iki katmanı hafızada tutulur.

B+-ağacın dezavantajı düğümlerin çoğunun, çoğu
zaman M-1 den daha az anahtar ihtiva etmesidir. Bu
ciddi alan israfına yolaçabilir. Böylece, hafızada
tutulan veri için iyi bir indeksleme yapısı değildir.
AVL Trees / Slide 9
Arama
 Varsayalım
ki K anahtarı bulunmak isteniyor.
Koyu ile gösterilen yok takip edilir.
AVL Trees / Slide 10
Arama
x aranacak olan key olsun.
 Kökten aramaya başlanır.
 Eğer bir iç düğüm v ile karşılaşılınırsa v’de depolanan
anahtarlarda x’ i lineer olarak ara.





Eğer v’ de x < Kmin ise, Kmin ’in sol çocuk işaretçisinden devam et.
Eğer v’ de ard arda olan Ki için Ki+1 Ki ≤ x < Ki+1 , Ki+1 in sol çocuk
işaretçisinden devam et.
Eğer v’de x ≥ Kmax ise, Kmax ın sağ çocuk işaretçisinden devam et
Eğer leaf v ile karşılaşırsak, v’de depolanan anahtarlar
içinden x ‘ i lineer arama ile ararız. Eğer bulunursa, bütün
kayıdı döndeririz, yoksa bulunamadı diye rapor edilir.
AVL Trees / Slide 11
Ekleme
 Farzadelimki
K anahtarını ve bu anahtarla ilgili
kayıdı ekmek istiyoruz.
 Arama işlemini kullanarak anahtar K’yı ara.
 Bu bizi x yaprağına götürecektir
 K’ yı x’e ekle

Düğümlerin bölünmesi (AVL ağaçlardaki dönüşler
yerine) B+-ağaçların özelliklerini sağlamak için
kullanılır [sonraki slayt]
AVL Trees / Slide 12
Bir yaprağa Ekleme
Eğer x yaprağı < M-1 anahtar içerirse, x’e K’yı ekle (x
düğümündeki doğru yere eklenecek)
 Eğer x önceden dolu ise (yani M-1 anahtar
içeriyorsa). X’i böl





x’i ebeveyninden ayır.
K yı x’e ekle, x’ de K için alan varmış gibi davran. Şimdi x M
anahtara sahip.
K’yı ekledikten sonra, x’i xL ve xR olarak iki parçaya böl, xL
M/2 en küçük anahtarları içerecek, ve xR kalanM/2
anahtarı içerecek. J xR daki en küçük anahtar olsun.
xL ve xR nin ebeveyni olarak J yi ata ve x’in ebeveynine J yi
ve yeni çocukları ekle
AVL Trees / Slide 13
Dolu olmayan yaprağa ekleme
AVL Trees / Slide 14
Yaprağın bölünmesi: T’ yi ekle
AVL Trees / Slide 15
Devamı
AVL Trees / Slide 16
İki yaprağı yazmak için iki disk erişimi olur, ebeveyni
güncellemek için bir disk erişim olur.
L=32 için, 16 ve17 eleman içeren yapraklar oluşturulur. Başka
bölme işlemi olmaksızın 15 daha fazla ekleme yapılabilir.

AVL Trees / Slide 17
Başka bir örnek:
AVL Trees / Slide 18
Devamı
=> Need to split the internal node
AVL Trees / Slide 19
Bir iç düğümü bölme
Dolu iç düğüm x içine K anahtarının eklenmesi:
 x’i ebeveynınden ayır.
 K’yı ve onun sol ve sağ çocuk işaretçilerinin
ekle, Bu durumda x M anahtara sahiptir.
 xL and xR olarak x’i 2’y2 böl, xL ( M/2 - 1 ) en
küçük ahahtarları içerecektir, ve xR M/2 en
büyük anahtarları içerecektir. (M/2)inci
anahtar J, xL or xR ın içine yerleştirilmemiştir.
 J yi xL ve xR‘ın ebeveyni yap ve x’ın eski
ebeveynine J’ yı ve onun çocuk işaretçilerini
ekle.
AVL Trees / Slide 20
Örnek: İç düğümü bölme
AVL Trees / Slide 21
Devamı
AVL Trees / Slide 22
Sonlandırma
 Bölme
dolu iç düğümlerle karşılaştığımız
sürece devam edecektir.
 Eğer bölünen x’in ebeveyni yoksa yeni bir kök
oluşturulur ve yeni kök J’yi ve onun iki
çocuğunu içerir.