JURUSAN MATEMATIKA FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM UNIVERSITAS HASANUDDIN MAKASSAR 2012
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.
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.
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.
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
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
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
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 ( ) ( ) ( )
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: ( ) ( )
3. Kasus 3 ( ) ( ) ( )
10
dhi, f(n) > nlogba dgn faktor polinomial sehingga suku dominan adalah f(n) + f(n/b) + f(n/b2) O(f(n)) Contoh: ( ) ( )
11