Download - Ders İçeriği

Transcript
Page 1: Ders İçeriği

1

Ders İçeriği

• Ağaç Veri Modeli– Tanım ve Gerçekleştirim– İkili Ağaç– Bağıntı Ağaçları

Page 2: Ders İçeriği

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

Page 3: Ders İçeriği

Örnek Dosya Sistemi

3

/ymt

kitaplar kodlar dersler

ymt219 ymt112 ...

1.pdf 2.pdf 1.pdf

2010-2011 eskia.java b.java

ymt219 ymt217 ymt215 ...

1.ppt 1.doc 1.Pdf

Page 4: Ders İçeriği

Ağaç Üzerinde Bazı Tanımlar• Ç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

B C

D E F

G

Derinlik1

2

3

4

Kök

Yaprak Düğüm

AraDüğüm

Yaprak Düğüm

7 düğümlü ağaç

Page 5: Ders İçeriği

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

Page 6: Ders İçeriği

Ağaç Üzerinde Bazı Tanımlar

6

A

B C

D E F

G

Kök

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

Page 7: Ders İçeriği

7

Ağaçlar• Ağaç tanımı özyinelemelidir:

– Bir ağaç iki şekilde olabilir:a. Boş düğüm kümesi, veyab. 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.

Page 8: Ders İçeriği

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

Page 9: Ders İçeriği

9

Ağaç Gerçekleştirimi• Her bir bağlantı için birer bağlantı bilgisi

tutulur.

A

B C D

E F

• Problem: Bir sonraki elemanın çocuk sayısını bilmiyoruz.

Page 10: Ders İçeriği

10

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.

A

B C D

E F

JAVA Declaration

class AgacDugumu { int eleman; AgacDugumu ilkCocuk; AgacDugumu kardes;}

Page 11: Ders İçeriği

11

İ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.

A

C D

Z I

K

Kök

P

MSağ alt ağaç

Sol alt

ağaç

A

B

A

B

İki farklı ikili ağaç

Page 12: Ders İçeriği

12

İ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üğümHerhangi bir d derinliğinde, N = ?

Page 13: Ders İçeriği

13

İ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)

Page 14: Ders İçeriği

14

İ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

Page 15: Ders İçeriği

15

İkili Ağaç Gerçekleştirimi

sol veri sag

d

public class İkiliAgacDugumu {

public İkiliAgacDugumu sol;

public int veri;

public İkiliAgacDugumu sag;

}

4

6 12

45 7

kök

Page 16: Ders İçeriği

16

İ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;

return dugum;

}

veri

dugum

null null

• Bu yordam ikili ağaç düğümü oluşturur ve bunu geri döndürür.

Page 17: Ders İçeriği

17

İkili Ağaç Gerçekleştirimi İkiliAgacDugumu dugum = null;

public static void main main(){

kok = DugumOlustur(4);

kok.sol = DugumOlustur(6);

kok.sag = DugumOlustur(12);

kok.sol.sol = DugumOlustur(45);

kok.sag.sol = DugumOlustur(7);

kok.sag.sag = DugumOlustur(1);

} /* main */

4

6 12

45 7

kök

1

• Kök verilmiş olsun tüm ağaç üzerinde dolaşıp elemanları ekrana nasıl yazdırırız.?− Ağaç dolaşma algoritmaları

Page 18: Ders İçeriği

İ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

Page 19: Ders İçeriği

19

Örnek

A

C D

Z I

K

Kök

P

M

Önce-kök A C P D Z M I K

Ortada-kök P C A M Z D I K

Sonra-kök P C M Z K I D A

Page 20: Ders İçeriği

20

AlgoritmaOnceKok(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+" ");}

Page 21: Ders İçeriği

21

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.

• Ö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

• Birçok derleyicide kullanılır. Parantez gereksinimi yoktur.

+

A *

B /

C D

Kök

Page 22: Ders İçeriği

22

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.


Top Related