Ağaç Veri Yapısı

Download Report

Transcript Ağaç Veri Yapısı

Ders İçeriği
• Ağaç Veri Modeli
– Tanım ve Gerçekleştirim
– İkili Ağaç
– Bağıntı Ağaçları
1
Ağaç Veri Modeli
• Verilerin birbirine sanki bir ağaç yapısı
oluşturuyormuş gibi sanal olarak
bağlanmasıyla elde edilen hiyerarşik yapıya
sahip veri modelidir.
• Yazılım dünyasında birçok yerde
programcının karşısına çıkar. Örneğin:
– İşletim sistemlerinin dosya sistemi.
– Oyunların olası hamleleri.
– Şirketlerdeki organizasyon şeması.
2
Örnek Dosya Sistemi
/ymt
kodlar
kitaplar
ymt219 ymt112
1.pdf
2.pdf
1.pdf
...
dersler
2010-2011 eski
a.java b.java
ymt219
ymt217
1.ppt
1.doc
ymt215
...
1.Pdf
3
Ağaç Üzerinde Bazı Tanımlar
Kök
Derinlik
1
2
A
B
C
Ara
Düğüm
Yaprak
Düğüm
3
4
D
E
Yaprak
Düğüm
7 düğümlü ağaç
F
G
• Çocuk: Bir
düğüme
doğrudan bağlı
olan düğümlere
o düğümün
çocukları denir.
• Derece: Bir
düğümden alt
hiyerarşiye
yapılan
bağlantıların
sayısıdır.
4
Ağaç Üzerinde Bazı Tanımlar
•
•
•
•
•
•
•
•
•
Kardeş Düğüm: Aynı düğüme bağlı düğümlere denir.
Aile: Düğümlerin doğrudan bağlı olduğu düğüme denir.
Ata: Aile düğümünün üstündeki düğüme ata denir.
Orman: Ağaçlar kümesi
Yol: Bir düğümden başka bir düğüme gidebilmek için
üzerinden geçilmesi gereken düğümlerin listesi.
Düzey: Kök ile düğüm arasındaki yolun üzerinde
bulunan düğümlerin sayısıdır.
Derinlik: Bir düğümün köke olan uzaklığı
Yükseklik: Bir düğümün kendi silsilesindeki en uzak
mesafedeki yaprak düğüme olan düzey sayısı.
Altağaç: Ağacın herhangi bir dalı
5
Ağaç Üzerinde Bazı Tanımlar
Kök
A
B
C
D
E
F
G
Tanım
kök
B
D
Çocuk/Derece
2
0
0
Kardeş
1
2
3
Düzey
1
2
3
Aile
yok
kök
C
Ata
yok
yok
Kök
Yol
A
A, B
A,C,D
Derinlik
1
2
3
Yükseklik
4
3
2
6
Ağaçlar
•
Ağaç tanımı özyinelemelidir:
–
Bir ağaç iki şekilde olabilir:
a. Boş düğüm kümesi, veya
b. Kök ismi verilen bir düğüm ve 0 veya daha fazla alt-ağacı
olan yapı.
•
•
N tane düğümden oluşan bir ağacın kenar sayısı
N-1 tanedir.
Ağaçtaki iki düğüm arasında en fazla 1 yol
olabilir.
7
Ağaç Gerçekleştirimi
• Ağaç veri yapısını gerçekleştirmek için 2
yol vardır.
– Bağlantılı liste kullanmak
– Dizi kullanmak
8
Ağaç Gerçekleştirimi
•
Her bir bağlantı için birer bağlantı bilgisi
tutulur.
A
B
C
E
•
D
F
Problem: Bir sonraki elemanın çocuk sayısını
bilmiyoruz.
9
Ağaç Gerçekleştirimi
•
Daha iyisi: 1. Çocuk/Kardeş Gösterimi
–
–
Her düğümde iki bağlantı bilgisi tutularak hem çocuk
hem de yandaki kardeş tutulabilir.
İstenildiği kadar çocuk/kardeş olabilir.
JAVA Declaration
class AgacDugumu {
int eleman;
AgacDugumu ilkCocuk;
AgacDugumu kardes;
}
A
B
C
E
D
F
10
•
•
İkili Ağaç
İkili ağac bir düğümün en fazla 2 tane çocuğa
sahip olabildiği ağaçtır
Her düğüm en fazla 2 çocuğa sahip olabilir.
•
Bilgisayar bilimlerinde en yaygın ağaçtır.
Kök
A
A
A
B
D
C
Z
P
M
B
İki farklı ikili ağaç
I
Sağ alt ağaç
K
11
•
İkili Ağaç (devam)
N tane düğüm veriliyor, İkili ağacın minimum
derinliği nedir.
Derinlik 1: N = 1 = 20 düğüm
Derinlik 2: N = 2 ve 3 düğüm = 21 ve 21+1 -1 düğüm
Herhangi bir d derinliğinde, N = ?
12
İkili Ağaç (devam)
•
•
•
•
Derinlik 0: N = 1 = 20 düğüm
Derinlik 1: N = 2 ve 3 düğüm = 21 ve 21+1 -1
düğüm
D derinliğinde , N = 2d ve 2d+1-1 düğüm (tam
bir ikili ağaç)
En küçük derinlik:
log N ≤ d ≤ log(N+1)-1 or Θ(log N)
13
•
•
İkili Ağaç (devam)
N düğümlü ikili ağacın minimum derinliği: Θ(log N)
İkili ağacın maksimum derinliği ne kadardır?
–
–
•
Dengesiz ağaç: Ağaç bir bağlantılı liste olursa!
Maksimum derinlik = N
Amaç: Arama gibi operasyonlarda bağlantılı listeden
daha iyi performans sağlamak için derinliğin log N de
tutulması gerekmektedir.
–
–
Bağlantılı liste
Derinlik = N
14
İkili Ağaç Gerçekleştirimi
d
sol
veri
sag
kök
public class İkiliAgacDugumu {
public İkiliAgacDugumu sol;
public int veri;
public İkiliAgacDugumu sag;
}
4
12
6
45
7
15
İkili Ağaç Gerçekleştirimi
/* İkili ağaç düğümü oluşturur.
*/
İkiliAgacDugumu DugumOlustur(int veri){
İkiliAgacDugumu dugum = new İkiliAgacDugumu();
dugum.veri = veri;
dugum.sol = null;
dugum.sag = null;
dugum
veri
null
null
return dugum;
}
•
Bu yordam ikili ağaç düğümü oluşturur ve bunu geri
döndürür.
16
İkili Ağaç Gerçekleştirimi
İkiliAgacDugumu dugum = null;
public static void main main(){
kok = DugumOlustur(4);
kök
4
kok.sol = DugumOlustur(6);
kok.sag = DugumOlustur(12);
kok.sol.sol = DugumOlustur(45);
12
6
45
7
1
kok.sag.sol = DugumOlustur(7);
kok.sag.sag = DugumOlustur(1);
} /* main */
•
Kök verilmiş olsun tüm ağaç üzerinde dolaşıp elemanları
ekrana nasıl yazdırırız.?
−
Ağaç dolaşma algoritmaları
17
İkili Ağaç Üzerinde Dolaşma
• İkili ağaç üzerinde dolaşma birçok şekilde
yapılabilir. Ancak belirli bir yönteme
uyulması algoritmik ifadeyi kolaylaştırır.
İkili ağaç üzerinde dolaşmak için 3 temel
yol vardır. Bunlar:
– Önce-kök (Preorder): Kök, Sol, Sağ
• Önce ağacın kökü, sonra sol alt ağaç ve ardından sağ
alt ağaç
– Ortada-kök (Inorder): Sol, Kök, Sağ
• Önce sol alt ağaç, kök ve sağ alt ağaç
– Sonra-kök (Postorder): Sol, Sağ, Kök
• Önce sol alt ağaç, sağ alt ağaç ve kök.
18
Örnek
Kök
Önce-kök
ACPDZMIK
A
Ortada-kök
PCAMZDIK
D
C
Z
P
M
I
Sonra-kök
PCMZKIDA
K
19
Algoritma
OnceKok(IkiliAgacDugumu kok){
if (kok == null) return;
System.out.print(kok.veri+" ");
OnceKok(kok.sol);
OnceKok(kok.sag);
}
OrtadaKok(IkiliAgacDugumu kok){
if (kok == null) return;
OrtadaKok(kok.sol);
System.out.print(kok.veri+" ");
OrtadaKok(kok.sag);
}
SonraKok(IkiliAgacDugumu kok){
if (kok == null) return;
SonraKok(kok.sol);
SonraKok(kok.sag);
System.out.print(kok.veri+" ");
}
20
Bağıntı Ağaçları
•
•
•
•
Bağıntı ağaçları bir matematiksel
bağıntının ağaç şeklinde tutulması için
tanımlanmıştır.
Kök
+
Örnek aritmetik işlem
–
A + (B * (C / D) )
Ağacın genel yapısı:
–
–
Yaprak düğüm = değişken/sabit değer
Kök veya ara düğümler = operatörler
A
*
/
B
C
D
Birçok derleyicide kullanılır. Parantez
gereksinimi yoktur.
21
•
Bağıntı Ağaçları
Verilen denklemden bağıntı ağacı kurulması
veya verilen ağaçtan denklemin çıkartılması için
üç değişik yöntem vardır:
–
–
–
İç-takı: matematikte alışılagelen şekilde,
operatörlerin ortada, değişken veya sabit değerlerin
operatörün kenarında bulunan yöntemdir.
Ön-takı: operatörler kendilerine karşı düşen
parametrelerin(değişken/sabit) önündedir.
Son-takı: Polonyalı notasyonu olarak da adlandırılır
ve operatörler kendi parametrelerinin arkasından
gelir.
22