Review Mergesort and Solving Recurrence

18
RESUME KULIAH MERGE SORT DAN SOLVING RECURRENCE RINI ANGGRAINI S H121 11 010 LABORATORIUM KOMPUTASI

Transcript of Review Mergesort and Solving Recurrence

Page 1: Review Mergesort and Solving Recurrence

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

Page 2: Review Mergesort and Solving Recurrence

DIVIDE DAN CONQURE

Divide dan conquer merupakan metode untuk membuat suatu algoritma. 3 langkah Divide and Conquer

DivideBagi masalah dalam beberapa submasalah yang sama dengan masalah awal, tetapi ukurannya lebih kecil.

ConquerPecahkan submasalah secara rekursif.

CombineGabungkan 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.)

DivideBagi 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, S1 dan S2, masing-masing berisi sekitar setengah dari elemen S.

(misalkan S1berisi unsur pertama dari⎾ n/2⏋dan S2 berisi unsur-unsur ⎿ n/2⏌yang tersisa.

ConqurePecahkan submasalah secara rekursif. Mengurutkan urutan S1 dan S2 menggunakan MergeSort.

CombineGabungkan subsolusi dari submasalah menjadi solusi dari msalah awal. Mengembalikan elemen yang telah terurut ke S dengan menggabungkan urutan S1 dan S2 menjadi satu urutan yang telah terurut.

Page 3: Review Mergesort and Solving Recurrence

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

Page 4: Review Mergesort and Solving Recurrence

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++;

Page 5: Review Mergesort and Solving Recurrence

}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];

Page 6: Review Mergesort and Solving Recurrence

}

}

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++)

{

Page 7: Review Mergesort and Solving Recurrence

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))

Page 8: Review Mergesort and Solving Recurrence

{

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++;

}

}

Page 9: Review Mergesort and Solving Recurrence

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 Subtitusi2. Metode Iterasi3. Metode Master

Page 10: Review Mergesort and Solving Recurrence

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 : T (n )=4 T (n /2 )+n

Penyelesaian:

1. Perkirakan T (n )=O(n3), artinya T berasal dari c n3

2. Asumsikan T (k )≤ c k3 untuk k ≤ n/2, sehingga T (k )≤ c ¿¿¿3. Buktikan bahwa T (n)≤ c n3 dengan menggunakan induksi matematika

T (n )=4 T (n /2 )+n≤ 4 c¿¿¿≤ 4 c¿

¿ c2

n3+n

¿c n3−( cn

n3−n)≤ c n3, jika c ≥2 dan n≤ 1

Jadi, T (n )=O (n3 ) !

Dengan kata lain, harus memilih c cukup besar untuk menanganinya

T (n )=Θ (1 ) dimana n<n0 untuk beberapa n0

Pencapaian Batas Ketat

Coba tunjukkan bahwa T (n )=O (n2 )

Asumsikan T ( k )≤ c k2

T (n )=4 T (n /2 )+n≤ 4 c¿¿¿¿cn2+n

≤ c n2, untuk tidak ada pilihan dari c>0.

Masalahnya? Kita tidak dapat menulis kembali persamaan

T (n )=c n2+(bilangan positif )

Page 11: Review Mergesort and Solving Recurrence

Seperti

T ( k )≤ c k2

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 T ( k )≤ c2 k2−c2 k untuk k<n

T (n )=4 T (n /2 )+n≤ 4¿¿c1 n2−2 c2n+n

¿c1 n2−c2 n−(c2n−n)

≤ c1n2−c2n, jika c2 ≥1

2. Metode Iterasi atau Pohon RekursifMerubah 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⏌)+ nBila bentuk rekursif diuraikan:

Metode iterasi sering digunakan untuk menghasilkan tebakan untuk metode substitusi.

Page 12: Review Mergesort and Solving Recurrence

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:

T (n )=T ¿

Secara Geometri:

Sehingga Pohon Rekursi untuk

T (n )=T ¿

Page 13: Review Mergesort and Solving Recurrence

3. Metode MasterMetode master menyediakan semacam “cookbook” untuk menyelesaikan persamaan rekursif dalam bentuk:

T (n )=aT (n/b )+ f (n)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-sortT (n )=2 T (n /2 )+Θ(n)

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

a. Kasus 1

T (n )=aT (n/b )+ f (n ) a ≥ 1, b>1

Jika, f(n) = O(nlogb(a-ε)), ε > 0  

maka T(n) = Θ(nlogba)

Contoh:T (n )=9 T ¿

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

=n2

Pada kasus diatas merupakan contoh kasus 1 karena

f ( n )=O (n log39−1 ) sehinggaT (n )=Θ (n2 ) .

b. Kasus 2

T (n )=aT (n/b )+ f (n ) a ≥ 1, b>1

jika  f(n) = Θ(nlogb

a)  

maka T(n) = Θ(nlogb

alog n)

Page 14: Review Mergesort and Solving Recurrence

dhi, cost setiap langkah adalah nlogb

a sehingga, padahal ada sebanyak log nlangkah, jadi T(n) = Θ(nlog

balog n)

Contoh: T (n )=¿

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

log3 /21=0 ,nlogba=1

Pada kasus diatas merupakan contoh kasus 2 karena

f ( n )=nlogba sehinggaT (n )=1. lgn

c. Kasus 3T (n )=aT (n/b )+ f (n ) a ≥ 1, 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 dgn faktor polinomial sehingga suku dominan adalah

f(n) + f(n/b) + f(n/b2)… O(f(n))

Contoh:T (n )=3 T ¿

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

nlogba=n

log43=O(n0.793)

Ω (n0.79+0.2 )=Ω ( n0.99 )=o(n)

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