Download docx - Mergesort Dan Recurrence

Transcript
Page 1: Mergesort Dan Recurrence
Page 2: Mergesort Dan Recurrence

RINGKASAN MATERI

MERGESHORT : ALGORITMA

Merge sort merupakan salah satu algoritma yang digunakan untuk memecahkan masalah pengurutan/sorting. Merge sort menggunakan teknik tingkat lanjut dalam melakukan sorting yakni teknik membagi suatu deret elemen yangakan dilakukan sorting kemudian masing-masing bagian dilakukan sorting secara terpisah dalam mekanisme rekursif. Setelah tiap-tiap bagian dilakuka sorting maka akan dilakukan penyatuan kembali/merge sehingga menghasilkan suatu deret elemen yang terurut. Teknik sorting yang diterapkan oleh algoritma merge sort biasa disebut divide and conquer.

METODE UNTUK DESAIN ALGORITMA :

Divide : Jika ukuran data input sangat besar untuk dieksekusi secara langsung, bagi masalah menjadi dua atau lebih submasalah. 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, S1danS2, masing-masing berisi sekitar setengah dari elemen S. (misalkan S1berisi

unsur pertama dari n/2dan S2 berisi unsur-unsur n/2yang tersisa. Conquer : divide dan conquer rekursif untuk memecahkan submasalah.

Mengurutkan urutan S1danS2 menggunakan MergeSort. Combine : Ambil solusi untuk submasalah dan gabungkan solusi menjadi solusi untuk masalah

sebenarnya. Mengembalikan elemen yang telah terurut ke S dengan menggabungkan urutan S1danS2 menjadi satu urutan yang telah terurut.

Page 3: Mergesort Dan Recurrence

Contoh :

Diberikan Barisan:

91 88 52 36 44 79 101 94

LANGKAH 1:

91 88 52 44 79 101 94

LANGKAH 2:

44 79 101 94

91 88 52 36

LANGKAH 3:

KETERANGAN:

: Divide (Membagi Bilangan)

: Proses Divide

: Proses Conquer

: Proses Combine

Page 4: Mergesort Dan Recurrence

44 79 101 94

91 88 52 36

LANGKAH 4:

44 79 101 94

52 36

91 88

LANGKAH 5:

44 79 101 94

52 36

Page 5: Mergesort Dan Recurrence

88

LANGKAH 6:

44 79 101 94

52 36

91

LANGKAH 7 :

44 79 101 94

91

88

Page 6: Mergesort Dan Recurrence

52 36

91 88

LANGKAH 8 :

44 79 101 94

52 36

88 91

LANGKAH 9 :

44 79 101 94

88 91

Page 7: Mergesort Dan Recurrence

LANGKAH 10 :

44 79 101 94

88 91

LANGKAH 11 :

44 79 101 94

52

52 36

36

Page 8: Mergesort Dan Recurrence

88 91

LANGKAH 12 :

44 79 101 94

88 91

LANGKAH 13:

44 79 101 94

36

52

52 36

Page 9: Mergesort Dan Recurrence

88 91

LANGKAH 14:

44 79 101 94

88 91 36 52

LANGKAH 15:

44 79 101 94

36 52

Page 10: Mergesort Dan Recurrence

36 52 88 91

LANGKAH 16:

36 52 88 91 44 79 101 94

LANGKAH 17:

36 52 88 91

Page 11: Mergesort Dan Recurrence

LANGKAH 18:

36 52 88 91

LANGKAH 19:

36 52 88 91 44 79 94 101

44 79 101 94

44 79 94 101

Page 12: Mergesort Dan Recurrence

LANGKAH 20:

36 44 52 79 88 91 94 101

Jadi, hasil akhirnya adalah

36 44 52 79 88 91 94 101

IMPLEMENTASI MERGESORT

Page 13: Mergesort Dan Recurrence

Dalam implementasinya, algoritma merge sort memerlukan tiga array yang digunakan sebagai penampungan elemen array sementara. Dua array digunakan untuk menampung elemen array yag dibagi dan satu array lagi digunakan sebagai wadah tempat array output yag telah terurut. Dengan menggunakan array lebih dari satu membuat algoritma ini memerlukan banyak resource system.

Contoh Implementasi: mergesort.java

01 public class MergeSort

02 static int[]data;

03 public static void main(String[] args)

04 int []array=2,4,0,8,3,4,5;

05 data=array;

06 tampil(data);

07 int[]wadah=new int[array.length];

08 recursiveMergeSort(wadah, 0, data.length-1);09 tampil(data);

10

11

12 private static void <strong>recursiveMergeSort</strong>(int[]arr,int kiri,int kanan)

13 if(kiri<kanan)

14 int tengah=(kiri+kanan)/2;

15 recursiveMergeSort(arr, kiri, tengah);

16 recursiveMergeSort(arr, tengah+1, kanan);17 merge(arr, kiri, tengah+1, kanan);

18

19

20

21 private static void <strong>merge</strong>(int[] workSpace, int lowPtr, int highPtr, int upperBound)

22 int j = 0;

23 int lowerBound = lowPtr;

24 int mid = highPtr - 1;

25 int n = upperBound - lowerBound + 1;

26 while (lowPtr <= mid && highPtr <= upperBound)

Page 14: Mergesort Dan Recurrence

27 if (data[lowPtr] < data[highPtr])

28 workSpace[j++] = data[lowPtr++];

29 else

30 workSpace[j++] = data[highPtr++];

31

32 while (lowPtr <= mid)33 workSpace[j++] = data[lowPtr++];

34

35 while (highPtr <= upperBound)

36 workSpace[j++] = data[highPtr++];

37

38 for (j = 0; j < n; j++)39 data[lowerBound + j] = workSpace[j];

40

41

42 static void tampil(int[]arr)43 for (int i = 0; i < arr.length; i++)

44 System.out.print(arr[i]+" ");

45

46 System.out.println();47

48

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.

Page 15: Mergesort Dan Recurrence

RECURRENCE (REKURSIF )

Rekursi berarti suatu proses yang bisa memanggil dirinya sendiri. Suatu rekurensi adalah suatu persamaan atau pertidaksamaan yang menyatakan suatu fungsi dengan harga fungsi tersebut pada input yang ukurannya lebih kecil

Dalam pemrograman, rekursi merupakan teknik programming yang berdaya guna untuk digunakan pada pekerjaan pemrograman dengan mengekspresikannya ke dalam suku-suku dari program lain dengan menambahkan langkah-langkah sejenis.

Contoh proses menghitung nilai faktorial

– Faktorial (0) = 1 ..................(1)

– Faktorial (N) = N * Faktorial (N-1), N > 0 ...........(2)

Persamaan (1) yang tidak bersifat rekursif disebut nilai awal. Persamaan (2) merupakan contoh hubungan rekurensi, yang berarti bahwa nilai suatu fungsi dengan argumen tertentu bisa dihitung dari fungsi yang sama dengan argumen yang lebih kecil.

Setiap fungsi rekursi paling sedikit memiliki 1 nilai awal, jika tidak, fungsi tersebut tidak bisa dihitung secara eksplisit.

METODE PENYELESAIAN REKURSI

Misalkan : Merge Sort

• Ukuran running time pada suatu algoritma pada input yang konstan adalah konstan, maka untuk n cukup kecil, rekurensi yang menyatakan running time algoritmanya adaah T(n) = Θ(1).

• Oleh karena itu biasanya syarat batas dari rekurensi tidak dituliskan dan dianggap bahwa T(n) adalah konstan untuk n cukup kecil.

Page 16: Mergesort Dan Recurrence

Metode untuk menyelesaikan rekurensi (yaitu untuk memperoleh batas O, θ, dan Ω secara asimtotik) ada 3 (tiga)metode yang dapat kita gunakan untuk pemecahan rekursif yaitu: metode substitusi, metode iterasi, dan teorema master.

1. Metode Subsitusia. Pertama-tama buat suatu “guess” (perkiraan) dari bentuk solusinya.b. Gunakan induksi matematika untuk membuktikan bahwa guess itu benar.c. Metode ini dapat digunakan untuk menentukan baik batas atas maupun batas bawah

suatu rekurensi.

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

¿ c2n3+n

¿c n3−( cn n3−n)≤c n3, jika c ≥2d ann≤1

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

Dengan kata lain, harus memilih c cukup besar untuk menanganinya

Page 17: Mergesort Dan Recurrence

T (n )=Θ (1 )dimanan<n0untuk 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 )

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¿¿c1n

2−2c2n+n

Page 18: Mergesort Dan Recurrence

¿c1n2−c2n−(c2n−n)

≤c1n2−c2n, jika c2≥1

2. Metode IterasiMetode iterasi tidak memerlukan tebakan solusinya, tetapi memerlukan manipulasi aljabar yang lebih intensif dari pada metode substitusi . Prinsip dari metode iterasi adalah menjabarkan rekurensi sebagai suatu bentuk penjumlahan yang hanya bergantung pada n dan syarat awal.Contoh: T(n) = 3T(n/4)+ n

Bila bentuk rekursif diuraikan:

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

Page 19: Mergesort Dan Recurrence

Secara Geometri:

Sehingga Pohon Rekursi untuk

T (n )=T ¿

3. Metode Master

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

T (n )=aT (n/b )+ f (n)

Page 20: Mergesort Dan Recurrence

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

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

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

jika f(n) = O(nlogb

(a-ε)), ε > 0 maka T(n) = Θ(nlog

ba)

dhi, f(n) secara polinomial lebih kecil dari nlogb

a dengan faktor nε, seginhha nlogb

a mendominasi.Contoh:

T (n )=9T ¿

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

2. Kasus 2

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

jika f(n) = Θ(nlogb

a)

maka T(n) = Θ(nlogb

alog n)

dhi, cost setiap langkah adalah nlogb

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

balog n)

Page 21: Mergesort Dan Recurrence

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 )=n logba sehinggaT (n )=1. lgn

3. 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) > nlogb

a dgn faktor polinomial sehingga suku dominan adalah

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

Contoh:T (n )=3T ¿

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

nlogba=nlog43=O(n0.793)

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

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


Recommended