: : :
PRODI STATISTIKA JURUSAN MATEMATIKA FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM UNIVERSITAS HASANUDDIN MAKASSAR 2012
MERGE SORT
Merge sort merupakan algoritma pengurutan dalam ilmu komputer yang dirancang untuk memenuhi kebutuhan pengurutan atas suatu rangkaian data yang tidak memungkinkan untuk ditampung dalam memori komputer karena jumlahnya yang terlalu besar Divide : membagi persoalan menjadi beberapa sub-masalah yang memiliki kemiripan dengan persoalan semula namun berukuran lebih kecil (idealnya berukuran hampir sama). Conquer : memecahkan (menyelesaikan) masing-masing sub-masalah secara rekursif.
Combine : mengabungkan atau mengkombinasikan solusi masing-masing sub-masalah sehingga membentuk solusi persoalan semula.
Example 80 25 65 40 20 30 95 50
80
25
65
40
20
30
95
50
80
25
65
40
20
30
95
50
80
25
65
40
20
30
95
50
25
80
40
65
20
30
50
95
25
80
40
65
20
30
50
95
20
25
30
40
50
65
80
95
divide
combine
conquer
Berikut algoritma merge sort. void mergeSort(Object array[], int startIdx, int endIdx) { if (array.length != 1) { //Membagi rangkaian data, rightArr dan leftArr mergeSort(leftArr, startIdx, midIdx); mergeSort(rightArr, midIdx+1, endIdx); combine(leftArr, rightArr); } }
Berikut adalah contoh implementasi merge sort dengan menggunakan Java. public class mergeSort{ public static void main(String a[]){ int i; int array[] = {12,9,4,99,120,1,3,10}; System.out.println("\n\n RoseIndia\n\n"); System.out.println(" Selection Sort\n\n"); System.out.println("Values Before the sort:\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("Values after the sort:\n"); for(i = 0; i <array.length; i++) System.out.print(array[i]+" System.out.println(); System.out.println("PAUSE"); } 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++; } } } }
Output dari program di atas. C:\array\sorting>javac mergeSort.java C:\array\sorting>java mergeSort RoseIndia Selection Sort Values Before the sort: 12 1 9 3 4 4 99 9 120 12 1 3 10 120 Values after the sort: 10 99 PAUSE C:\array\sorting>_
RECURRENCE
RecuRrence merupakan persamaan atau pertidaksamaan yang menjelaskan sebuah fungsi yang bernilai lebih kecil dari inputnya. Cara menyelesaikan reccurence terbagi 3, yaitu sebagai berikut. 1. Metode Substitusi Metode ini digunakan dengan cara menebak solusi kemudian dibuktikan dengan induksi matematikanya. Example a. Selesaikan ( ) Jawab: Misalkan gunakan tebakan ( ( ) ( ) ( ) ( ) ( ) ( ) ) ( ) jika ( ) !
( )
benar untuk
2.
Metode Iterasi atau Pohon Rekursif Metode ini digunakan dengan cara mengubah bentuk rekursif menjadi bentuk penjumlahan, kemudian diselesaikan dengan menggambar pohon rekursifnya. Metode iterasi juga sering kali digunakan untuk menghasilkan tebakan untuk metode substitusi
Example. ( ) ( ) ( ( ( ) ( ) ( ) ( ( ( ) )) ( ( ))) ) ( )
( )
( )
( )
3.
Metode Master Metode ini digunakan untuk menyelesaikan persamaan rekursif dalam bentuk ( ) ( )
( ). Dalam metode master ini, tedapat tiga kasus umum yaitu sebagai berikut. (
( )
Jika ( ) Example.
), di mana
, maka ( )
( )
( ) ) dimana ( )
sehingga,
Jadi solusinya, ( )
Jika ( ) Example.
), maka
( )
sehingga,
Jadi solusinya, ( )
Jika ( )
( )
( ( ( ))
), di mana
dan
( )
( ) untuk
, maka
Example. Selesaikan ( ) Jawab: Pada bentuk ini, ( ( ) ( ( ) Jadi solusinya, ( ) ( ) ) ( ) ) sehingga, karena, ( ) !