Anda di halaman 1dari 14

RESUME KULIAH

MERGE SORT DAN SOLVING RECURRENCE
















RINI ANGGRAINI S
H121 11 010






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

DIVIDE DAN CONQURE

Divide dan conquer merupakan metode untuk membuat suatu algoritma. 3 langkah Divide
and Conquer
Divide
Bagi masalah dalam beberapa submasalah yang sama dengan masalah awal, tetapi
ukurannya lebih kecil.

Conquer
Pecahkan submasalah secara rekursif.

Combine
Gabungkan subsolusi dari submasalah menjadi solusi dari masalah awal.

MERGE SORT : ALGORITMA

MergeSort adalah algoritma pengurutan yang berdasarkan pada metode DIVIDE dan
CONQURE.

(Simulasi MergeSort dapat dilihat di http://www.cse.iitk.ac.in/users/dsrkg/cs210/applets/sortingII/mergeSort/mergeSort.html.)

- Divide
Bagi masalah dalam beberapa submasalah yang sama dengan masalah awal, tetapi
ukurannya lebih kecil.
Jika S setidaknya terdapat dua elemen (tidak ada yang perlu dilakukan jika S nol atau
satu elemen), hapus semua elemen dari S dan tempatkan mereka kedalam dua bagian
urutan bilangan,

, masing-masing berisi sekitar setengah dari elemen S.


(misalkan

berisi unsur pertama daridan

berisi unsur-unsur yang


tersisa.

- Conqure
Pecahkan submasalah secara rekursif. Mengurutkan urutan

menggunakan
MergeSort.

- Combine
Gabungkan subsolusi dari submasalah menjadi solusi dari msalah awal.
Mengembalikan elemen yang telah terurut ke S dengan menggabungkan urutan

menjadi satu urutan yang telah terurut.









Pseucode MergeSort :









Perhatikan Contoh dalam gambar dibawah ini :

Misalkan kita mau mengurutkan beberapa angka yaitu 38,27,43,3,9,82 dan 10. Maka untuk
mengurutkan menggunakan merge-sort langkah-langkahnya seperti gambar dibawah ini









IMPLEMENTASI MERGESORT :

Algoritma untuk prosedur MergeSortnya

mergesort(low, high)

{

int mid;

if(low<high)

{

mid=(low+high)/2;

mergesort(low,mid);

mergesort(mid+1,high);

merge(low,high,mid);

}

)

Merge( low, mid, high)

{

int h,i,j,k,b[50];

h=low;

i=low;

j=mid+1;

while((h<=mid)&&(j<=high))

{

if(A[h]<A[j])

{

b[i]=A[h];

h++;

}else{

b[i]=A[j];

j++;

}

i++;

}

if(h>mid)

{

for(k=j;k<=high;k++)

{

b[i]=A[k];

i++;

}

}

else

{

for(k=h;k<=mid;k++)

{

b[i]=A[k];

i++;

}

}

for(k=low;k<=high;k++)

{

A[k]=b[k];

}

}

Nah sekarang kita coba coding with c++

#include <iostream>

using namespace std;

void MergeSort(int low, int high);

void Merge(int , int , int );

int A[50];

int main()

{

int i, elemen;

cout<<"Berapa banyak elemen yang ingin disusun ? "; cin>>elemen;

cout<<endl;

cout<<"Masukkan " <<elemen<<" elemen: \n";cout<<endl;

for(i=1;i<=elemen;i++)

{

cout << "Elemen ke-"<<i<<" = ";

cin>>A[i];

}

cout<<endl;

MergeSort(1,elemen);

cout<<endl;

cout<<"Setelah di mergesort: \n\n";

for(i=1;i<=elemen;i++)

{

cout<< A[i] <<" ";

}

cout<< endl << endl;

return 0;

}

//prosedure Mergesort

void MergeSort(int low, int high)

{

int mid;

if(low<high)

{

mid = (low+high)/2;

MergeSort(low,mid);

MergeSort(mid+1, high);

Merge(low, mid, high);

}

}

//Prosedure Merge

void Merge(int low, int mid, int high)

{

int h,i,j,k,b[50];

h=low;

i=low;

j=mid+1;

while((h<=mid)&&(j<=high))

{

if(A[h]<A[j])

{

b[i]=A[h];

h++;

}else{

b[i]=A[j];

j++;

}

i++;

}

if(h>mid)

{

for(k=j;k<=high;k++)

{

b[i]=A[k];

i++;

}

}else{

for(k=h;k<=mid;k++)

{

b[i]=A[k];

i++;

}

}

for(k=low;k<=high;k++)

{

A[k]=b[k];

}

}

Outputnya


RECURRENCE (REKURSIF)

Rekursif adalah fungsi yang memanggil dirinya sendiri secara langsung ataupun tidak,
dan proses pemanggilannya itu disebut rekursi.

Masalah yang dapat diselesaikan secara rekursif adalah masalah yang dibagi menjadi
satu atau lebih masalah-masalah serupa yang lebih kecil.

SOLVING RECURRENCE

Terdapat 3 metode yang dapat kita gunakan untuk pemecahan rekursif, yaitu :
1. Metode Subtitusi
2. Metode Iterasi
3. Metode Master




1. Metode Subtitusi

Dimana kita mencoba memberi perkiraan awal untuk boundary (menebak solusi)
kemudian kita coba untuk membuktikan benar atau salahnya (verifikasi solusi dengan
induksi). Metode ini biasanya digunakan oleh orang yang sudah sangat ahli
dibidangnya.

Misalkan : () ( )

Penyelesaian:

1. Perkirakan () (

), artinya T berasal dari


2. Asumsikan ()

untuk , sehingga () ( )


3. Buktikan bahwa ()

dengan menggunakan induksi matematika


() ( )
( )


((

, jika
Jadi, () (

)
Dengan kata lain, harus memilih c cukup besar untuk menanganinya
() ()


Pencapaian Batas Ketat
Coba tunjukkan bahwa () (

)
Asumsikan ()


() ( )
( )

, untuk tidak ada pilihan dari


Masalahnya? Kita tidak dapat menulis kembali persamaan
()

( )

Seperti
()


Guna untuk menunjukkan ketidaksamaan yang kita inginkan.
Terkadang untuk membuktikan langkah induktif, cobalah untuk memperkuat
hipotesis Anda.
T(n) (Jawaban yang anda inginka ) - (suatu bilangan > 0)

Perbaikan Bukti: idenya adalah untuk memperkuat hipotesis induktif dengan
mengurangi ketentuan rendah-order!
Asumsikan ()


() ( )
(

( )

( ) )

, jika




2. Metode Iterasi atau Pohon Rekursif
Merubah recurrence kedalam sebuah pohon struktur yang memiliki cabang yang
memperlihatkan nilai jumlah yang ada pada setiap tingkatan pada recurse. Prinsip dari
metode iterasi adalah menjabarkan rekurensi sebagai suatu bentuk penjumlahan yang
hanya bergantung pada n dan syarat awal. Dalam pohon rekursi, setiap node mewakili
nilai subproblem tunggal di suatu tempat di set fungsi rekursif.

Contoh :
T(n) = 3T(n/4)+ n
Bila bentuk rekursif diuraikan:











- Metode iterasi sering digunakan untuk menghasilkan tebakan untuk metode substitusi.
( )
( ) ( )
( ) ( ) ( )
( )
( )
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

- Harus tahu aturan dan memiliki intuisi untuk aritmatika dan seri geometrik.
- Matematika bisa berantakan dan sulit.
- Fokus pada dua parameter
berapa kali pengulangan perlu mengulangi untuk mencapai kondisi
batas
jumlah istilah yang timbul dari setiap tingkat proses iterasi
Pohon Rekursi
Sebuah pohon rekursi adalah cara mudah untuk memvisualisasikan apa yang terjadi ketika
rekursif adalah sebuah iterasi
Konstruksi pohon rekursi:
() ( ) ( )






Secara Geometri:





Sehingga Pohon Rekursi untuk
() ( ) ( )









3. Metode Master
Metode master menyediakan semacam cookbook untuk menyelesaikan persamaan
rekursif dalam bentuk:
() ( ) ()
dengan a 1 dan b > 1 adalah konstanta dan f(n) adalah fungsi yang secara asimtotik
positif.
Secara abstrak, T (n) adalah runtime untuk algoritma dan kita tahu bahwa:
- suatu submasalah ukuran n / b diselesaikan secara rekursif, masing-masing
dalam waktu T (n / b)
- f (n) adalah biaya membagi masalah dan menggabungkan hasil. Dalam merge-
sort () ( ) ()

Dalam metode master terdapat 3 kasus yang perlu diingat, namun sesudahnya
bentuk-bentuk rekursif dapat diselesaikan dengan lebih mudah.

a. Kasus 1

() ( ) ()


Jika, f(n) = O(n
log
b
(a-)
), > 0
maka T(n) = (n
log
b
a
)

Contoh:
() ( )

a=9, b=3, f(n)=n


Pada kasus diatas merupakan contoh kasus 1 karena
() (

) sehingga () (

)

b. Kasus 2

() ( ) ()

jika f(n) = (n
log
b
a
)
maka T(n) = (n
log
b
a
log n)

dhi, cost setiap langkah adalah n
log
b
a
sehingga, padahal ada sebanyak log n
langkah, jadi T(n) = (n
log
b
a
log n)
Contoh:
() ( )
dimana a=1, b=3/2, f(n)=1


Pada kasus diatas merupakan contoh kasus 2 karena
()

sehingga ()
c. Kasus 3
() ( ) ()


jika f(n) = (n
log
b
(a+)
), > 0 dan a f(n/b) c f(n) untuk c < 1
maka T(n) = (f(n))

dhi, f(n) > n
log
b
a
dgn faktor polinomial sehingga suku dominan adalah
f(n) + f(n/b) + f(n/b
2
) O(f(n))
Contoh:
() ( )
a=3, b=4, f(n)=n lg n

)
(

) (

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