Anda di halaman 1dari 11

TUGAS RESUME ALOGRITMA DAN STRUKTUR DATA

ALOGRITMA MERGE SORT & REKURSIF

NAMA NIM KELAS

: IMELDA WIDJAJA : H12111262 : STATISTIKA B (GENAP)

JURUSAN MATEMATIKA FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM UNIVERSITAS HASANUDDIN MAKASSAR 2012

ALGORITMA MERGE SORT | IMELDA WIDJAJA_H12111262

RESUME KULIAH
Sorting adalah proses menyusun elemen elemen dengan tata urut tertentu dan proses tersebut terimplementasi dalam bermacam aplikasi. Kita ambil contoh pada aplikasi perbankan. Aplikasi tersebut mampu menampilkan daftar account yang aktif. Hampir seluruh pengguna pada sistem akan memilih tampilan daftar berurutan secara ascending demi kenyamanan dalam penelusuran data. Beberapa macam algoritma sorting yaitu insertion sort, selection sort, merge sort dan quick sort. Pada saat ini kita akan membahas mengenai alogritma merge sort. Sebelum itu mari kita mengetahui garis besar dari konsep divide and conquer karena merge sort mengadaptasi pola tersebut. Pola Divide and Conquer Beberapa algoritma mengimplementasikan konsep rekursi untuk menyelesaikan permasalahan. Permasalahan utama kemudian dipecah menjadi sub-masalah, kemudian solusi dari sub-masalah akan membimbing menuju solusi permasalahan utama. Pada setiap tingkatan rekursi, pola tersebut terdiri atas 3 langkah: 1. Divide Memilah masalah menjadi sub masalah. membagi masalah menjadi beberapa submasalah yang memiliki kemiripan dengan masalah semula namun berukuran lebih kecil (idealnya berukuran hampir sama. 2. Conquer Selesaikan sub masalah tersebut secara rekursif. Jika sub-masalah tersebut cukup ringkas dan sederhana, pendekatan penyelesaian secara langsung akan lebih efektif 3. Kombinasi Mengkombinasikan solusi dari sub-masalah, yang akan membimbing menuju penyelesaian atas permasalahan utama atau mengabungkan solusi masing-masing submasalah sehingga membentuk solusi masalah semula.

ALGORITMA MERGE SORT | IMELDA WIDJAJA_H12111262

MERGE SORT Merge sort menggunakan pola divide and conquer. Dengan hal ini deskripsi dari algoritma dirumuskan dalam 3 langkah berpola divide-and-conquer. Berikut menjelaskan langkah kerja dari Merge sort. 1. Divide Memilah elemen elemen dari rangkaian data menjadi dua bagian. 2. Conquer Conquer setiap bagian dengan memanggil prosedur merge sort secara rekursif 3. Kombinasi Mengkombinasikan dua bagian tersebut secara rekursif untuk mendapatkan rangkaian data berurutan Proses rekursi berhenti jika mencapai elemen dasar. Hal ini terjadi bilamana bagian yang akan diurutkan menyisakan tepat satu elemen. Sisa pengurutan satu elemen tersebut menandakan bahwa bagian tersebut telah terurut sesuai rangkaian. Algoritma merge sort tediri dari dua bagian utama, yaitu bagian pembagian list menjadi sublistsublist yang lebih kecil dan bagian sort (pengurutan) dan merge (penggabungan) pada sublistsublist tersebut.

ALGORITMA MERGE SORT | IMELDA WIDJAJA_H12111262

IMPLEMENTASI MERGE SORT


Bentuk rekursif : a. suatu subrutin/fungsi/ prosedur yang memanggil dirinya sendiri. b. Bentuk dimana pemanggilan subrutin terdapat dalam body subrutin c. Dengan rekursi, program akan lebih mudah dilihat Bentuk rekursi bertujuan untuk : menyederhanakan penulisan program menggantikan bentuk iterasi Syarat bentuk rekursif: ada kondisi terminal (basis) ada subroutine call yang melibatkan parameter yang nilainya menuju kondisi terminal (recurrence) Gunakan implementasi merge sort berikut ini terhadap serangkaian data integer
class MergeSort { static void mergeSort(int array[], int startIdx, int endIdx) { if(startIdx == _____) { return; } int length = endIdx-startIdx+1; int mid = _____; mergeSort(array, _____, mid); mergeSort(array, _____, endIdx); int working[] = new int[length]; for(int i = 0; i < length; i++) { working[i] = array[startIdx+i]; } int m1 = 0; int m2 = mid-startIdx+1; for(int i = 0; i < length; i++) { if(m2 <= endIdx-startIdx) { if(m1 <= mid-startIdx) { if(working[m1] > working[m2]) { ALGORITMA MERGE SORT | IMELDA WIDJAJA_H12111262 4

array[i+startIdx] = working[m2++]; } else { array[i+startIdx] = _____; } else { array[i+startIdx] = _____; } } else { array[_____] = working[m1++]; } } } public static void main(String args[]) { int numArr[] = new int[args.length]; for (int i = 0; i < args.length; i++) { numArr[i] = Integer.parseInt(args[i]); } mergeSort(numArr, 0, numArr.length-1); for (int i = 0; i < numArr.length; i++) { System.out.println(numArr[i]); } } }

Keterangan kode program: 1. Operasi program menggunakan dua array yakni array dengan nama array dan wadah. Array wadah merupakan array kosong yang digunakan untuk menampung output dari proses sorting. 2. Mekanisme rekursif terjadi pada method recursiveMergeSort. Method ini selama proses sorting dilakukan proses pemanggilan secara berulang-ulang oleh method itu sendiri. 3. Kemudian terdapat juga method merge yang digunakan untuk menyatukan kembali elemen-elemen yang telah dibagi menjadi suatu array baru yang terurut. 4. Terakhir, ada method tampil yang digunakan untuk menampilkan data pada console, baik itu data yang belum terurut maupun yang telah terjadi proses sorting. 5. Berikut adalah output dari program di atas.

ALGORITMA MERGE SORT | IMELDA WIDJAJA_H12111262

Asymptotic Notations Big-oh O-Notation (g(n))={f(n): ada konstanta c positif dan bilangan bulat no nonnegatif bahwa 0 =f(n) = cg(n) untuk semua n & no} Contoh 20Tunjukkan bahwa T(n) = 2n2 + 6n + 1 = O(n2). Penyelesaian: 2n2 + 6n + 1 = O(n2) karena 2n2 + 6n + 1 = 2n2 + 6n2 + n2 = 9n2 untuk semua n =1 (C =9 dan n0 = 1). atau karena 2n2 + 6n + 1 = n2 + n2 + n2 = 3n2 untuk semua n = 6 (C =3 dan n0 = 6). Big-omega -Notation Menetapkan batas bawah dalam kompleksitas algoritma. f(n) = konstan dan, s.t. c g(n) Big-theta -Notation Batas rata-rata notation. f(n) = Q(g(n)) jika ada konstanta c1, c2, and n0, s.t. c1 g(n) f(n) c2 g(n) for n n0 f(n) untuk n n0 (g(n)) jika ada c

ALGORITMA MERGE SORT | IMELDA WIDJAJA_H12111262

PENYELESAIAN BENTUK REKURENS


Rekurens adalah persamaan atau pertidaksamaan yang menggambarkan suatu fungsi yang berhubungan dengan nilai inputan terkecil. Untuk mengetahui kompleksitas bentuk rekursif, maka T(n) harus diubah dalam bentuk yang bukan rekursif.Ada tiga macam cara untuk menyelesaikan masalah rekurens ini, yaitu : 1. Metode subtitusi Caranya dengan mencoba-coba ( menebak ) solusi dari rekurens tersebut. Dan membuktikannya dengan cara pembuktian induksi. Contoh cara coba coba :

Contoh kasus : Tentukan batas atas dari T(n) = 2(T(n/2)) + n Jawab: Pertama, dibuat guess dari solusinya adalah T(n) = O(n lg n) Kedua, dibuktikan dengan induksi matematis bahwa solusi di atas benar, yaitu dibuktikan bahwa T(n) c (nlgn) Basis untuk n = 2, T(2) = 2(T(2/2))+ 2 = 4 c (2lg2), dengan c 2 Anggap solusi diatas berlaku untuk n/2, yaitu T(n/2) c (n/2) lg (n/2) Dibuktikan bahwa solusi diatas berlaku untuk n Substitusikan pertidaksamaan T(n/2) c (n/2) lg (n/2) ke rekurensi, diperoleh: T(n) 2 (c (n/2) lg (n/2)) + n
ALGORITMA MERGE SORT | IMELDA WIDJAJA_H12111262 7

cn lg (n/2) + n cn lg (n) cn lg 2 + n = cn lg n cn + n cn lg n, untuk c 1 (terbukti) Jadi batas atas dari rekurensi diatas adalah T(n) = O (n lg n)

2. Metode Iterasi ( recursion-tree ) Dengan cara menjabarkan fungsi rekursif tersebut. Kemudian menggambarkan pohon rekursif tersebut. Sebagai contoh

T (n) T (n /3) T (2n /3) n

Maksudny disini n terbagai menjadi 2 cabang karena persamaan fungsi terdapat 2 T yaitu T(n)=T(n/3)+T(2n/3) Sedangkan cabang yang disebelah kiri dikalikan dengan dikalikan dengan dan cabang disebelah kanan

begitu terusnya sampai ke bawah. Sehingga nanti dapat dijumlah dan

disingkan menggunakan O(n log n).

ALGORITMA MERGE SORT | IMELDA WIDJAJA_H12111262

3. Metode master Jika diketahui suatu relasi rekurens

Dimana f(n) O(nd) dimana d0 maka

Contoh 1 : Diketahui suatu relasi rekurens

Dari relasi rekurens di atas, diperoleh a = 2, b = 2, d = 0. sehingga a>bd sehingga T(n) O(nlog2 2) atau T(n) O(n)

Contoh 2 : Pada algoritma Mergesort/Quick Sort, Menurut Teorema Master, a = 2, b = 2, d = 1, dan a = bd, maka relasi rekurens: T(n) = 2T(n/2) + cn = O(n log n)

Dalam metode master terdapat 3 kasus yang perlu diingat, namun sesudahnya bentukbentuk rekursif dapat diselesaikan dengan lebih mudah. 1. Kasus 1 ( ) ( ) ( )

ALGORITMA MERGE SORT | IMELDA WIDJAJA_H12111262

dhi, f(n) secara polinomial lebih kecil dari nlogba dengan faktor n, seginhha nlogba mendominasi. Contoh: ( ) ( ) a=9, b=3, f(n)=n Pada kasus diatas merupakan contoh kasus 1 karena ( ) ( ) sehingga ( ) ( )

2. Kasus 2 ( ) ( ) ( )

dhi, cost setiap langkah adalah nlogba sehingga, padahal ada sebanyak log n langkah, jadi T(n) = (nlogbalog n) Contoh: ( ) ( )

dimana a=1, b=3/2, f(n)=1

Pada kasus diatas merupakan contoh kasus 2 karena ( ) sehingga ( )

3. Kasus 3 ( ) ( ) ( )

ALGORITMA MERGE SORT | IMELDA WIDJAJA_H12111262

10

dhi, f(n) > nlogba dgn faktor polinomial sehingga suku dominan adalah f(n) + f(n/b) + f(n/b2) O(f(n)) Contoh: ( ) ( )

a=3, b=4, f(n)=n lg n ( ( ) ( ) ) ( )

Pada kasus diatas merupakan contoh kasus 3 karena f(n) mendominasi.

ALGORITMA MERGE SORT | IMELDA WIDJAJA_H12111262

11

Anda mungkin juga menyukai