Anda di halaman 1dari 7

TUGAS ALGORITMA DAN STRUKTUR DATA

Merge Sort Metode Penyelesaian Rekurensi

OLEH:

LESTARI IRFANDI AMIR H12111281 STATISTIKA

JURUSAN MATEMATIKA FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM UNVERSITAS HASANUDDIN 2012

Merge Sort

Merge Sort adalah algoritma yang berdasarkan strategi divide-and-conquer. Algoritma ini tediri dari dua bagian utama, yaitu bagian pembagian list menjadi sublist-sublist yang lebih kecil dan bagian sort (pengurutan) dan merge (penggabungan) pada sublist-sublist tersebut. Divide: membagi masalah menjadi beberapa submasalah yang memiliki kemiripan dengan masalah semula namun berukuran lebih kecil (idealnya berukuran hampir sama), Conquer: memecahkan (menyelesaikan) masing-masing submasalah (secara rekursif), dan Combine: mengabungkan solusi masing-masing submasalah sehingga membentuk solusi masalah semula.

Contoh: Misalkan diberikan rangkaian data: 9,8,5,3,6,7,5,8,2,6,1,4

Divide 9 8 5 3 6 7 5 8 2 6 1 4

Divide 9 8 5 3 6 7 5 8 2 6 1 4

Divide 9 8 5 3 6 7 5 8 2 6 1 4

Conquer

Combine 3 5 6 7 8 9 1 2 4 5 6 8

Combine 1 2 3 4 5 5 6 6 7 8 8 9

Sebagai catatan, pengkombinasian dilakukan dengan cara pembandingan. Elemen yang nilainya lebih kecil akan masuk ke kotak terlebih dahulu dan mengisi bagian disebelah kiri terlebih dahulu.Pada merge sort, data yang akan digabungkan berada pada suatu array, sebutlah array x dan array yang digunakan untuk menampung hasil gabung adalah array yang berbeda dari array x tersebut, sebutlah array y. Penyalinan elemen data dari array x ke array y ditentukan oleh hasil perbandingan data kelompok pertama x(i) dan data kelompok setelahnya x(j). Apabila nilai x(i) lebih kecil dibanding x(j) maka x(i) disalin ke y(k) kemudian indeks I dan k masing masing ditambah satu. Proses ini akan berulang sampai seluruh data habis diproses. Berikut adalah source code dari merge sort : void mergesort (int *x, int n) { int *r, i, j, k, l1, l2, u1, u2, size; r = (int *) malloc (n * sizeof (int)); size = 1; while (size < n) { l1 = 0; k = 0;

while (l1+size < n) { l2 = l1+size; u1 = l2 1; u2 = (l2 + size 1 < n) ? l2 + size 1 : n-1; for (i=l1; j=l2; i<=u1 && j<=u2; k++) r[k] = (x[i] <= x[j]) ? x[i++] : x[j++]; while (i<=u1) r[k++] = x[i++]; while (j<=u2) r[k++] = x[j++]; l1 = u2+1; } for(i=l1; k<n; i++) r[k++] = x[i]; for(i=0; i<n; i++) x[i] = r[i]; size *= 2; }

Metode Penyelesaian Rekurensi

Relasi Recurrence untuk barisan {an} adalah persamaan yang menyatakan an dalam satu atau lebih bentuk a0, a1, , an-1 untuk semua n dengan n n0 dimana n0 bilangan bulat non-negatif. Barisan {an} tersebut dikatakan sebagai solusi dari relasi recurrence ini bila an memenuhi relasi recurrence. Dalam menyelesaikan rekurensi, terbagi atas 3 metode:

1. Metode Subtitusi Metode dengan cara membuat tebakan terhadap solusinya, kemudian tebakan tersebut dibuktikan dengan induksi matematika. Contoh : Metode substitusi Diketahui :

T 1 1 T n T n n 2
T n O n T(n) = O(n),

Buktikan bahwa : Buat tebakan Berarti

T(n) cn

2. Metode (pohon) Rekursif Metode dengan cara mengubah bentuk rekursif menjadi bentuk penjumlahan, kemudian diselesaikan. Contoh 1: T(n) = 3T([n/4])+ n

Bila bentuk rekursif diuraikan: T(n) = n + 3T([n/4]) = n + 3([n/4]) + 3T(n/4[/4])) = n + 3([n/4]+ 3([n/16]+ 3T(n/64))) = n + 3n/4+ 9n/16+ 27T(n/64) Suku ke-i berbentuk 3in/4i. Oleh karena n berkurang sebesar 4 pada setiap iterasi, maka proses berlangsung sampai log4 N langkah T(n) n + 3n/4 + 9n/16 + 27n/64 + . . .+ 3log4N N / N

Contoh 2: Tn = n + T(n) T(n) = n+2T(n/2)= n log2n, nilai n = (n/2) n n/2 n/4 n/4 n/4 n/2 n/4 n n n _ nk n log2n

3. Metode master Metode ini digunakan untuk menyelesaikan persamaan rekursif dalam bentuk : T(n) = aT(n/b) + f(n) Metode master menyediakan semacam cookbook untuk menyelesaikan persamaan rekursif dalam bentuk: T(n) = aT(n/b) + f(n) dengan a 1 dan b > 1 adalahkonstantadan f(n) adalahfungsi yang secara asimtotik positif. Dalam metode master perlu diingat 3 kasus, namun sesudahnya bentuk-bentuk rekursif dapat diselesaikan dengan lebih mudah, yaitu: Kasus I: T(n) = aT(n/b) + f(n) Jika f(n) = Maka T(n) = a1, b>1 >0 (nlogba)
b a

O(nlogb(a-)),

dhi, f(n) secara polynomial lebih kecil dari nlog nlogba mendominasi

dengan faktor

n, sehingga

Kasus II: T(n) = aT(n/b) + f(n) a1, b>1

Jika f(n) = (nlogba) maka T(n) = (nlogbalog n) dhi, cost setiap langkah adalah nlogba sehingga, padahal ada sebanyak log n langkah, jadi T(n) = (nlogbalog n) Kasus III: T(n) = aT(n/b) + f(n) a1, b>1

Jika f(n) = (nlogb(a+)), > 0 dan a f(n/b) c f(n) untuk c < 1 maka T(n) = (f(n)) dhi, f(n) >nlogba dengan factor polynomial sehingga suku dominan adalah f(n) + f(n/b) + f(n/b2) O(f(n))

Contoh: Gunakan metode Master untuk menentukan: T(n) = (?) bila : Solusi: a = 7, b = 2, f(n) = n2, nlog27 = n2.803.. n2 = O(nlog27 - ), oleh karena n2 cn2.803..- , c > 0 T(n) = (nlog27) T(n) = 7T(n/2) + n2

Anda mungkin juga menyukai