Top Banner
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
40

YZM 2116 Veri Yapıları - Algoritma ve programlama ... · Heap Sort Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları •Heap ağacı kullanarak nasıl sıralama yaparız? Adım

Jul 21, 2019

Download

Documents

truongngoc
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: YZM 2116 Veri Yapıları - Algoritma ve programlama ... · Heap Sort Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları •Heap ağacı kullanarak nasıl sıralama yaparız? Adım

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

Page 2: YZM 2116 Veri Yapıları - Algoritma ve programlama ... · Heap Sort Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları •Heap ağacı kullanarak nasıl sıralama yaparız? Adım

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 Veri Yapıları - Algoritma ve programlama ... · Heap Sort Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları •Heap ağacı kullanarak nasıl sıralama yaparız? Adım

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 Veri Yapıları - Algoritma ve programlama ... · Heap Sort Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları •Heap ağacı kullanarak nasıl sıralama yaparız? Adım

4 Celal 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 Veri Yapıları - Algoritma ve programlama ... · Heap Sort Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları •Heap ağacı kullanarak nasıl sıralama yaparız? Adım

5 Celal 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 Veri Yapıları - Algoritma ve programlama ... · Heap Sort Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları •Heap ağacı kullanarak nasıl sıralama yaparız? Adım

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

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

Page 7: YZM 2116 Veri Yapıları - Algoritma ve programlama ... · Heap Sort Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları •Heap ağacı kullanarak nasıl sıralama yaparız? Adım

7 Celal 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 Veri Yapıları - Algoritma ve programlama ... · Heap Sort Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları •Heap ağacı kullanarak nasıl sıralama yaparız? Adım

8 Celal 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 Şekli

i. Seviye-seviye (level-by-level)

ii. Soldan-sağa (left-to-right)

Page 9: YZM 2116 Veri Yapıları - Algoritma ve programlama ... · Heap Sort Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları •Heap ağacı kullanarak nasıl sıralama yaparız? Adım

9 Celal 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 Veri Yapıları - Algoritma ve programlama ... · Heap Sort Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları •Heap ağacı kullanarak nasıl sıralama yaparız? Adım

10 Celal 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 Veri Yapıları - Algoritma ve programlama ... · Heap Sort Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları •Heap ağacı kullanarak nasıl sıralama yaparız? Adım

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

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

0

1 2

4 3 5 6

7 8 9

Page 12: YZM 2116 Veri Yapıları - Algoritma ve programlama ... · Heap Sort Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları •Heap ağacı kullanarak nasıl sıralama yaparız? Adım

12 Celal 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 Veri Yapıları - Algoritma ve programlama ... · Heap Sort Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları •Heap ağacı kullanarak nasıl sıralama yaparız? Adım

13 Celal 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]): 3

Sağ çocuk indisi ([2*index+2]): 4

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

1 2

4 3 5 6

7 8 9

Page 14: YZM 2116 Veri Yapıları - Algoritma ve programlama ... · Heap Sort Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları •Heap ağacı kullanarak nasıl sıralama yaparız? Adım

14 Celal 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 Veri Yapıları - Algoritma ve programlama ... · Heap Sort Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları •Heap ağacı kullanarak nasıl sıralama yaparız? Adım

15 Celal 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 Veri Yapıları - Algoritma ve programlama ... · Heap Sort Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları •Heap ağacı kullanarak nasıl sıralama yaparız? Adım

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

Max ve Min Heap

Max Heap Min Heap

Page 17: YZM 2116 Veri Yapıları - Algoritma ve programlama ... · Heap Sort Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları •Heap ağacı kullanarak nasıl sıralama yaparız? Adım

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

Heap Gerçekleştirimi

Page 18: YZM 2116 Veri Yapıları - Algoritma ve programlama ... · Heap Sort Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları •Heap ağacı kullanarak nasıl sıralama yaparız? Adım

19

4 22 21 27

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 Veri Yapıları - Algoritma ve programlama ... · Heap Sort Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları •Heap ağacı kullanarak nasıl sıralama yaparız? Adım

• Adım 1: Yeni düğümü

seviye-seviye soldan-

sağa olacak şekilde ilk

uygun yere ekle.

19

4 22 21 27

23

45

35

42

Heap Insert(42)

Page 20: YZM 2116 Veri Yapıları - Algoritma ve programlama ... · Heap Sort Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları •Heap ağacı kullanarak nasıl sıralama yaparız? Adım

• 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

4 22 21 42

23

45

35

27

Heap Insert(42)

Page 21: YZM 2116 Veri Yapıları - Algoritma ve programlama ... · Heap Sort Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları •Heap ağacı kullanarak nasıl sıralama yaparız? Adım

19

4 22 21 35

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 Veri Yapıları - Algoritma ve programlama ... · Heap Sort Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları •Heap ağacı kullanarak nasıl sıralama yaparız? Adım

Heap Insert Gerçekleştirimi

Page 23: YZM 2116 Veri Yapıları - Algoritma ve programlama ... · Heap Sort Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları •Heap ağacı kullanarak nasıl sıralama yaparız? Adım

Max Elemanı Silme (RemoveMax)

19

4 22 21 35

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 Veri Yapıları - Algoritma ve programlama ... · Heap Sort Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları •Heap ağacı kullanarak nasıl sıralama yaparız? Adım

19

4 22 21 35

23

27

42

Max Elemanı Silme (RemoveMax)

• Adım 1: Tamamlandı.

Ancak, Heap

özelliğinin tekrar

kurulması gerekiyor.

Page 25: YZM 2116 Veri Yapıları - Algoritma ve programlama ... · Heap Sort Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları •Heap ağacı kullanarak nasıl sıralama yaparız? Adım

19

4 22 21 35

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 Veri Yapıları - Algoritma ve programlama ... · Heap Sort Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları •Heap ağacı kullanarak nasıl sıralama yaparız? Adım

19

4 22 21 35

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 Veri Yapıları - Algoritma ve programlama ... · Heap Sort Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları •Heap ağacı kullanarak nasıl sıralama yaparız? Adım

19

4 22 21 27

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 Veri Yapıları - Algoritma ve programlama ... · Heap Sort Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları •Heap ağacı kullanarak nasıl sıralama yaparız? Adım

Heap RemoveMax Gerçekleştirimi

Page 29: YZM 2116 Veri Yapıları - Algoritma ve programlama ... · Heap Sort Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları •Heap ağacı kullanarak nasıl sıralama yaparız? Adım

Heap RemoveMax Gerçekleştirimi

Page 30: YZM 2116 Veri Yapıları - Algoritma ve programlama ... · Heap Sort Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları •Heap ağacı kullanarak nasıl sıralama yaparız? Adım

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 Veri Yapıları - Algoritma ve programlama ... · Heap Sort Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları •Heap ağacı kullanarak nasıl sıralama yaparız? Adım

Ö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 Veri Yapıları - Algoritma ve programlama ... · Heap Sort Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları •Heap ağacı kullanarak nasıl sıralama yaparız? Adım

Ö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 Veri Yapıları - Algoritma ve programlama ... · Heap Sort Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları •Heap ağacı kullanarak nasıl sıralama yaparız? Adım

Ö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 Veri Yapıları - Algoritma ve programlama ... · Heap Sort Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları •Heap ağacı kullanarak nasıl sıralama yaparız? Adım

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 Veri Yapıları - Algoritma ve programlama ... · Heap Sort Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları •Heap ağacı kullanarak nasıl sıralama yaparız? Adım

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 Veri Yapıları - Algoritma ve programlama ... · Heap Sort Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları •Heap ağacı kullanarak nasıl sıralama yaparız? Adım

Heap Sort (devam…)

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

Page 37: YZM 2116 Veri Yapıları - Algoritma ve programlama ... · Heap Sort Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları •Heap ağacı kullanarak nasıl sıralama yaparız? Adım

Heap Sort (devam…)

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

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

O(nlogn)

Page 38: YZM 2116 Veri Yapıları - Algoritma ve programlama ... · Heap Sort Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları •Heap ağacı kullanarak nasıl sıralama yaparız? Adım

Örnek Sorular

Page 39: YZM 2116 Veri Yapıları - Algoritma ve programlama ... · Heap Sort Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları •Heap ağacı kullanarak nasıl sıralama yaparız? Adım

İYİ ÇALIŞMALAR…

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

Page 40: YZM 2116 Veri Yapıları - Algoritma ve programlama ... · Heap Sort Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları •Heap ağacı kullanarak nasıl sıralama yaparız? Adım

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ı