Nama Nim Mata Kuliah

: : :

Muh.Rizal H12111274 Algoritma dan Struktur Data

MERGE-SORT dan SOLVING RECURRENCES 1. MERGE-SORT

Merge sort merupakan algoritma pengurutan dalam ilmu komputer yang dirancang untuk memenuhi kebutuhan pengurutan atas suatu rangkaian data yang tidak memungkinkan untuk ditampung dalam memori komputer karena jumlahnya yang terlalu besar. Algoritma ini ditemukan oleh John von Neumann pada tahun 1945.
Sebelum mendalami algoritma merge sort, mari kita mengetahui garis besar dari konsep divide and conquer karena merge sort mengadaptasi pola tersebut. Pola Divide and Conquer Beberapa algoritma mengimplementasikan konsep rekursi untuk menyelesaikan permasalahan. Permasalahan utama kemudian dipecah menjadi sub-masalah, kemudian solusi dari sub masalah akan membimbing menuju solusi permasalahan utama. Pada setiap tingkatan rekursi, pola tersebut terdiri atas 3 langkah. Divide Conquer Memilah masalah menjadi sub masalah Selesaikan sub masalah tersebut secara rekursif. Jika sub-masalah tersebut cukup ringkas dan sederhana, pendekatan penyelesaian secara langsung akan lebih efektif. Mengkombinasikan solusi dari sub-masalah, yang akan membimbing menuju penyelesaian atas permasalahan utama.

Kombinasi

Memahami Merge Sort Seperti yang telah dijelaskan sebelumnya, 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. Menurut keefektifannya, alogaritma

ini bekerja dengan tingkat keefektifan O(n log(n)).

Algoritma Pseudocode Merge-Sort : Merge-Sort(A, p, r): if p < r then q ← (p+r)/2 Merge-Sort(A, p, q) Merge-Sort(A, q+1, r) Merge(A, p, q, r)

Algoritma Merge-Sort pada pemrograman java : void mergeSort(Object array[], int startIdx, int endIdx) { if (array.length != 1) { //Membagi rangkaian data, rightArr dan leftArr mergeSort(leftArr, startIdx, midIdx); mergeSort(rightArr, midIdx+1, endIdx); combine(leftArr, rightArr); } }

Misalkan Rangkaian data: 5 4 2 9

Membagi rangkaian menjadi dua bagian: LeftArr 5 4 RightArr 8 9

Membagi LeftArr menjadi dua bagian: LeftArr 5 Mengkombinasikan 4 5 RightArr 4

Membagi RightArr menjadi dua bagian: LeftArr 2 Mengkombinasikan 2 9 RightArr 9

Mengkombinasikan LeftArr dan RightArr. 2 4 5 9

Berikut Contoh program Merge-Sort pada pemrograman Java : package merge_sort; public class merge_sort { public static void main(String[] args) { int i; int array[] = { 34,6,8,98,100,5,3,15}; System.out.print("nilai sebelum:\n"); for(i = 0; i < array.length; i++) System.out.print( array[i]+" "); System.out.println(); mergeSort_srt(array,0, array.length-1); System.out.print("setelah sorting:\n"); for(i = 0; i <array.length; i++) System.out.print(array[i]+" "); System.out.println();

}

public static void mergeSort_srt(int array[],int lo, int n){ int low = lo; int high = n; if (low >= high) { return; } int middle = (low + high) / 2; mergeSort_srt(array, low, middle); mergeSort_srt(array, middle + 1, high); int end_low = middle; int start_high = middle + 1; while ((lo <= end_low) && (start_high <= high)) { if (array[low] < array[start_high]) { low++; } else { int Temp = array[start_high]; for (int k = start_high- 1; k >= low; k--) { array[k+1] = array[k]; } array[low] = Temp; low++; end_low++; start_high++; } } }

}

Berikut Output program diatas :

Analisis Merge-Sort Meskipun pseudocode untuk MERGE SORT-bekerja dengan benar saat jumlah elemen bahkan tidak, rekurens berbasis analisis kami disederhanakan jika kita menganggap bahwa masalah ukuran aslinya adalah kekuatan dari 2. Setiap langkah membagi kemudian menghasilkan dua suburutan ukuran persis n = 2. Running Time Merge-Sort (T(n)) Divide : Langkah membagi hanya menghitung tengah subarray, yang membutuhkan ( ) konstanta waktu. Dengan demikian, ( ) Conquer : Rekursif memecahkan dua submasalah, masing-masing ukuran n = 2, yang ( ) ke waktu berjalan.. pada elemen n-

memberikan kontribusi

Combine :Kami telah mencatat bahwa prosedur MERGE ( ) subarray membutuhkan waktu ( ) dan maka ( )

Ketika kita menambahkan fungsi ( ) dan ( ) untuk analisis gabungan semacam, kita menambahkan fungsi yang, ( ) dan fungsi yang, ( ) Jumlah ini adalah linear fungsi n, yaitu,. ( ) Menambahkan ke ( ) istilah dari "conquer". Langkah memberikan pengulangan untuk kasus terburuk berjalan waktu T(n) dari merge sort.:

(1) if n  1  T (n)   2T (n / 2)  (n) if n  1

2. SOLVING RECURRENCES Ada 3 cara memecahkan rekurens : 1. Metode Subtitusi 2. Metode Iterasi/pohon rekursif 3. Metode master 1. Metode Subtitusi Metode substitusi untuk memecahkan kambuh terdiri dari dua langkah: 1. Tebak bentuk solusi. 2. Gunakan induksi matematika untuk menemukan konstanta dan menunjukkan bahwa solusi bekerja. Kami mengganti solusi menebak untuk fungsi ketika menerapkan induktif hipotesis ke nilai yang lebih kecil, maka nama Metode ini "metode substitusi." sangat kuat, tetapi kita harus mampu menebak bentuk jawaban untuk menerapkannya. Kita dapat menggunakan metode substitusi untuk membangun baik batas atas atau bawah pada rekurens. Sebagai contoh, mari kita menentukan batas atas perulangan. ( ) (⌊ ⌋)

( ) Kami menduga bahwa solusinya adalah ( ). Metode substitusi mengharuskan kita untuk membuktikan bahwa ( ) untuk pilihan yang tepat dari konstanta c> 0. Kita mulai dengan mengasumsikan bahwa ini terikat berlaku untuk ⌊ ⌋ semua positif m < n, khususnya untuk ,menghasilkan (⌊ ⌋) ⌊ ⌋ (⌊ ⌋) . Mensubstitusikan ke hasil rekurens.. ( ) ( ⌊ ⌋ ( ) (⌊ ⌋))

Selama nilai

2. Metode Iterasi atau pohon rekursif Meskipun kita dapat menggunakan metode substitusi untuk memberikan bukti ringkas yang solusi untuk rekurens benar, Anda mungkin mengalami kesulitan dalammenebak dengan baik. Menggambar sebuah pohon rekursi berfungsi sebagai cara mudah untuk menebak dengan baik. Dalam pohon rekursi, setiap node mewakili nilai subproblem tunggal di suatu tempat di set fungsi rekursif. Kami menjumlahkan nilai dalam setiap tingkat pohon untuk mendapatkan satu set per-tingkat nilai, dan kemudian dijumlahkan semua per tingkat untuk menentukan nilai total semua tingkat rekursi. Sebuah pohon rekursi paling baik digunakan untuk menghasilkan perkiraan yang baik, yang kemudian dapat memverifikasi dengan metode substitusi. Bila menggunakan pohon rekursi untuk menghasilkan perkiraan yang baik, Contoh : ( ) ( ) ( ) ( )

Jika digambarkan pohon rekursinya sebagai berikut :

. Kita membiarkan c merupakan faktor konstan dalam O(n) panjang. Ketika kita menambahkan nilai-nilai seluruh tingkat pohon rekursi ditunjukkan pada gambar, kita mendapatkan nilai cn untuk setiap tingkat.

( Jalan sederhana terpanjang dari akar ke daun adalah ) Sejak ( ketika tinggi pohon adalah solusi untuk rekurens adalah ( ) ( ).

)

(

) Secara intuitif,

Memang, kita dapat menggunakan metode substitusi untuk memverifikasi bahwa ( ) adalah batas atas menuju solusi untuk rekurens. Kita menunjukkan bahwa ( ) , dimana d adalah konstanta positif yang cocok. ( ) ( ( ( ( ) ) ) (( (( ( ( ( ) ( ) ) ) ( ) ) ) ( ( ) ( ( ( ) ) ( ) ) )) ( ) ) ( ) ))

Selama ( ( )) Dengan demikian, kita tidak perlu melakukan lebih akurat perhitungan nilai dalam pohon rekursi.

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

dengan a ≥ 1 dan b > 1 adalah konstanta , f(n) adalah fungsi yang secara asimtotik positif dan T(n) didefinisikan sebagai bilangan bulat nonnegatife oleh rekurens. Dalam metode master perlu diingat 3 kasus, namun sesudahnya bentuk-bentuk rekursif dapat diselesaikan dengan lebih mudah. Kasus 1 : ( ) Jika ( ) ( ( ) ( ) ) maka ( ) ( )

Contoh : ( ) ( )

Dik. a=9 ,b=3 ,dan f(n)=n Dengan demikian kita mendapati bahwa Karena ( ) Maka, ( ) ( ( ). ), dengan = ( ).

Kasus 2 : ( ) Jika ( ) Contoh : ( ) ( ) ( ( ) ( ) ) maka ( ) ( )

Dik. a=1, b=3/2 ,dan f(n)=1 Dengan demikian kita mendapati bahwa Karena ( ) Maka ( ) ( ( ). ) ( ) .

Kasus 3 : ( ) Jika ( ) Contoh : ( ) Dik. Dan Karena ( ) ( ( ) ( ( ) ( ) ) dan jika ( ) ( ) maka ( ) ( ( ))

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

Kondisi keteraturan ( ) Maka ( ) ( ) ( ( ) ) ( ) ( )

Sign up to vote on this title
UsefulNot useful