yzm 2116 bölüm 9 - heap binary tree

40
YZM 2116 Veri Yapıları Yrd. Doç. Dr. Deniz KILINÇ Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi Yazılım Mühendisliği

Upload: deniz-kilinc

Post on 14-Apr-2017

667 views

Category:

Engineering


12 download

TRANSCRIPT

Page 1: Yzm 2116   Bölüm 9 - Heap Binary Tree

YZM 2116Veri Yapıları

Yrd. Doç. Dr. Deniz KILINÇCelal Bayar Üniversitesi

Hasan Ferdi Turgutlu Teknoloji FakültesiYazılım Mühendisliği

Page 2: Yzm 2116   Bölüm 9 - Heap Binary Tree

BÖLÜM - 9

Bu bölümde,• Hatırlatmalar• Tam İkili Ağaç• Eksiksiz İkili Ağaç• Dizi Kullanarak İkili Ağaç Gerçekleştirimi• Heap, Max Heap, Min Heap• Öncelik Kuyruğu• HeapSort

konusuna değinilecektir.

Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

Page 3: Yzm 2116   Bölüm 9 - Heap Binary Tree

Hatırlatmalar…• Tam İkili Ağaç (Full Binary Tree)• Eksiksiz İkili Ağaç (Complete Binary Tree)

Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

Neydi?

Page 4: Yzm 2116   Bölüm 9 - Heap Binary Tree

4Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

Tam İkili Ağaç (Full Binary Tree)

• Her bir düğümün (i)net olarak iki çocuk düğüme sahip olduğu ve (ii)yaprak düğümlerin aynı seviyede olduğu ikili ağaçtır.

• Her düğüm, eşit şekilde sağ ve sol alt-ağaçlara sahiptir.

Page 5: Yzm 2116   Bölüm 9 - Heap Binary Tree

5Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

Eksiksiz İkili Ağaç (Complete Binary Tree)

• Son seviye dışındaki tüm seviyelerin tam (full) olduğu ikili ağaç türüdür.

• Düğümleri sol taraftan (düğüme göre) doldurulur. • Yeni bir derinliğe soldan sağa doğru ekleme

başlanır.

Page 6: Yzm 2116   Bölüm 9 - Heap Binary Tree

6Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

Eksiksiz İkili Ağaç (Complete Binary Tree) (devam…)

Page 7: Yzm 2116   Bölüm 9 - Heap Binary Tree

7Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

SORU

DİZİ KULLANARAK İKİLİ AĞAÇ GERÇEKLEŞTİREBİLİR MİYİZ?

Page 8: Yzm 2116   Bölüm 9 - Heap Binary Tree

8Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

Dizi Kullanarak İkili Ağaç Gerçekleştirimi

• Bellek kullanım tasarrufu sağlar (işaretçi yok vs.).• Düğümler arası linkler olmadığı halde, ağaç

üzerindeki düğümlerde aile ilişkisi korunur (parent-child).

• Gezinmeyi basitleştirir.

• Veriyi Saklama Şeklii. Seviye-seviye (level-by-level)ii. Soldan-sağa (left-to-right)

Page 9: Yzm 2116   Bölüm 9 - Heap Binary Tree

9Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

Dizi Kullanarak İkili Ağaç Gerçekleştirimi (devam…)

Soru: Aşağıdaki ikili ağacı dizide nasıl tutarız?

Page 10: Yzm 2116   Bölüm 9 - Heap Binary Tree

10Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

Dizi Kullanarak İkili Ağaç Gerçekleştirimi (devam…)

Cevap: Kök’ü 0’dan başlatarak, sol-sağ kolları her seviyede dizi indisleri şeklinde arttırarak numaralayıp diziye atabiliriz.

Page 11: Yzm 2116   Bölüm 9 - Heap Binary Tree

11Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

Dizi Kullanarak İkili Ağaç Gerçekleştirimi (devam…)

0

1 2

43 5 6

7 8 9

Page 12: Yzm 2116   Bölüm 9 - Heap Binary Tree

12Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

Dizi Kullanarak İkili Ağaç Gerçekleştirimi (devam…)

• tree.nodes[index] düğümü ifade etmek üzere• Parent-child ilişkisi:

– Sol çocuk = tree.nodes[2*index+1]– Sağ çocuk = tree.nodes[2*index+2] – Parent düğüm = tree.nodes[(index-1)/2]

• Yaprak düğümler: – tree.nodes[numElements/2] - tree.nodes[numElements-1]

(tam sayı bölüm)

Page 13: Yzm 2116   Bölüm 9 - Heap Binary Tree

13Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

Dizi Kullanarak İkili Ağaç Gerçekleştirimi (devam…)

Örnek: 1 indisli D düğümü için …Sol çocuk indisi ([2*index+1]): 3Sağ çocuk indisi ([2*index+2]): 4

Parent indisi([(index-1)/2]): 00

1 2

43 5 6

7 8 9

Page 14: Yzm 2116   Bölüm 9 - Heap Binary Tree

14Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

Dizi Kullanarak İkili Ağaç Gerçekleştirimi (devam…)

• Tam veya eksiksiz ikili ağaçlar, diziler ile çok basit ve etkin şekilde gerçekleştirilebilirler.

• Dizide boş alan kalmaz.

• Tam tersi durumdaki ikili ağaçlarda mutlaka boş yer kullanmak gerekir.

Page 15: Yzm 2116   Bölüm 9 - Heap Binary Tree

15Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

Heap Nedir?• Aşağıdaki özelliklere sahip ikili ağaçtır:

– Özellik 1: Eksiksiz (complete) ikili ağaçtır.– Özellik 2 (Heap özelliği): Ebeveyn (parent)

düğümün değeri her zaman çocukların değerinden büyük (küçük) veya eşittir.

• Max Heap: Kök en büyük değere sahiptir. • Min Heap: Kök en küçük değere sahiptir.

Page 16: Yzm 2116   Bölüm 9 - Heap Binary Tree

16Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

Max ve Min Heap

Max HeapMin Heap

Page 17: Yzm 2116   Bölüm 9 - Heap Binary Tree

17Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

Heap Gerçekleştirimi

Page 18: Yzm 2116   Bölüm 9 - Heap Binary Tree

19

4222127

23

45

35

Heap h = new Heap(100);h.Insert(45);h.Insert(35);h.Insert(23);h.Insert(27);h.Insert(21);h.Insert(22);h.Insert(4);h.Insert(19);

Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

Heap Oluşturma

Page 19: Yzm 2116   Bölüm 9 - Heap Binary Tree

• Adım 1: Yeni düğümü seviye-seviye soldan-sağa olacak şekilde ilk uygun yere ekle.

19

4222127

23

45

35

42

Heap Insert(42)

Page 20: Yzm 2116   Bölüm 9 - Heap Binary Tree

• Adım 2: Eklenen yeni düğümü, ebeveyn ile karşılaştırarak yukarı doğru taşı.

• Adım 3: Uygun yer bulana kadar Adım 2 tekrarla.

19

4222142

23

45

35

27

Heap Insert(42)

Page 21: Yzm 2116   Bölüm 9 - Heap Binary Tree

19

4222135

23

45

42

27

Heap Insert(42)

• Adım 2: Eklenen yeni düğümü, ebeveyn ile karşılaştırarak yukarı doğru taşı.

• Adım 3: Uygun yer bulana kadar Adım 2 tekrarla.

Page 22: Yzm 2116   Bölüm 9 - Heap Binary Tree

Heap Insert Gerçekleştirimi

Page 23: Yzm 2116   Bölüm 9 - Heap Binary Tree

Max Elemanı Silme (RemoveMax)

19

4222135

23

45

42

27

• Adım 1: Son eleman kök eleman yerine taşınır.

• Örnekte, 27 elemanı köke taşınır.

Page 24: Yzm 2116   Bölüm 9 - Heap Binary Tree

19

4222135

23

27

42

Max Elemanı Silme (RemoveMax)

• Adım 1: Tamamlandı. Ancak, Heap özelliğinin tekrar kurulması gerekiyor.

Page 25: Yzm 2116   Bölüm 9 - Heap Binary Tree

19

4222135

23

27

42

Max Elemanı Silme (RemoveMax)

• Adım 2: Eklenen yeni düğümü, büyük çocuğu ile yer değiştirecek şekilde aşağıya doğru taşı.

Page 26: Yzm 2116   Bölüm 9 - Heap Binary Tree

19

4222135

23

42

27

• Adım 2: Eklenen yeni düğümü, büyük çocuğu ile yer değiştirecek şekilde aşağıya doğru taşı.

• Adım 3: Adım 2’yi tekrarla.

Max Elemanı Silme (RemoveMax)

Page 27: Yzm 2116   Bölüm 9 - Heap Binary Tree

19

4222127

23

42

35

• Adım 2: Eklenen yeni düğümü, büyük çocuğu ile yer değiştirecek şekilde aşağıya doğru taşı.

• Adım 3: Adım 2’yi tekrarla.

Max Elemanı Silme (RemoveMax)

Page 28: Yzm 2116   Bölüm 9 - Heap Binary Tree

Heap RemoveMax Gerçekleştirimi

Page 29: Yzm 2116   Bölüm 9 - Heap Binary Tree

Heap RemoveMax Gerçekleştirimi

Page 30: Yzm 2116   Bölüm 9 - Heap Binary Tree

Heap Ağacı Uygulamaları

Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

Öncelik Kuyruğu (Priority Queue)

Heap Sıralama Algoritması (Heap Sort)

Page 31: Yzm 2116   Bölüm 9 - Heap Binary Tree

Öncelik Kuyruğu

Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

• Öncelik kuyrukları, • artan ve azalan olmak üzere ikiye ayrılırlar.

• Diğer veri yapılarında olduğu gibi kuyrukta bulunan elemanlar, string veya integer gibi basit veri türünde olabileceği gibi özelliklere (attribute) sahip bir nesne de olabilir.

• Öncelik kriterinin ne olacağı kuyruktan kuyruğa değişkenlik gösterir.

• Kuyruğa eklenen elemanın kendisi veya herhangi bir özelliği, öncelik kriteri olabilir.

Page 32: Yzm 2116   Bölüm 9 - Heap Binary Tree

Öncelik Kuyruğu (devam…)

Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

• Örneğin; telefon rehberi uygulamasında, • Kuyruktaki her eleman soyad, ad, adres ve telefon

numarası özelliklerinden oluşmakta ve kuyruk soyada göre sıralanmaktadır.

• Öncelik kuyrukları; • Dizi• Bağlı Liste• Binary Heap kullanılarak implemente edilebilir.

Page 33: Yzm 2116   Bölüm 9 - Heap Binary Tree

Öncelik Kuyruğu (devam…)

Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

• Öncelik kuyruğunu gerçekleştirmek için• Heap gerçekleştirimindeki:

o Insert() ve o RemoveMax()

fonksiyonlarını aynen veya biraz değişiklikle kullanabiliriz.

Page 34: Yzm 2116   Bölüm 9 - Heap Binary Tree

Queue İşlem Karmaşıklığı

İşlem DiziÖncelik Kuyruğu

Heap Öncelik Kuyruğu

Insert O(n) O(logn)Remove O(1) O(logn)

Page 35: Yzm 2116   Bölüm 9 - Heap Binary Tree

Heap Sort

Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

• Heap ağacı kullanarak nasıl sıralama yaparız?

Adım 1: Heap ağacı oluştur ve sıralanmamış diziyi okuyarak, her bir elemanı ağaca ekle.

Adım 2: 1. Ağacın en büyük elemanını oku.2. Elemanı yeni bir diziye ata.3. Ağacı yeniden oluştur.4. İlk 3 adımı ağaçta eleman kalmayana kadar

tekrarla.

Page 36: Yzm 2116   Bölüm 9 - Heap Binary Tree

Heap Sort (devam…)

Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

Page 37: Yzm 2116   Bölüm 9 - Heap Binary Tree

Heap Sort (devam…)

Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

• Big O karmaşıklığı nedir?

O(nlogn)

Page 38: Yzm 2116   Bölüm 9 - Heap Binary Tree

Örnek Sorular

Page 39: Yzm 2116   Bölüm 9 - Heap Binary Tree

İYİ ÇALIŞMALAR…

Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

Page 40: Yzm 2116   Bölüm 9 - Heap Binary Tree

Yararlanılan Kaynaklar• Ders Kitabı:

• Data Structures through JAVA, V.V.Muniswamy • Yardımcı Okumalar:

• Data Structures and Algorithms in Java, Narashima Karumanchi

• Data Structures, Algorithms and Applications in Java, Sartaj Sahni

• Algorithms, Robert Sedgewick

Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları