Merge (Bireşim) Algoritmayı önce bir örnek üzerinde açıklayalım.

Benzer belgeler
Merge Sort Bireşen Sıralama

Insertion Sort. (Sokuşturma Sıralaması)

Quick Sort Algoritması (Hızlı Sıralama Algoritması)

Binary Search. (Yarılama) Bölüm Dizide Bir Öğe Arama

BMÜ-101 ALGORİTMA VE PROGRAMLAMAYA GİRİŞ LABORATUARI

İST 264 VERİ YAPILARI Bitirme Sınavı A Grubu

/*Aşağıda ki kodları doğru şekilde anlar ve kullanırsanız java da sınıfları biraz da olsa anlamış olursunuz.*/

Veri Yapıları ve Algoritmalar dönem

Lab7 DOĞU AKDENİZ ÜNİVERSİTESİ BİLGİSAYAR VE TEKNOLOJİ YÜKSEKOKULU BİLGİSAYAR PROGRAMCILIĞI. BTEP212 Java. Uygulama1: package javaapplication58;

Interface Comparator. Kılgılayan sınıf: Collator. Bildirimi: public interface Comparator

DÖNGÜLER BMÜ-101 ALGORİTMA VE PROGRAMLAMAYA GİRİŞ LABORATUARI BMÜ-101 ALGORİTMA VE PROGRAMLAMAYA DENEY-4 FÖYÜ GİRİŞ LABORATUARI.

D İ Z İ L E R A R R A Y S

Kıyametin Kopacağı Gün (Hanoi Bilmecesi)

Arasınav Örnek Soruları Bahar 2018

Class PriorityQueue. Class PriorityQueue<E> java.lang.object java.util.abstractcollection<e> java.util.abstractqueue<e> java.util.

JAVADA DİZİ İŞLEMLERİ

Sınav Dağılım & IMKB Endeks

JAVA PROGRAMLAMA DİLİ ÖZELLİKLERİ

YMT219 VERİ YAPILARI ÖDEV-1

I Java Veri Yapıları 1

Bire-bir Sahiplik İlişkisi ile İlgili Sorular:

BMÜ-112 ALGORİTMA VE PROGRAMLAMA-II LABORATUARI DENEY-2 FÖYÜ

Dizi ( Array ) ve Dizgi ( String )

C# Console Uygulamaları ifelse Yapıları 2

ByteArrayOutputStream

1. Her marka için 3 aylık satış toplamı nedir? (Tablodaki satır toplamları)

Class LinkedHashMap. Class LinkedHashMap java.lang.object java.util.abstractmap java.util.hashmap java.util.linkedhashmap. Kılgıladığı arayüzler:

Kodlanacak programlama dilinin kaynaklarından faydalanılarak kod yazımı yapılır.

KUYRUKLAR QUEUES. Doç. Dr. Aybars UĞUR

Karşılaştırma İşlemleri ve Koşullu İfadeler

Kodlanacak programlama dilinin kaynaklarından faydalanılarak kod yazımı yapılır.

Örnek 1: Programı yazın ve çalıştırın.

Bölüm 24. Java Ağ Uygulamaları 24.1 Java Appletleri. Bir Applet in Yaşam Döngüsü:

Java Programlama Dilinde Veri Tipleri. Yrd. Doç. Dr. Aybars UĞUR

1. Aşağıdaki program parçacığını çalıştırdığınızda result ve param değişkenlerinin aldığı en son değerleri ve programın çıktısını yazınız.

Bir c sınıfının doğal sıralaması ile tutarlı olması (be consistent with equals) demek, c sınıfı içindeki her e1 ve e2 nesnesi için

// hataları işaret eden referans

NESNEYE DAYALI PROGRAMLAMA 9. HAFTA UYGULAMA DERSİ

BİL-141 Bilgisayar Programlama I (Java)

GÜZ DÖNEMİ AKT105 BİLGİSAYAR PROGRAMLAMA DERSİ 4. UYGULAMA

BIL1202 ALGORİTMA VE PROGRAMLAMAYA GİRİŞ

Kılgıladığı arayüzler: Serializable, Cloneable, Map<K,V>, NavigableMap<K,V>, SortedMap<K,V>

Programın Akışının Denetimi. Bir arada yürütülmesi istenen deyimleri içeren bir yapıdır. Söz dizimi şöyledir:

Bölüm 6. Karma. Olcay Taner Yıldız. O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, / 31

7. HAFTA. Erişim Belirleyiciler

Java String İşlemleri

BMÜ-111 Algoritma ve Programlama. Bölüm 5. Tek Boyutlu Diziler

GÜZ DÖNEMİ AKT105 BİLGİSAYAR PROGRAMLAMA DERSİ 9. UYGULAMA

DÖNGÜLER BMÜ-111 ALGORİTMA VE PROGRAMLAMA-I YRD. DOÇ. DR. İLHAN AYDIN

Nesne tabanlı programlama nesneleri kullanan programlamayı içerir. Bir nesne farklı olarak tanımlanabilen gerçek dünyadaki bir varlıktır.

BPR152-Algoritma ve Programlama II Uygulama -13

DATA STRUCTURES. Lab II Metotlar, Diziler ve Hata Ayıklama. Doç. Dr. Aybars UĞUR

11- FONKSİYONLAR (FUNCTIONS)

BIL101 07/11/2012 Lab5 Programlama Sorulari

BM102 BİLGİSAYAR PROGRAMLAMA II LABORATUVAR UYGULAMALARI. 3Hafta

DATA STRUCTURES. Lab II Metotlar, Diziler ve Hata Ayıklama. Prof. Dr. Aybars UĞUR

2 ALGORİTMA VE AKIŞ DİYAGRAMLARI

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

CharArrayReader. Kılgıladığı Arayüzler: Bildirimi: Değişkenleri (fields): java.io.reader Sınıfından Kalıtsal Gelen Değişken:

Bölüm 8. Ayrık Küme. Olcay Taner Yıldız. O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, / 16

Java ile Nesneye Yönelik Programlama (Object Oriented Programming)

Programlama Dilleri 3

Klavyeden Basit Giriş/Çıkış İşlemleri

Java Class Yapısında Finalize Metotunun Kullanımı

Çoktan Seçmeli Değerlendirme Soruları Akış Şemaları İle Algoritma Geliştirme Örnekleri Giriş 39 1.Gündelik Hayattan Algoritma Örnekleri 39 2.Say

İNÖNÜ ÜNİVERSİTESİ MÜH. FAK. BİLGİSAYAR MÜH. BÖL. ALGORİTMA VE PROGRAMLAMA 2 DERSİ LAB. ÖDEVİ

Ders - 7 while döngüsü

BİL132 Bilgisayar Programlama II

Android Ders Notları

Dizi türündeki referanslar, dizi nesnelerine bağlanmaktadır. Dizi referansları tanımlamak bu dizinin hemen kullanılacağı anlamına gelmez...

HSancak Nesne Tabanlı Programlama I Ders Notları

Veri Modelleri. Ağaç Veri Modeli. Ağaç Veri Modeli

KUYRUKLAR. Doç. Dr. Aybars UĞUR

C# da basit console uygulamaları. C# da basit console uygulamaları

MAT213 BİLGİSAYAR PROGRAMLAMA I DERSİ Ders 11: Metot Kavramı

Java 2 Standart Edition SDK Kurulum ve Java ya Giriş

Chain of Responsibility Tasarım Şablonu KurumsalJava.com

while(), do-while(), for() M.İLKUÇAR 2010 MAKU-MYO

Cybersoft Bilişim Teknolojileri Sunucu Tarafı Programlaması Kursu Final soruları. Tarih: 27 Kasım 2010 Saat: 13:30 Süre: 3 saat

Nesne Tabanlı Programlama

Yigin & Kuyruk {\} /\ Suhap SAHIN Onur GÖK

PAKET ERİŞİMLERİ SINIFLARIN YENİDEN KULLANIMI. BMU-112 Algoritma ve Programlama-II Yrd. Doç.Dr. İlhan AYDIN

Nesne Yönelimli Programlama

Burak Kıymaz JAVA FX

İlgili Konular: Object.equals(java.lang.Object), Object.hashCode(), rehash(), Collection, Map, HashMap, TreeMap, Serialized Form

Bölüm 5. Ağaç. Olcay Taner Yıldız. O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, / 73

C# Çalışma Örnekleri

Görsel Programlama DERS 03. Görsel Programlama - Ders03/ 1

Java Programlamada Paket Yapısı Ve Import

/*int sayi1, sayi2,toplam=0;

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 8. Yrd.Doç.Dr.Hacer Karacan

Đlgili konular: Collection, Set, HashSet, Comparable, Comparator, TreeMap, Collections.synchronizedSortedSet(SortedSet), Serialized Form

Programlama Dillerinde Kullanılan Veri Tipleri

abstract Sınıflar 1 Sınıf sınıf1 new class Ama aşağıdaki şekilde referans alınabilir;

MAT213 BİLGİSAYAR PROGRAMLAMA I DERSİ Ders 1: Programlamaya Giriş

BİL1001 Bilgisayar Bilimlerine Giriş 1

RSA ANAHTAR DAĞITIMI VE RSA İLE DİJİTAL İMZA OLUŞTURMA

JAVA PROGRAMLAMAYA GİRİŞ

BİL-141 Bilgisayar Programlama I (Java)

Transkript:

Merge (Bireşim) Her biri kendi içinde artan yönde sıralanmış ve aynı veri tipinden olan a ve b dizileri (array) verilsin. Bu iki diziyi birleştirip sıralı bir dizi yapmak istiyoruz. Tabii, birisini ötekinin sonuna ekleyip, sonra bireşen diziyi sıralamayı düşünebiliriz. Ama bireşme işlemi yapılırken sıralamanın da yapılması zaman kazandıracak ve algoritmayı daha etkin kılacaktır. Bu yöntem, ayrıca, iyi bir sıralama yöntemi olacaktır. Algoritmayı önce bir örnek üzerinde açıklayalım. int [] a = {2, 4, 5, 8 ; int [] b = {1, 3, 7, 9, 15, 24; dizileri verilsin. a ve b nin öğelerini bir c dizisine sıralı olarak taşıyacağız. Bu taşımanın yapılabilmesi için c nin öğe sayısının a ile b nin öğeleri toplamından az olmaması gerektiği açıktır. Örnerğimizde a nın öğe sayısı 4, b nin öğe sayısı 6 olduğuna göre, int tipinden olan ve öğe sayısı enaz 4 + 6 = 10 olan bir dizi bildirimi yapmalıyız. a,b,c dizilerini aşağıdaki gibi gösterelim ve yapılacak işlemleri adım adım izleyelim. c Algoritmanın Adımları: 1. a ile b nin ilk öğelerini mukayese edecek ve küçük olanı c[0] yerine yazacağız. Bu işlem c[0 = 1 olması demektir. b dizisinden c dizisine taşınan 1 öğesini b dizisinden atalım. 2. a ve b dizisinden giden öğeler kırmızı ile, c dizisine taşınmış öğeler ise mavi ile gösterilmiştir. c 1 3. a dizisinin ilk öğesi ile b dizisinde taşınmadan geri kalan altdizinin ilk öğesini mukayese edip, küçük olanı c[1] yerine taşıyoruz. Bu işlem sonunda c[1] = 2 olur ve a nın ilk terimi atılır. c 1 2 4. a dizisinde taşınmadan geri kalan alt dizinin ilk öğesi ile b dizisinde taşınmadan geri kalan altdizinin ilk öğesini mukayese edip, küçük olanı c[2] yerine taşıyoruz. Bu işlem sonunda c[2] = 3 olur ve b nin ikinci terimi atılır. c 1 2 3 1

5. a ya da b dizisinden birisinin terimleri bitene kadar bu algoritmayı uygulayacağız. Bu demektir ki, a dizisinde taşınmadan geri kalan alt dizinin ilk öğesi ile b dizisinde taşınmadan geri kalan altdizinin ilk öğesini mukayese edip, küçük olanı c dizisinde ilk boş yere taşıyacağız. Bu işlemlerin sonunda şeklimiz şöyle olur: c 1 2 3 4 5 7 8 6. a dizisinde taşınacak öğe kalmadığı için, b nin geri kalan terimlerinin hepsini c ye sırayla taşıyacağız. c 1 2 3 4 5 7 8 9 15 24 Bu söylediklerimizi bir yalancı kod (pseudo code) haline getirelim: a dizisini a[asol...asağ], b dizisini b[bsol...bsağ] ve c dizisini c[csol...csağ] ile gösterelim. Burada xsol ve xsağ bir x dizisinin ilk ve son terimlerinin indislerini gösteriyor olsunlar. a ile b dizilerinin sıralı olduğunu varsayıyoruz. Bu ikisinin terimleri, sıralı olması istenen c dizinine taşınarak bireştirilecektir. 1. i = asol, set j = bsol, and set k = csol. 2. while i < asağ and j < bsağ, repeat: 2.1. if a[i] <= b[j]: 2.1.1. c[k]= a[i] 2.1.2. i++ ve k++. 2.2. değilse, if a[i] >= d2[j]: 2.2.1. b[j] into c[k] = b[j] 2.2.2. 7++ ve k++. 3. while i < asağ, repeat: 3.1. c[k] = a[i]. 3.2. i++ ve k++. 4. while j < bsağ, repeat: 5. Dur. 4.1. b[j] into c[k]= b[j] 4.2. j++ ve k++. 2

Şimdi yukarıdaki pseudo kodları java kodlarına dönüştürerek, iki diziyi bireştiren bir java metodu yazalım: // (a.length + b.length) <= c.length olmalıdır. public void bireştir(int[] a, int[] b, int[] c) { int i, j, k, m, n; i = 0; j = 0; k = 0; m = a.length; n = b.length; while (i < m && j < n) { if (a[i] <= b[j]) { c[k] = a[i]; i++; else { c[k] = b[j]; j++; if (i < m) { for (int p = i; p < m; p++) { c[k] = a[p]; else { for (int p = j; p < n; p++) { c[k] = b[p]; Şimdi merge metodunu içeren bir java uygulama programı yazalım: // package merge; import java.util.arrays; public class Merge01 { int[] a = { 2, 4, 5, 8 ; int[] b = { 1, 3, 7, 9, 15, 24 ; 3

int[] c; public void bireştir(int[] a, int[] b, int[] c) { int i, j, k, m, n; i = 0; j = 0; k = 0; m = a.length; n = b.length; while (i < m && j < n) { if (a[i] <= b[j]) { c[k] = a[i]; i++; else { c[k] = b[j]; j++; if (i < m) { for (int p = i; p < m; p++) { c[k] = a[p]; else { for (int p = j; p < n; p++) { c[k] = b[p]; public static void main(string[] args) { Merge01 m = new Merge01(); m.c = new int[12]; m.bireştir(m.a, m.b, m.c); System.out.println(Arrays.toString(m.a)); System.out.println(Arrays.toString(m.b)); System.out.println(Arrays.toString(m.c)); İstenirse, yukarıdaki java kodları daha kısa yazılabilir: Aşağıdaki metotta Comparable yerine öğeleri sıralanabilen herhangi bir veri tipi alınabilir. Örneğin, int, long, float, String, vb. void bireştir (String[] aaa, int asol, int asağ, String[] bbb, int bsol, int bsağ, String[] ccc, int csol) { // Merge: aaa[asol...asağ ] ile b[bsol...bsağ] dizileri // ccc[csol...] diziinde bireşiyor.(aaa ve bbb sıralıdır). int i = asol, j = bsol, k = csol; while (i <= asağ && j <= bsağ) { int comp = aaa[i].compareto(bbb[j]); if (comp <= 0) 4

else while (i <= asağ) while (j <= bsağ) Bunu kullanan bir java uygulaması yazalım: //package bireşim; import java.util.arrays; public class Merge02 { String[] a = {"kartal", "şahin", "tilki", "fare"; String[] b = {"zebra", "kaplan", "aslan", "güvercin", "kanarya", "at"; String[] c ; void bireştir (String[] aaa, int asol, int asağ, String[] bbb, int bsol, int bsağ, String[] ccc, int csol) { // Merge: aaa[asol...asağ ] ile b[bsol...bsağ] dizileri // ccc[csol...] diziinde bireşiyor.(aaa ve bbb sıralıdır). int i = asol, j = bsol, k = csol; while (i <= asağ && j <= bsağ) { int comp = aaa[i].compareto(bbb[j]); if (comp <= 0) else while (i <= asağ) while (j <= bsağ) public static void main(string[] args) { Merge02 m = new Merge02(); m.c = new String[12]; m.bireştir(m.a,0,3, m.b,0,5, m.c,0); System.out.println(Arrays.toString(m.a)); System.out.println(Arrays.toString(m.b)); System.out.println(Arrays.toString(m.c)); /* Çıktı: [kartal, şahin, tilki, fare] [zebra, kaplan, aslan, güvercin, kanarya, at] [kartal, zebra, kaplan, aslan, güvercin, kanarya, at, şahin, tilki, fare, null, null] */ 5