You are on page 1of 7

Algoritma & Struktur Data

Merge Sort and Solving Reccurence





Ivan Zatria
H 121 11 902


1. Merge-Sort (contoh rekursif)
a. Pengertian
Merge Sort adalah sebuah algoritma pengurutan data yang ditemukan oleh John von
Neumann pada tahun 1945, algoritma ini merupakan bagian dari ilmu komputer
yang dirancang untuk mengurutkan data yang jumlahnya sangat besar.[1]
b. Algoritma
Prinsip mendasar yang di gunakan pada algoritma merge sort sering disebut atau
mengikuti pola pecah belah dan taklukan (divide and conquer).[2]
c. Pola divide and Conquer, adalah banyak diadopsi oleh beberapa alogirtma yang
pada dasarnya mengimplementasikan konsep rekursi (adalah cara untuk
menetapkan proses dengan dirinya sendiri) untuk memecahkan permasalahan.
Caranya adalah permasalahan utama dipecah menjadi sub-masalah, kemudian solusi
dari sub masalah akan di gabungkan untuk mendapatkan solusi dari masalah utama.
[3]
d. Pada setiap tingkat rekursi pola tersebut terdiri atas 3 langkah :
- Devide, yakni memilih masalah menjadi sub-masalah.
- Conquer, yakni menyelesaikan sub-masalah tersebut secara rekursi.
- Kombinasi/Penggabungan, menggabungkan solusi dari sub-masalah untuk
mendapatkan solusi dari masalah utama.

Algoritma merge sort membagi tabel menjadi dua tabel yang sama besar. Masing-masing
tabel diurutkan secara rekursif, dan kemudian digabungkan kembali untuk membentuk tabel
yang terurut. Implementasi dasar dari algoritma merge sort memakai tiga buah tabel, dua
untuk menyimpan elemen dari tabel yang telah di bagi dua dan satu untuk menyimpan elemen
yang telah terurut. Namun algoritma ini dapat juga dilakukan langsung pada dua tabel, sehingga
menghemat ruang atau memori yang dibutuhkan.
Contoh Program Merge Sort pada Java :
package merge_sort;
public class Main {
public static void main(String[] args) {

int i;
int array[] = {12,9,4,99,120,1,3,10};
System.out.print("nilai sebelum:\n");
for(i = 0; i < array.length; i++)
System.out.print( array[i]+" ");
System.out.println();
mergeSort_srt(array,0, array.length-1);
System.out.print("setelah sorting:\n");
for(i = 0; i <array.length; i++)
System.out.print(array[i]+" ");
System.out.println();

}


public static void mergeSort_srt(int array[],int lo, int n){
int low = lo;
int high = n;
if (low >= high) {
return;
}

int middle = (low + high) / 2;
mergeSort_srt(array, low, middle);
mergeSort_srt(array, middle + 1, high);
int end_low = middle;
int start_high = middle + 1;

while ((lo <= end_low) && (start_high <= high)) {
if (array[low] < array[start_high]) {
low++;
} else {
int Temp = array[start_high];
for (int k = start_high- 1; k >= low; k--) {
array[k+1] = array[k];
}
array[low] = Temp;
low++;
end_low++;
start_high++;
}
}
}


}
berikut hasil pendeklarasiannya :


- Divide
Partisilah {12,9,4,99,120,1,3,10} ke dalam dua buah subarray {12,9,4,99} dan
{120,1,3,10} sedemikian hingga tiap elemen pada tersebut senantiasa lebih kecil atau sama
dengan subarray yang pertama dan tiap elemen pada subarray yang kedua senantiasa sama
atau lebih besardari subarray yang pertama

- Conquer
Urutkan (sorting-lah) subarray yang pertama {12,9,4,99} dan subarray yang kedua
{120,1,3,10} secara rekursif

- Combine
Kedua subarray telah diurutkan pada posisi masing-masing,
sehingga tidak diperlukan upaya khusus untuk mengkombinasikan
mereka. {12,9,4,99,120,1,3,10} telah ter-sorting menjadi {1,3,4,9,10,12,99,120}.

2. Metode Penyelesaian Recurrence
Metode penyelesaian secara Recurrences ada tiga cara, yaitu :
a. Metode Subtitusi
b. Metode Iterasi
c. Metode pohon rekursi

a. Metode Subtitusi
Penyelesaian Metode subtitusi ini dilakukan dengan dua tahap :
1. Dengan cara menebak solusi atau dengan kata lain hipotesis untuk solusi penyelesaiannya.
2. Membuktikan hasil hipotesis dengan metode induksi matematika.

Contoh :
() (

)
a. Memperkirakan bahwa () (

) , contohnya di ubah dalam bentuk


b. Asumsikan bahwa ()

untuk

dan
c. Dengan membuktikan ()

menggunakan metode induksi


() (

) (dimasukkan berdasarkan nilai asumsi), sehingga


(


Sehingga () (

)






b. Metode Iterasi dan Pohon Rekursi

- Metode Iterasi digunakan untuk membuktikan hasil hipotesis pada metode subtitusi
- Fokus pada dua parameter
a. Memerlukan beberapa kali perulangan untuk mencapai kondisi batas
b. Total eksekusi yang muncul semakin meningkat setiapprosesnya.

sebagai contoh program penyelesaian secara iterasi:









Soal diatas dilakukan secara berulang-ulang terus secara rekursi (berulang-ulang).
Ada cara yang leebih cepat dalam menyelesaikan metode penyelesaian rekursi ini. Yaitu dengan
menggunakan metode pohon rekursi. Metode pohon rekursi adalah cara yang lebih mudah untuk
memvisualisasikan program yang dibuat ketika dalam bentuk program rekursi secara iterasi.
Contoh :
Visualisasikan program berikut dengan metode pohon rekursi
() (






( )
( ) ( )
( ) ( ) ( )
( )
( )
4
4
4
log
log 1
log 3
0
( ) 3 / 4
3 / 4 3 /16
3 / 4 3 /16 3 / 64
3 / 4 9 /16 27 / 64
( ) 3 / 4 9 /16 27 / 64 ... 3 (1)
3

4
4 ( )
( )
n
i
n
i
T n n T n
n n T n
n n n T n
n n n T n
T n n n n n T
n n
n o n
O n

=
= + (

= + + ( (

= + + + ( ( (

= + + + ( ( (

= + + + + +
| |
s + O
|
\ .
s +
s


()


()


()


()


()


()


3. Master Method
Master Methode ialah salah satu metode penyelesaian running time dengan 3 cara yang
berbeda untuk 3 jenis kasus yang berbeda pula.
Berdasarkan program recurrence maka ada 3 kasus yang diberikan,
yaitu:






Ketiga persamaan tersebut tidak dapat diselesaikan dengan 1 master method yang sama,
melainkan dengan 3 master method yang berbeda untuk ketiga problem di atas.

() (

() (

)
}

() (

()
()



() (

()

}

Sumber referensi : http://contoh-program-java.blogspot.com/2011/11/source-code-program-
mergesort.html

( ) ( / ) ( ) T n aT n b f n = +
( )
( )
( )
( )
( )
( )
log
log
log
log
log
0
1. ( )
( )
2. ( )
( ) lg
3. ( ) and ( / ) ( ), for some 1,
( ) ( )
b
b
b
b
b
a
a
a
a
a
f n O n
T n n
f n n
T n n n
f n n af n b cf n c n n
T n f n
c
+c
=
= O
= O
= O
= O s < >
= O

You might also like