ve Polonyalı Notasyonu

advertisement
Algoritma Geliştirme ve Veri Yapıları – 9
Ağaç Veri Modeli ve Uygulaması
Mustafa Kemal Üniversitesi
Ağaç Veri Modeli ve Uygulaması
• Ağaç, verilerin birbirine sanki bir ağaç yapısı
oluşturuyormuş
gibi
sanal
olarak
bağlanmasıyla elde edilen hiyararşik yapıya
sahip bir veri modelidir.
• Kullanım yerleri:
o Kodlama/kod çözme işlemleri
o Dosya sistemi
o Oyunların olası hamleleri
o Sıralı verilerin hızlı aranması gibi..
Mustafa Kemal Üniversitesi
Ağaç Veri Modeli ve Uygulaması
• Her ağacın bir kök işaretçisi vardır, herhangi bir düğüm
eklenmemiş ise NULL değerini alır.
• Kök işaretçisine bağlı olan düğüm kök(root) olarak
adlandırılır, ağaç bunun etrafında serpilir.
• Kendisine hiçbir bağlantı yapılmayan düğümler
yaprak(leaf) olarak adlandırılır. Kök ve yaprak dışındaki
düğümlere ara düğüm denilir.
• Ağacın herhangi bir dalı kesildiğinde ortaya alt-ağaç
çıkar; bir ağaç veya alt-ağaç birçok alt-ağacın
birleşmesinden oluşabilir ve alt-ağacın kendisi de ağaç
özelliğindedir(rekürsif programlamaya uygundur).
Mustafa Kemal Üniversitesi
Ağaç Veri Modeli ve Uygulaması
• Genel olarak, veri ağacın düğümlerinde
tutulur. Dallar ise düğümlerin birbirleriyle
bağlantısını gösterir.
• Örnek ağaç üzerindeki kök, A, B ve C
düğümlerinin durumu şöyledir:
Mustafa Kemal Üniversitesi
Ağaç Veri Modeli ve Uygulaması
Tanım
Düğümler
Kök
A
B
C
Derece/Çocuk
2
1
0
2
Kardeş
Düğüm
1
2
1
2
Düzey
1
3
6
3
Aile
Yok
d2
d26
d3
Ata
Yok
Kök
(d1)
d13, d7,
d3, kök
Kök
(d1)
Yol
d1
(Kök
düğümden)
d1,
d1, d3,
d2, d4 d7, d13,
d26,
d52
d1, d3,
d7
Derinlik
1
3
6
3
Yükseklik
6
2
1
4
Mustafa Kemal Üniversitesi
Ağaç Veri Modeli ve Uygulaması
• Ağaç Türleri:
o İkili Arama Ağacı: Bir düğüm en fazla iki tane çocuğa
sahip olabilir ve alt/çocuk bağlantıları belirli bir sırada
yapılır.
o Kodlama Ağacı: Bir alfabedeki veya daha genel olarak
bir kümedeki karakterlere kod atanması için kurulan
ağaç şeklidir.
o Sözlük Ağacı:
Bir sözlükte bulunan sözcüklerin
tutulması için kurulan bir ağaç şeklidir. Amaç, arama
işleminin en performanslı bir şekilde yapılmasıdır.
Sözlük ağaçları bir araya gelip sözlük ormanını
oluşturur.
Mustafa Kemal Üniversitesi
Ağaç Veri Modeli ve Uygulaması
o Kümeleme Ağacı: Bir çeşit sıralama ağacıdır; aslında
ikili arama ağacı da sıralama ağacıdır. Ancak kümeleme
ağacında çocuk düğümler her zaman aile
düğümünden daha küçük değerlere sahip olur(yada
tersi olabilir). Dolayısıyla kök düğüm en büyük değere
sahip olurken yaprak türleri kendi ailesi içerisinde en
küçük değerlere sahip olurlar.
o Bağıntı Ağacı: Bir matematiksel bağıntının ağaç
şeklinde tutulması için tanımlanmış bir ikili ağaç
uygulamasıdır.
Bağıntı
ağacının
yapraklarda
değişkenler veya sabit değerler bulunurken, kök ve ara
düğümlerde
de
işlem
değeri
olan
simgeler(operatörler) bulunur.
Mustafa Kemal Üniversitesi
Ağaç Veri Modeli ve Uygulaması
Ağacın Bellekte Tutulması:
• Ağacın bilgisayar belleğinde tutulması için “indis-bağlantısı” veya
“düğüm-bağlantısı” yöntemleri kullanılmaktadır.
• İndis-bağlantısı yaklaşımında ağacın düğümleri bir dizi üzerinde
tutulurlar; dizinin ilk elemanı kök olup alt hiyerarşideki diğer
düğümlere bir bağlantı uyarınca erişilir.
• İndis-bağlantısı, bir düğümün çocuklarına erişmek için gerekli
indisi o andaki aile düğümün indis değerine göre hesaplamada
kullanılır. Böylece hiçbir bağlantı bilgisi kullanılmadan bir düğümde
onun herhangi bir çocuğuna indis hesabı yapılarak erişilebilir.
• Düğüm-bağlantısı olan yöntemde düğümler arası bağlantılar veri
yapısı içerisine eklenmiş olan işaretçi değişkenler aracılığıyla
sağlanır.
Mustafa Kemal Üniversitesi
Ağaç Veri Modeli ve Uygulaması
İndis-Bağlantısı Yaklaşımında Veri Yapısı
• Ağacın indis-bağlantısına göre bellekte tutulması
düğümlerin veri kısmının bir dizi üzerinde
tutulması kavramına dayanır.
• Dizinin ilk elemanı ağacın köküdür. Daha sonraki
elemanlar ağaç hiyerarşisi üzerindeki herhangi bir
düğüme karşılık düşer. Ancak dizinin ikinci ve
üçüncü elemanları kök düğümün çocuklarıdır;
daha sonraki, yani dördüncüden sonraki
düğümler için ağacın derecesi bilinmelidir.
Mustafa Kemal Üniversitesi
Ağaç Veri Modeli ve Uygulaması
İndis-Bağlantısı Yaklaşımında Veri Yapısı
• İkili ağaç (derecesi 2)
0
1
2
3
4
5
6
7
8
9
10
d0
d1
d2
d3
d4
d5
d6
d7
d8
d9
d10 d11 d12 d13 d14
• Indissol(j)=2j+1
Mustafa Kemal Üniversitesi
Indissag(j)=2j+2
11
12
13
14
Ağaç Veri Modeli ve Uygulaması
Düğüm-Bağlantısı Yaklaşımında Veri Yapısı
• Bu yaklaşımda tutulan yol her bir bağlantı için birer
bağlantı bilgisi tutulmasıdır.
struct ikili{
Veri kısmı;
İşaretçiTipi sol,sağ;
}AGAC2;
• İkili ağaç için veri yapısı içerisindeki bilginin yanı sıra 2
adet işaretçi olmalıdır(m-dereceli için m tane işaretçi)
Mustafa Kemal Üniversitesi
Ağaç Veri Modeli ve Uygulaması
Düğüm-Bağlantısı Yaklaşımında Veri Yapısı
• MbellekAlanı= sizeof(Veri Yapısı) + sizeof(2 adet bağlantı)
• Bağlantıları tutacak olan işaretçiler 4 Byte ise ikili bir
ağaçta 8 Byte sadece bağlantıları göstermek için
kullanılır.
Mustafa Kemal Üniversitesi
Ağaç Veri Modeli ve Uygulaması
Huffman Kodlama Ağacı
• Kodlama ağacına dayanılarak değişen uzunluktaki
kod
ataması,
özellikle
veri
sıkıştırma
algoritmalarında kullanılan bir yöntemdir. Bu
amaçla Huffman, ShannonFano gibi birçok
kodlama ağacı şekli geliştirilmiştir.
• Kodlama tablosunda kod uzunluğu log2N
bağıntısından hesaplanır. N=4 için log24=2
bulunur. Genişletilmiş ASCII tablosu için (256
karakter) log2256=8 elde edilir.
Mustafa Kemal Üniversitesi
Ağaç Veri Modeli ve Uygulaması
Huffman Kodlama Ağacı
Karakter
Kod
A
00
B
01
C
10
D
11
• Kodlama ağacı karakterlerin kullanım sıklığına
göre oluşturulur.
Mustafa Kemal Üniversitesi
Ağaç Veri Modeli ve Uygulaması
• BABACABA karakterlerinin her biri bellekte 8 bitlik yer
kaplar, 8x8=64 bit=8 byte.
• Huffman ile elde edilen sonuçlara göz atalım:
A=0, B=10, C=110, D=111 yazılırsa
10 0 10 0 110 0 10 0 olur.
1001001100100 = 13 bit!
• Tablodaki değerlerle yapılmış olsaydı her biri 2 bit
olmak üzere 2x8=16 bit=2 byte yer kaplamış olacaktı.
• Yöntem en çok kullanılan elemanın en düşük boyutlu
bit ile temsil edilmesi üzerine kurulmuştur.
Mustafa Kemal Üniversitesi
Ağaç Veri Modeli ve Uygulaması
İkili Ağaçlar ve İkili Arama Ağacı
• İkili ağaçlarda bir düğümün derecesi en fazla iki olabilir,
yani en fazla iki tane çocuk bağlantısı olabilir.
• İkili arama ağacına bir düğüm eklenirken ağacın soluna
mı, sağına mı ekleme yapılacağı düğümün veri alanı
içerisindeki anahtar sözcüğe bakılarak yapılır. Bu
konudaki genel yaklaşım, anahtar veri aile
düğümünden küçük ise soluna büyük ise sağına
eklemektir. Eğer anahtar veri sözce(string) ise alfabetik
olarak önce geliyorsa soluna, sonra geliyorsa sağına
eklenir.
Mustafa Kemal Üniversitesi
Ağaç Veri Modeli ve Uygulaması
• Bağıntı ağaçları da ikili ağaç şeklindedir;
bağıntı ağacında amaç bir matematiksel
bağıntıya ait operatör, değişken ve sabitleri
bağıntıyı ifade edecek şekilde ikili ağaç
üzerinde tutmaktır.
• İkili ağaçtaki bir düğüme ait veri yapısında
veriye ek olarak iki tane işaretçi tutulur; biri sol
diğeri sağ olarak adlandırılan bu işaretçilere
düğümün çocukları bağlanır.
Mustafa Kemal Üniversitesi
Ağaç Veri Modeli ve Uygulaması
Mustafa Kemal Üniversitesi
Ağaç Veri Modeli ve Uygulaması
Mustafa Kemal Üniversitesi
Ağaç Veri Modeli ve Uygulaması
İkili Ağaç Üzerinde Dolaşma
• İkili ağaç üzerinde öncekök(preorder),
ortadakök(inorder) ve sonrakök(postorder)
olmak
üzere üç farklı dolaşma
şekli uygulamalara çözüm
olmaktadır.
Mustafa Kemal Üniversitesi
Önce-Kök: PAPATYA
Ortada-Kök: PAAPYTA
Sonra-Kök: PAAYATP
Ağaç Veri Modeli ve Uygulaması
o Önce-Kök(preorder): Kök, Sol, Sağ
o Ortada-Kök(inorder): Sol, Kök, Sağ
o Sonra-Kök(Postorder): Sol, Sağ, Kök
• Önce-kök yaklaşımında önce ağacın kökü,
sonra sol altağaç ve ardından sağ altağaç
• Ortada-kökte ise, önce sol altağaç, kök ve sağ
altağaç
• Sonra-kökta ise, önce sol altağaç, sonra sağ
altağaç ve kök dolaşılır.
Mustafa Kemal Üniversitesi
Ağaç Veri Modeli ve Uygulaması
Sonra-Kök
Önce-Kök
Ortada-Kök
Mustafa Kemal Üniversitesi
Ağaç Veri Modeli ve Uygulaması
Mustafa Kemal Üniversitesi
Ağaç Veri Modeli ve Uygulaması
Bağıntı Ağaçları
Mustafa Kemal Üniversitesi
Ağaç Veri Modeli ve Uygulaması
Bağıntı Ağaçları
• Bir matematiksel bağıntının ağaç şeklinde
tutulması için tanımlanmış bir ikili ağaç
uygulamasıdır. Birçok derleyici, program
içerisindeki denklemleri, bağıntı ağacı
aracılığıyla ayrıştırır ve karşılığı olan kodları
üretir.
• Bağıntı ağacı üç farklı yöntem ile çıkarılabilir:
iç-takı, ön-takı ve son-takı.
Mustafa Kemal Üniversitesi
Ağaç Veri Modeli ve Uygulaması
• İç-takı (İnfix)
Bağıntı ağacının iç-takı yöntemine göre değerlendirilmesi, bir önceki sayfada
verilen örneklerde görüldüğü gibi, matematikte alışılagelen şekilde, operatörlerin
ortada, değişken veya sabit değerlerin operatörün kenarlarında bulunması
şeklinde yapılır. Değerlendirmeye iki çocuğu da yaprak (yani parametreleri hazır;
işleme hazır) olan en soldaki altağaçtan başlanır ve sağa doğru, sırasıyla, yine
çocukları yaprak olan altağaçlar ele alınarak bağıntı değerlendirilir.
• Ön-takı (Prefix) ve Polonyalı Notasyonu
Ön-takı yönteminde operatörler kendilerine karşı düşen parametrelerin (değişken
veya sabit değerler) önündedir. Ön-takı yöntemi ikili ağaç üzerinde önce-kök
dolaşması gibidir.
• Son-takı (Postfix)
Son-takı yöntemi ters Polonyalı notasyonu (reverse Polish notation) olarak da
adlandırılır ve operatörler kendi parametrelerinin arkasından gelir. Ön-takı ve sontakı yönteminin en önemli özelliği bağıntıların parantez kullanılmadan
gösterilebilmesidir.
Mustafa Kemal Üniversitesi
Ağaç Veri Modeli ve Uygulaması
İkili Arama Ağacı
• İkili arama ağaçları arama işleminin yoğun
olduğu uygulamalarda ilk başvurulan veri
modelleridir; arama işleminde kullanılacak
anahtar sözcüğe bağlı olarak bir veya birden
fazla ikili arama ağacı kurularak arama işlemi
logN mertebesinde yapılır.
Mustafa Kemal Üniversitesi
Ağaç Veri Modeli ve Uygulaması
6 eklenmesi
11
eklenmesi
38 eklenmesi
Mustafa Kemal Üniversitesi
Ağaç Veri Modeli ve Uygulaması
İkili Arama Ağacı Uygulaması
• Ağacın herhangi bir düğümünde bir tamsayı ve bir de 100
karakterlik bir mesaj tutulacaktır, bunlara ek olarak biri sağ diğeri sol
olmak üzere iki adet işaretçiye de sahip olmalıdır. Böyle bir
düğümün veri yapısı;
struct topluluk{
int bilgi;
char mesaj[100];
struct topluluk *sol,*sag;
}AGAC2;
AGAC2 *kok=NULL;
Mustafa Kemal Üniversitesi
AGAC2
bilgi
mesaj
sol
sag
Ağaç Veri Modeli ve Uygulaması
• Bu aşamada bir ikili ağaç oluşmuş olur. Ancak
içerisinde hiçbir düğüm yoktur. İlk yapılacak
işlem ağaca düğüm ekleyecek algoritmanın
tasarlanmasıdır. Bunun içinde her şeyden önce
sıralamada kullanılacak olan anahtar sözcüğün
belirlenmesidir. Bu örnekte, türü tamsayı olan
bilgi adlı değişken anahtar veri olarak
seçilmiştir. Dolayısıyla ikili ağaç üzerindeki
ekleme, silme, arama gibi işlemler bu anahtar
sözcük üzerinden gerçekleştirilecektir.
Mustafa Kemal Üniversitesi
Ağaç Veri Modeli ve Uygulaması
/* Düğüm Ekleme Fonksiyonu */
void ekle(AGAC2 *agacKok, AGAC2 *eklenen)
{
if(agacKok==NULL)
kok=eklenen;
else {
if(eklenen->bilgi <= agacKok->bilgi) {
if(agacKok->sol==NULL)
agacKok->sol=eklenen;
else ekle(agacKok->sol, eklenen);
}
else {
if(agacKok->sag==NULL)
agacKok->sag=eklenen;
else ekle(agacKok->sag, eklenen);
}
}
}
Mustafa Kemal Üniversitesi
Ağaç Veri Modeli ve Uygulaması
/* Listedeki tüm kayıtları listeleme */
void listele(AGAC2 *agacKok) {
if(agacKok=!NULL) {
listele(agacKok->sol);
yazEkrana(agacKok);
listele(agacKok->sag);
}
}
/* Ağaç üzerinde bir kayıt arama */
AGAC2 *ara(AGAC2 *agacKok, int aranan) {
while(agacKok!=NULL && agacKok->bilgi!=aranan) {
if(aranan <= agacKok->bilgi)
agacKok=agacKok->sol;
else
agacKok=agacKok->sag;
}
return agacKok;
}
Mustafa Kemal Üniversitesi
Ağaç Veri Modeli ve Uygulaması
7’nin
Çıkarılması
23’ün
Çıkarılması
Mustafa Kemal Üniversitesi
5’in
Çıkarılması
Ağaç Veri Modeli ve Uygulaması
/* İkili ağaç üzerindeki düğüm sayısını sayar*/
int sayAgacDugum(AGAC2 *agacKok, int miktar)
{
if(agacKok==NULL) return miktar;
miktar++;
miktar=sayAgacDugum(agacKok->sol, miktar);
miktar=sayAgacDugum(agacKok->sag, miktar);
return miktar;
}
Mustafa Kemal Üniversitesi
Download