PRODI STATISIKA JURUSAN MATEMATIKA FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM UNIVERSITAS HASANUDDIN 2012
Resume Matakuliah Algoritma dan Struktur Data Tanggal 25 Sepetember 2012 MERGE SORT A. Devide dan Conquer 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. Merge together solusi dari sub problem: Bandingkan elemen pertama dengan 2 sub array Ambil elemen yang terkecil dan letakkan pada array hasil Teruskan proses pembandingan dan pengambilan, sampai seluruh elemen subarray dipindahkan ke hasil array
MargeSort (Passed an Array) Jika ukuran array >1 Bagi array menjadi dua Panggil fungsi Marge Sort untuk bagian pertama Panggil fungsi Marge Sort untuk bagian kedua Merge dua bagian tersebut
Mergesort (Passed two array) Bandingkan kedua elemen pertama dari kedua array Pilih yang lebih kecil dan tempatkan pada array Hasil, posisi elemen pertama pada elemen array yang telah diambil elemennya (Jika salah satu array input telah kosong, maka letakkan elemen yang tersisa dari array lainnya ke array hasil.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
Hasil
Data Asli Baris 1 Baris 2 Baris 3 Baris 4 adalah hasil merge sort Banding=22, Rekursif = 12, Baris= 9
Gambar 2
Mendiskripsikan program MergeSort 1. Program akan meminta input 2. Kemudian akan merandom nilai 1 100 3. Data asli adalah data hasil random 4. Baris 1 adalah sorting pertama kali yang dilakukan oleh Algoritma MergeSort. (Diatas "Baris 1" anda dapat melihat "(1)" bahwa terdapat perbandingan yang dilakukan dan program menulis nilai "Banding") 5. Banyaknya "Baris" yang terdapat pada output program dapat anda modifikasi sesuai kebutuhan.
Gambar 3
Gambar 3. Menunjukan banyaknya pertukaran pada setiap baris dan menunjukan letak code Output Banding
Gambar 4.
Gambar 4 Menunjuk banyaknya baris yang akan di output dan code output baris Jadi fungsi program ini: 1. Dapat menghitung banyaknya perbandingan pada Algoritma MergeSort 2. Dapat memodifikasi Input (Menggunakan Random atau Input Biasa) 3. Dapat memodifikasi Output (Banyaknya baris yang keluar)
FUNGSI REKURSIF
Rekursif
Sebuah fungsi dapat memanggil fungsi lain dan sebuah fungsi yang dapat memanggil dirinya sendiri. Fungsi seperti demikian disebut fungsi rekursif Sebuah fungsi f juga disebut rekursif jika memanggil fungsi lain g dan di dalam g terdapat pemanggilanterhadap f Meski kurang efisien dibandingkan dengan fungsi iteratif yang memakai perulangan, pada beberapa kasus fungsi rekursif menyediakan solusi yang lebih natural dan sederhana.
Permasalahan yang diselesaikan melalui fungsi rekursif memiliki beberapa karakteristik: 1. Kasus sederhana dari permasalahan tersebut memiliki jawaban langsung yang disebut base cases. Contoh 0! = 1. 2. Kasus yang lebih kompleks dapat didefinisikan secara sama namun dalam ukuran yang lebih kecil yang disebut recursive cases. Contoh: n! = n * (n-1)! Dengan menerapkan karakteristik 2 secara berulang kasus rekursif akan mendekati dan sampai pada base case. Contoh: n! 1!, 0!. Strategi penyelesaian masalah pada kasus rekusif disebut decrease-and(n-1)! (n-2)! ...
conquer. Idenya ialah mengurangi ukuran permasalahan sampai menjadi kasus sederhana (dalam kasus ini decrease-andconquer) yang memiliki penyelesaian jelas.
Format fungsi rekursif Pada umumnya fungsi rekursif memiliki bentuk sebagai berikut if this is a simple case solve it
else redefine the problem using recursion Cabang if merupakan base case, sedangkan bagian else-nya merupakan recursive case
Bagian recursive case menyediakan pengulangan yang dibutuhkan yang menyederhanakan permasalahan dan base case menyediakan penghentian Agar rekursi dapat berhenti recursive cases harus mendekati base case di setiap pemanggilan fungsi rekursif
Langkah-langkah mendefinisikan barisan secara rekursif: 1. Langkah basis: Spesifikasi anggota awal. 2. Langkah rekursif: Berikan aturan untuk membangun anggota baru dari anggota yang telah ada. Contoh barisan yang didefinisikan secara rekursif Berikan definisi rekursif dari an=rn, dengan rBulat, r 0 dan n bilangan bulat positif. Solusi: Definisikan a0 = r0 = 1 dan an+1 = r.an untuk n = 0, 1, 2, Langkah-langkah mendefinisikan fungsi secara rekursif dgn domain bil. Cacah 1. Langkah basis: Tentukan nilai fungsi pada saat nol 2. Langkah rekursif: Berikan aturan untuk mencari nilai fungsi untuk setiap bilangan bulat berdasarkan nilai fungsi pada bilangan bulat yang lebih kecil. Definisi seperti itu disebut rekursif atau definisi induktif Contoh fungsi yang didefinisikan secara rekursif f(0) = 3 f(n + 1) = 2f(n) + 3 maka
Penyelesaian Relasi Rekursif Metode substitusi: Dengan cara membuat tebakan terhadap solusinya, kemudian tebakan tersebut dibuktikan dengan induksi matematika Contoh: Diketahui :
T 1 1 T n T n n 2
T n O n
Buktikan bahwa:
Buat tebakan T(n) = O(n), berarti T(n) cn Bukti: dengan induksi matematika
o
o Langkah induksi:
(c/ + 1) c benar untuk c = 4 Metode (pohon) rekursif: Dengan cara mengubah bentuk rekursif menjadi bentuk penjumlahan, kemudian diselesaikan. Contoh:
n/4
n/4
n/16
n/16
n/16
n/16
n/64
n/64
n/64
n/64
n/64
n/64
n/64
n/64
Metode iterasi/ rekursif: Metode iterasi tidak memerlukan tebakan solusinya, tetapi memerlukan manipulasi aljabar yang lebih intensif dari pada metode substitusi. Ide dasarnya adalah dengan mengembangkan bentuk rekursif tersebut serta merepresentasi-kannya dalam bentuk jumlah. Teknik untuk mengevaluasi bentuk jumlah dapat digunakan untuk mendapatkan nilai batas dari solusinya.
Metode master:
Metode 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. Dalam metode master perlu diingat 3 kasus, namun sesudahnya bentukbentuk rekursif dapat diselesaikan dengan lebih mudah. Kasus I: T(n) = aT(n/b) + f(n) maka T(n) = (nlogba) dhi, f(n) secara polinomial lebih kecil dari nlogba dengan faktor n, sehingga nlogba mendominasi contoh: a1, b>1 jika f(n) = O(nlogb(a-)), > 0
Kasus II: T(n) = aT(n/b) + f(n) 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) a1, b>1
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 dgn faktor polinomial sehingga suku dominan adalah f(n) + f(n/b) + f(n/b2) O(f(n)) Adapun Contoh Kasus yang akan diselesaikan dengan metode master yaitu:
Gunakan metode Master untuk menentukan T(n) = (?) bila : T(n) = 4T(n/2) + n2