15.06.2015 Views

Dosya organiz - Trakya Üniversitesi

Dosya organiz - Trakya Üniversitesi

Dosya organiz - Trakya Üniversitesi

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

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!