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 kalanM/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.