22
1 Ders İçeriği Ağaç Veri Modeli Tanım ve Gerçekleştirim İkili Ağaç Bağıntı Ağaçları

Ders İçeriği

  • Upload
    amalia

  • View
    56

  • Download
    0

Embed Size (px)

DESCRIPTION

Ders İçeriği. Ağaç Veri Modeli Tanım ve Gerçekleştirim İkili Ağaç Bağıntı Ağaçları. 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. - PowerPoint PPT Presentation

Citation preview

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.