15.06.2015 Views

Dosya organiz - Trakya Üniversitesi

Dosya organiz - Trakya Üniversitesi

Dosya organiz - Trakya Üniversitesi

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

DOSYA ORGANİZASYONU<br />

ÖZLEM AYDIN<br />

TRAKYA ÜNİVERSİTESİ<br />

BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ<br />

Ağaç Yapıları


Sunum planı<br />

Genel kavramlar<br />

İkili ağaç<br />

İkili arama ağacı<br />

AVL Tree<br />

B-Tree


Genel Kavramlar<br />

Bir ağaç yapısı örneği


Genel Kavramlar<br />

Düğüm (node) : Ağacın her bir elemanına düğüm adı verilir. (A, B, C)<br />

Kök (root) : En üst seviyedeki tek düğümdür. (A bilgisini içeren düğüm.)<br />

Çocuk (child) : Bir düğümün sol ve sağ bağı aracılığı ile bağlandığı<br />

düğümler o düğümün çocuklarıdır. (B ve C, A'nın çocuklarıdır.)<br />

Aile (parent) : Bir düğüm, sağ ve sol bağları ile bağlandığı düğümlerin<br />

ailesidir. (A düğümü, B ve C düğümlerinin ailesidir.)<br />

Bir düğümün düzey (level) veya derinliği (depth) : Bir düğümün kök<br />

düğümden olan uzaklığıdır. (D düğümünün düzeyi veya derinliği 2'dir.)


Genel Kavramlar<br />

Ağacın derinliği (depth of tree) : En derindeki yaprağın derinliği veya<br />

yüksekliği<br />

(Verilen ağacın derinliği 3'tür. )<br />

Yaprak (leaf) : Herhangi bir çocuğu bulunmayan düğümlere yaprak adı<br />

verilir. (D,G,H,I)<br />

Kardeş (sibling, brother) : Aynı aileye sahip düğümlerdir.<br />

(B ile C kardeştir. D ile E kardeştir. H ile I kardeştir.)


İkili Ağaç (Binary Tree)<br />

Düğümlerinin en fazla 2 çocuğa sahip olduğu<br />

ağaçlardır.<br />

a<br />

b<br />

c<br />

d<br />

e<br />

f<br />

g h i<br />

j<br />

k<br />

l


İkili ağaç üzerinde dolaşma (traverse)<br />

<br />

Dolaşma (traverse), ağaç üzerindeki herhangi bir düğüme erişmek için<br />

ağaç üzerinde gezmedir.<br />

1. Kökten başlayarak dolaşma (Preorder (depth-first order) traverse)<br />

I. Köke uğra<br />

II.<br />

III.<br />

Sol alt ağacı preorder olarak dolaş.<br />

Sağ alt ağacı preorder olarak dolaş.<br />

A<br />

B<br />

C<br />

D E F G<br />

A B D E C F G


İkili ağaç üzerinde dolaşma (traverse)<br />

2. Sıralı Dolaşma (Inorder (Symmetric<br />

order) Traverse)<br />

I. Sol alt ağacı inorder'a göre dolaş<br />

II. Köke uğra<br />

III. Sağ alt ağacı inorder'a göre dolaş.<br />

3. Sondan başlayarak dolaşma<br />

(Postorder Traverse)<br />

I. Sol alt ağacı postorder'a göre dolaş<br />

II. Sağ alt ağacı postorder'a göre dolaş.<br />

III. Köke uğra<br />

A<br />

A<br />

B<br />

C<br />

B<br />

C<br />

D E F G<br />

D B E A F C G<br />

D E F G<br />

D E B F G C A


İkili arama ağaçları (Binary search tree)<br />

<br />

<br />

İkili ağaçların özel bir halidir.<br />

İkili arama ağaçları, her bir düğümün solundaki tüm<br />

düğümler kendisinden küçük, sağındakiler de kendisinden<br />

büyük olacak şekilde oluşturulurlar.


İkili arama ağaçlarında arama<br />

<br />

9 anahtarının aranması:<br />

I. 9 ile kökteki 15 karşılaştır. 96 olduğundan sağ alt ağaca git.<br />

III. 9 ile 7 karşılaştır. 9>7 olduğundan sağ alt ağaca git.<br />

IV. 9 ile 13 karşılaştır. 9


İkili arama ağaçları<br />

<br />

<br />

İndeks sıralı dosyalarda ağaç yapısı indeks amacıyla<br />

kullanılırken, kayıtlar yapraklarda bulunur.<br />

İkili arama ağaçlarında kayıtlar hem yapraklarda hem<br />

düğümlerde tutulurlar.<br />

İndeks<br />

Veri<br />

İndeks ve<br />

veri<br />

İndeks sıralı dosya<br />

İkili arama ağacı


AVL Tree<br />

<br />

<br />

AVL ağacı, denge şartı olan ikili arama ağacıdır. Height<br />

balanced tree olarak da adlandırılırlar.<br />

Herhangi bir ikili arama ağacının AVL ağacı olması için<br />

bütün düğümlerin çocukları arasındaki farkın en fazla bir<br />

olması gerekir.


Dengeli Ağaç (Balanced Tree)<br />

<br />

Bütün düğümler için sol alt ağacın yüksekliği ile sağ alt ağacın<br />

yüksekliği arasında en fazla bir fark varsa bu dengeli ağaç<br />

olarak adlandırılır.<br />

<br />

Denge faktörü (balance vector)önemlidir.<br />

Denge faktörü = yükseklik (sağ altağaç) – yükseklik (sol altağaç)<br />

<br />

Denge faktörü -1, 0 ve 1 değerini alabilir.


Dengeli Ağaç (Balanced Tree)<br />

denge faktörü=2-3=-1<br />

Dengeli bir ağaçtır.<br />

denge faktörü=1-3=-2<br />

Dengeli bir ağaç değildir.


B-Tree<br />

<br />

<br />

<br />

<br />

B-Tree, çok yollu bir arama ağacıdır.<br />

Bir node’un en fazla m çocuğu vardır.<br />

Her yaprak olmayan node’un (kök hariç) en az m/2 çocuğu<br />

olmalıdır.<br />

Bir node’taki anahtar, sol alt ağaçtaki tüm anahtarlardan<br />

büyüktür ve sağ alt ağaçtaki tüm anahtarlardan küçüktür.


B-Tree<br />

Kök (root) node en az iki tane yaprak olmayan node’a<br />

sahiptir.<br />

Yaprak ve kök olmayan her node k-1 tane anahtara ve k<br />

adet alt ağaç referansına sahiptir.<br />

(m/2 ≤ k ≤ m)<br />

k çocuklu bir yaprak olmayan node’u k -1 anahtara<br />

sahiptir.<br />

Capacity order=d dersek, anahtarlar d ile 2d arasında<br />

olmak zorundadır. Sadece kök 1 ile 2d arasında olabilir.<br />

İşaretçiler ise d+1 ile 2d+1 arasındadır. Yalnız kökün<br />

işaretçileri 2 ile 2d+1 arasında olabilir.<br />

Bütün yapraklar aynı düzeydedir.


B-Tree -- Ekleme<br />

Anahtar Ekleme:<br />

1. Eğer boş alanı olan bir yaprağa yerleştirilecekse<br />

doğrudan yaprağın ilgili alanına yerleştirilir.<br />

2. Eğer ilgili yaprak doluysa, yaprak ikiye bölünür ve<br />

anahtarların yarısı yeni bir yaprak oluşturur. Eski<br />

yapraktaki en son anahtar bir üst seviyedeki node’<br />

aktarılır ve yeni yaprağı referans olarak gösterir.<br />

3. Eğer kök ve tüm yapraklar doluysa, önce ilgili<br />

yaprak ikiye bölünür ve eski yapraktaki en son<br />

anahtar köke aktarılır. Kök node’da dolu olduğu<br />

için ikiye bölünür ve eski node’daki en son anahtar<br />

kök yapılır.


B-Tree -- Ekleme<br />

Örnek<br />

Anahtarlar= 80, 50, 100, 90, 60, 65, 70, 75, 55, 64, 51, 76, 77, 78, 200, 300, 150<br />

capacity order=d=2<br />

* 80 anahtarını ekleme<br />

ˆ 80 ˆ ˆ ˆ ˆ<br />

* 50 anahtarını ekleme<br />

ˆ 50 ˆ 80 ˆ ˆ ˆ<br />

* 100 anahtarını ekleme<br />

ˆ 50 ˆ 80 ˆ 100 ˆ ˆ<br />

* 90 anahtarını ekleme<br />

ˆ 50 ˆ 80 ˆ 90 ˆ 100 ˆ


B-Tree -- Ekleme<br />

Anahtarlar= 80, 50, 100, 90, 60, 65, 70, 75, 55, 64, 51, 76, 77, 78, 200, 300, 150<br />

* 60 anahtarının eklenmesi<br />

* 65 anahtarının eklenmesi


B-Tree -- Ekleme<br />

Anahtarlar= 80, 50, 100, 90, 60, 65, 70, 75, 55, 64, 51, 76, 77, 78, 200, 300, 150<br />

* 70 anahtarının eklenmesi<br />

* 75 anahtarının eklenmesi


B-Tree -- Ekleme<br />

Anahtarlar= 80, 50, 100, 90, 60, 65, 70, 75, 55, 64, 51, 76, 77, 78, 200, 300, 150<br />

* 55 ve 64 anahtarının eklenmesi<br />

* 51 anahtarının eklenmesi


B-Tree -- Ekleme<br />

Anahtarlar= 80, 50, 100, 90, 60, 65, 70, 75, 55, 64, 51, 76, 77, 78, 200, 300, 150<br />

* 76 ve 77 anahtarının eklenmesi<br />

* 78 anahtarının eklenmesi


B-Tree -- Ekleme<br />

Anahtarlar= 80, 50, 100, 90, 60, 65, 70, 75, 55, 64, 51, 76, 77, 78, 200, 300, 150<br />

* 200 ve 300 anahtarlarının eklenmesi<br />

* 150 anahtarının eklenmesi


B-Tree -- Silme<br />

Anahtar silme:<br />

1. Minimum kapasitenin (d/2) üzerindeki yapraklardan<br />

kayıt rahatlıkla silinebilir.<br />

* 88 anahtarlı kaydın silinmesi


B-Tree -- Silme<br />

2. Bir yaprak olmayan node üzerinden kayıt silindiğinde<br />

inorder takipçisi yerine yazılır. (inorder takipçisi,<br />

eklemede soldaki en büyük düğüm, silmede sağdaki en<br />

küçük düğümdür.) Minimum kapasitenin altına<br />

düşülmediyse düzenlemeye gerek yoktur.<br />

* 71 anahtarlı kaydın silinmesi:


B-Tree -- Silme<br />

3. Bir node’daki kayıt sayısı minimum kapasiteden aşağı<br />

düşerse ve kardeş node’u fazla kayda sahipse, parent ve<br />

kardeş node ile yeniden düzenleme yapılır.<br />

* 83 anahtarlı kaydın silinmesi:<br />

83’ün silinmesi durumunda node’daki eleman sayısı minimum kapasite olan 1’ e<br />

(d/2=1) düşer. Bu durumda önce sağ, sonra sol node’da minimumdan fazla kayıt<br />

olup olmadığına bakılır. Sağ node’da olduğu için bir tane kayıt alınabilir. Burada<br />

86, kayıdın silindiği node’a alınırken 89 bir üst node’a yazılır.


B-Tree -- Silme<br />

4. İki kardeş node minimum kapasitenin altına düşerse ikisi<br />

ve parent node’daki kayıt birleştirilir.<br />

* 73 anahtarlı kaydın silinmesi:<br />

73 silindiğinde inorder takipçisi olan 74 yerine yazılır. 74 ün eski<br />

nodunda bulunan eleman sayısı minimumun altına düşer. Sağ ve sol<br />

kardeş nodelarında da minimum düzeyde kayıt olduğundan düzenleme<br />

yapılır. .86,89,91,96 birleştirilerek tek node yapılır.


B-Tree -- Silme<br />

* 73 anahtarlı kaydın silinmesi devamı…<br />

Üstten 89 alındığında üstteki node’da minimum kapasitenin<br />

altına düşer. Benzer şekilde 98 tek kalır, sağ ve sol kardeş<br />

nodelar’ından alınabilecek eleman olmadığından düzenleme<br />

yapmak gereklidir. 31,50,74,98 birleştirilerek tek node<br />

yapılır.


Kaynaklar<br />

http://en.wikipedia.org/wiki/B-tree

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!