Anda di halaman 1dari 13

RESUME ALGORITMA DAN STRUKTUR

DATA


[ASMASARI]
H12111282
STATISTIKA


A. 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.
Algoritma pengurutan data merge sort dilakukan dengan menggunakan cara divide and conquer yaitu
dengan memecah kemudian menyelesaikan setiap bagian kemudian menggabungkannya kembali.
Pertama data dipecah menjadi 2 bagian dimana bagian pertama merupakan setengah (jika data genap)
atau setengah minus satu (jika data ganjil) dari seluruh data, kemudian dilakukan pemecahan kembali
untuk masing-masing blok sampai hanya terdiri dari satu data tiap blok. Setelah itu digabungkan kembali
dengan membandingkan pada blok yang sama apakah data pertama lebih besar daripada data ke-
tengah+1, jika ya maka data ke-tengah+1 dipindah sebagai data pertama, kemudian data ke-pertama
sampai ke-tengah digeser menjadi data ke-dua sampai ke-tengah+1, demikian seterusnya sampai menjadi
satu blok utuh seperti awalnya. Sehingga metode merge sort merupakan metode yang membutuhkan
fungsi rekursi untuk penyelesaiannya.
Pengurutan algoritma Merge Sort membuat pengurutan dengan membagi 2 dan
menggabungkannya. Metoda ini cukup efisien untuk diterapkan. Sama dengan Quick Sort,
algoritma Merge Sort adalah dasar pembagian dan penyelesaiannya. Pertama urutan atau elemen
data awal diurutkan dengan membaginya menjadi 2 bagian (Devide). Setengahnya diurutkan
dengan bebas (Conquer). Kemudian 2 bagian itu digabungkan dengan cara diurut sesuai dengan
urutan (Combine).

1. Devide, yakni memilih masalah menjadi sub-masalah.
2. Conquer, yakni menyelesaikan sub-masalah tersebut secara rekursi.
3. Kombinasi/Penggabungan, menggabungkan solusi dari sub-masalah

Divide: membagi masalah menjadi beberapa upa-masalah yang memiliki kemiripan dengan
masalah semula namun berukuran lebih kecil (idealnya berukuran hampir sama),
Conquer: memecahkan (menyelesaikan) masing-masing upa-masalah (secara rekursif), dan
Combine: mengabungkan solusi masing-masing upa-masalah sehingga membentuk solusi
masalah semula.
Obyek permasalahan yang dibagi adalah masukan (input) atau instances yang berukuran n: tabel
(larik), matriks, eksponen, dan sebagainya, bergantung pada masalahnya.
Tiap-tiap upa-masalah mempunyai karakteristik yang sama (the same type) dengan karakteristik
masalah asal, sehingga metode Divide and Conquer lebih natural diungkapkan dalam skema
rekursif.

Contoh:
Misalkan nilai array yang belum disortir adalah:
12,9,4,99,120,1,3,10



The code of the program :
public class mergeSort{
public static void main(String a[]){
int i;
int array[] = {12,9,4,99,120,1,3,10};
System.out.println("\n\n RoseIndia\n\n");
System.out.println(" Selection Sort\n\n");
System.out.println("Values Before the sort:\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("Values after the sort:\n");
for(i = 0; i <array.length; i++)
System.out.print(array[i]+" ");
System.out.println();
System.out.println("PAUSE");
}

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++;
}
}
}
}
Output of the example:
C:\array\sorting>javac mergeSort.java
C:\array\sorting>java mergeSort
RoseIndia
Selection Sort
Values Before the sort:
12 9 4 99 120 1 3 10
Values after the sort:
1 3 4 9 10 12 99 120
PAUSE
C:\array\sorting>_

PEMANGGILAN KEMBALI MERGE-SORT
Untuk mengurutkan n angka
Jika n=1
Pengurutan berulang 2 daftar dari angka-angka dan .
Menggabungkan 2 pengurutan daftar pada (n) waktu.
Strategi
Pecahkan masalah dengan cara sama (sederhana) bagian masalah.
Perulangan menyelesaikan bagian masalah.
Kumpulkan solusi-solusi untuk memberikan jawaban.



B. REKURENSI
Running times pada algoritma dengan memanggil berulang dapat dideskripsikan dengan
menggunakan recurrence.
Rekurensi adalah sebuah persamaan atau ketaksamaan yang mendiskripsikan sebuah fungsi
pada syarat nilainya dalam imputan yang lebih kecil.
Contoh, Merge-Sort
ssss
(1) if 1
( )
2 ( / 2) ( ) if 1
n
T n
T n n n
O =
=

+O >



Penyelesaian Rekurensi
Metode Subtitusi
o Tebak sebuah solusi
o Membuktikan solusi dengan cara induksi.
Metode Iterasi (pohon rekursi)
o Perluasan dari recurrence
o Menggambar pohon rekursi.
Metode Master
o Susun berdasarkan kelas berbeda dari recurrence.


METODE SUBTITUSI
Selesikan () (

)
1). Misalkan bahwa () (

), dengan pada bentuk


2). Asumsikan ()

untuk dan
3). Buktikan ()

dengan cara induksi


() (

) (recurrence)
()

(hipotesa induksi
=

(penyederhanaan)
=

) (penyusunan kembali)

jika dan (memenuhi)


Sehingga () (

)!
Harusnya dipilih c cukup besar untuk menagani () ()

untuk beberapa

.

Mencapai batas ketat
Coba tunjukkan () (

)
Asumsikan ()


() (

)
()

untuk tidak ada pilihan dari


Masalah? Kita tidak seharusnya menulis kembali persamaan
()


Menjadi
()



Dalam susunan untuk menunjukkan ketaksamaan yang kita inginkan.
Kadang-kadang untuk membuktikan cara induksi, mencoba untuk memprkuat hipotesis kita.
T(n) (jawaban yang diinginkan) - (something > 0)

Pembetulan bukti: gagasan untuk memperkuat hipotesis induksi mengurangkan susunan
menurun













METODE ITERASI
Gagasan utama untuk mengembangkan recurrence dan mengubah ke dalam penjumlahan.












2
1 2
2
1 2
2
1 2
2
1 2 2
2
1 2 2
Assume ( ) for
( ) 4 ( / 2)
4( ( / 2) ( / 2))
2
( )
if 1
T k c k c k k n
T n T n n
c n c n n
c n c n n
c n c n c n n
c n c n c
s <
= +
s +
= +
=
s >
( )
( ) ( )
( ) ( ) ( )
( )
( )
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


Metode iterasi kadang kali digunakan menghasilkan perkiraan untuk metode subtitusi.
Sebaiknya diketahui aturan dan memiliki intuisi untuk deret aritmatika dan geometri.
Matematika dapat menjadi berantakan dan susah
Pusatkan pada dua parameter
o berapa kali recurence perlu mengulangi untuk mencapai kondisi batas
o jumlah ketentuan yang timbul dari setiap tingkat proses iterasi

POHON REKURSI
Pohon rekursi adalah cara yang mudah dilakukan untuk membayangkan apa yang terjadi ketika
recurrence diiterasi.
Kontruksi pohon rekursi

















2
( ) ( / 4) ( / 2) T n T n T n n = + +












METODE MASTER
Gagasan untuk menyelesaikan kelas recurrence yaitu memiliki rumus:

a 1 dan b > 1, dan f adalah garis lurus positif yang mendekati kurva!
Berbicara secara abstrak, T(n) adalah runtime untuk algoritma dan kita tahu bahwa
A bagian masalah dari ukuran n/b diselesaikan dengan rekursif, setiap waktu T(n/b)
f(n) adalah nilai dari pembagian masalah dan gabungan dari hasil. Pada merge-sort









( ) ( / 3) (2 / 3) T n T n T n n = + +
( ) ( / ) ( ) T n aT n b f n = +
( ) 2 ( / 2) ( ) T n T n n = + O

Pecahkan masalah kedalam a bagian pada log
b
n
terdapat daun

Banyak angka :
Iterasi dari recurrence, mengembangkan hasil dari pohon.







Pernyataan pertama adalah bagian/penggabungan ulang nilai (total bersilangan semua
tingkatan dari pohon)
Pernyataan kedua adalah nilai dari pengerjaan semua bagian masalah pada ukuran 1
(total semua pekerjaan mendorong untuk daun)

INTUISI METODE MASTER
Tiga keadaan sama:
o Running times dipengaruhi oleh nilai pada cabang-cabang.
o Running times biasa didistribusikan pada semua bagian pohon.
o Running times dipengaruhi oleh nilai pusat (sumber).
Oleh karena itu, untuk menyelesaikan recurrence, kita hanya perlu menggolongkan pernyataan
yang dominan.
Pada setiap keadaan membandingkan () dengan (

)
METODE MASTER KASUS 1
() (

) Untuk beberapa konstan


o f(n) menjadi polinomial (dengan faktor

) lebih lambat daripada


Pekerjaan pada tingkat daun mendominasi
o Tambahan pada tingkatan pohon rekursi (

)
o Nilai dari semua tingkatan (

)
log log
b b
n a
a n =
log log
b b
n a
a n =
2 2
2 2
log 1 log 1 log
log 1
log
0
( ) ( ) ( / )
( ) ( / ) ( / )
( ) ( / ) ( / ) ...
( / ) (1)
Thus,
( ) ( / ) ( )
b b b
b
b
n n n
n
a j j
j
T n f n aT n b
f n af n b a T n b
f n af n b a T n b
a f n b a T
T n a f n b n

=
= +
= + +
= + + +
+ +
= + O

o Sehingga, nilai keseluruhan adalah (

)
METODE MASTER KASUS 2
() (

)
o () dan

adalah simtatik serupa.


Pekerjaan ini didistribusikan secara merata pada seluruh bagian pohon
o (nilai tingkatan) (jumlah tingkatan)
METODE MASTER KASUS 3
Untuk beberapa konstan
o Invers dari sifat 1
o f(n) menjadi polinomial (dengan faktor

) lebih cepat daripada


o juga dibutuhkan kondisi teratur

)
()


Pekerjaan di akar mendominasi
o () (())

RINGKASAN TEOREMA MASTER
Diberikan recurrence pada rumus () (

) ()
1. () (

)
() (

)
2. () (

)
() (

)
3. () (

) dan (

) (), untuk


() (())
Metode master tidak dapat menyelesaikan setiap recurrence pada rumus ini, terdapat celah
antara sifat 1 dan sifat 2, baik antara sifat 2 dan sifat 3.
STRATEGI
Kutipan a,b, dan () dari pemberian recurrence.
Tetapkan


Bandingkan garis lurus () dan

yang mendekati kurva.


Tetapkan sifat MT yang cocok, dan terapkan.
Contoh Merge-sort
() (

) ()

()
Also () ()
log
( ) ( )
b
a
f n n
c +
=O
Kasus 2: () (

) ( )
Contoh:
() (


Also () () ()
() ( )

() (

)

() () (

) dengan
() (

)







() (


() () (

)

(

) (

) (

) (

) ()
() ( )

() (


() () (


tidak keduanya dari sifat 3 atau sifat 2!
() (


()

() (

)
Binary-search(A, p, r, s):
q(p+r)/2
if A[q]=s then return q
else if A[q]>s then
Binary-search(A, p, q-1, s)
else Binary-search(A, q+1, r, s)

Kasus 3: () (

)
Memeriksa kondisi keteraturan
(

) ()