İkili Ağaçlar

Download Report

Transcript İkili Ağaçlar

İkili Ağaçlar
İkili Arama Ağaçları
Ağaçlar
 Bağlantılı
listedeki erişim zamanı lineerdir.
Çoğu işlemlerin (operasyon) (arama, ekleme,
silme) çalışma zamanını daha aza indiren
(O(log N) gibi) başka bir veri yapısı var mıdır?

Ağaçlar
 Ağaç


düğümlerin koleksiyonudur.
Koleksiyon boş olabilir
Eğer boş değilse, ağaç birbirlerinden faklı r kök
düğümünü ve sıfır veya birden fazla boş olmayan
T1, T2, ...., Tk altağaçlarını içerir, herbiri r’ den gelen
bir yönlendirilmiş kenar ile köke bağlıdır.
Bazı tanımlar

Çocuk ve ebeveyn



Yapraklar


Kök hariç her düğümün bir ebeveyni vardır.
Bir düğümün çocuk sayısı değişebilir.
Çocuğu olmayan düğümlere denir.
Kardeş

Ebeveyni aynı olan düğümlerdir.
Bazı Tanımlar
Patika – yol - Path
 Uzunluk - Length



Bir düğümün derinliği



Kökten düğüme olan tekil yolun uzunluğu
Bir ağacın derinliği en derinde bulunan yaprağın derinliğine
eşittir.
Bir düğümün yüksekliği




Bir yoldaki kenar sayısı
Düğümden bir yaprağa olan en uzun yola denir.
Bütün yapraklar yükseklik 0 ‘ da bulunur
Bir ağacın yüksekliği kökün yüksekliğine eğittir.
Ata (veya dede) ve torun
Örnek UNIX dizini
İkili Ağaçlar

Bu ağaçta hiçbir düğümün ikiden fazla çocuğu olamaz

Ortalama bir ikili ağacın derinliği N ‘den küçüktür, en kötü
durumda bile derinlik N-1 olabilir.
Örnek:ifade ağaçları



Yapraklar terim (sabit veya değişken)
Diğer düğümler işlem
Bazı işlemler binary değilse ikili ağaçta gösterilemeyebilir.
Ağaç Gezme (Tree Traversal)
 Bir
ağaçtaki verileri belli bir düzende yazmak
için kullanılır.
 Önce-kök Gezme (Pre-order traversal)



Kökteki veriyi yaz
Sol altağaçtaki verileri iteratif olarak yaz
Sağ altağaçtaki verileri iteratif olarak yaz
Öncekök, sonrakök, ve içkök
Preorder, Postorder and Inorder
 Öncekök


gezme
düğüm, sol, sağ
önek ifadesi
++a*bc*+*defg
Öncekök, sonrakök, ve içkök
 Sonrakök


gezme
Sol, sağ, düğüm
Sonek ifadesi
abc*+de*f+g*+
 İçkök


yazma
Sol, düğüm, sağ
İçek ifadesi
a+b*c+d*e+f*g
 Öncekök
 sonrakök
Öncekök, sonrakök, ve içkök
İkili Ağaçlar

İkili ağaç SVY üzerindeki muhtemel işlemler





parent - ebeveyn
left_child, right_child - sol_çocuk, sağ_çocuk
Sibling - kardeş
root, etc - kök
Gerçekleştirmesi

İkili ağaçta en fazla iki çocuk olduğu için, bunlar için pointer
kullanabiliriz.
Karşılaştırma: Genel bir ağaç
gerçekleştirilmesi
İkili Arama Ağacı

Anahtarları düğümler içinde depolar; böylece arama,
ekleme ve silme etkili bir şekilde yapılabilir.
İkili arama ağaç özelliği

Herbir X düğümü için, solundaki altağaçtaki (subtree)
anahtarlar X düğümünde bulunan değerden daha küçüktür,
ve sağındaki ağaçtaki anahtarlar X düğümünde bulunan
değerden daha büyüktür.
İkili Arama Ağaçları
Bir ikili arama ağacı
İkili arama ağacı değil
İkili Arama Ağaçları
Ayni elemanları gösteren iki ikili arama ağacı
 Bir
düğümün ortalama derinliği O(log N);
maksimum derinliği ise O(N)
Gerçekleştirme
İAA Arama
 Eğer
15’i arıyorsak arama işlemi biter.
 Eğer aranan anahtar < 15 ise, sol altağaçta
aramaya devam edilir.
 Eğer aranan anahtar > 15 ise, sağ altağaçta
aramaya devam edilir.
Arama (Bul - Find)

Find X: X anahtarını bulunduran düğümün pointer ini
dönder veya eğer böyle bir düğüm yok ise NULL dönder.

Zaman Karmaşıklığı

O(ağaç yüksekliği)
İAA’ında içkök gezme
 Bütün
anahtarları sıralanmış bir şekilde getirir.
içkök: 2, 3, 4, 6, 7, 9, 13, 15, 17, 18, 20
findMin/ findMax
Ağaçtaki en küçük elemanı içeren düğümü dönderir.
 Kökten başla ve sol çocuk var olduğu sürece sola git.
Durma noktasındaki eleman en küçük elemandır.

findMax için de mantık benzer şekildedir.
 Zaman karmaşıklığı = O(ağaç yüksekliği)

Ekle - insert

Ağaçta ilgili yere find komutunda olduğu gibi git
Eğer X varsa, bir şey yapma (veya bir şey güncelle)
Diğer durumda, X i gezilen yoldaki en son noktaya ekle.

Zaman Karmaşıklığı = O(ağaç yüksekliği)


Sil - delete
 Bir
düğüm silindiği zaman, silinen düğümün
çocuklarına nasıl yerleştireceğimizi
düşünmemiş gerekir.

Bu işlem arama ağacı (search tree) özelliğinin
korunması için gereklidir.
sil
Üç durum vardır:
(1) düğüm yaprak ise

sil
(2) düğümün tek çocuğu varsa

Ebeveynden bir çocuğa bir pointer ata
sil
(3) düğümün 2 çocuğu varsa


Silinen düğüm anahtarını sağ altağaçtaki minimum elemanla
yer değiştir (replace the key of that node with the minimum
element at the right subtree )
Minimum elemanı sil
Daha
sonra ya hiç çocuk kalmamıştır yada bir çocuk vardır. Bu
durumda durum 1 ve 2 uygulanır..

Zaman karmaşıklığı = O(ağaç yüksekliği)