Anda di halaman 1dari 11

TUGAS

ALGORITMA DAN STURUKTUR DATA








D
I
S
U
S
U
N

OLEH




RESKI MANGKAWANI
H12111270
STATISTIKA


JURUSAN MATEMATIKA
FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM
UNIVERSITAS HASANUDDIN
MAKASSAR
2012
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. Prinsip utama
yang diimplementasikan pada algoritma merge-sort seringkali disebut sebagai pecah-
belah dan taklukkan (divide and conquer) . Cara kerja algoritma merge sort adalah
membagi larik data yang diberikan menjadi dua bagian yang lebih kecil. Kedua larik yang
baru tersebut kemudian akan diurutkan secara terpisah. Setelah kedua buah list tersusun,
maka akan dibentuk larik baru sebagai hasil penggabungan dari dua buah larik
sebelumnya. Menurut keefektifannya, alogaritma ini bekerja dengan tingkat keefektifan
O(nlog(n)).
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.
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.
Contoh penerapan atas sebuah larik/array sebagai data sumber yang akan diurutkan
{3, 9, 4, 1, 5, 2} adalah sebagai berikut:
Diberikan list yang ingin disusun:
3 9 4 1 5 2

List diatas dibagi menjadi dua bagian:
list 1 | list 2:
11 1 5 2

Kedua list yang baru disusun sendiri-sendiri menjadi:
list 1 | list 2:
11 1 2 5

Setelah itu dubentuk list baru yang merupakan gabungan kedua list tadi:
List baru:
1

list 1 | list 2:
2 5


3 9 4
3 4 9
3 4 9
List baru:
1 2

list 1 | list 2:
5

List baru:
1 2 3

list 1 | list 2:
5

List baru:
1 2 3 4

list 1 | list 2:
5

List baru:
1 2 3 4 5

list 1 | list 2:


List baru:
1 2 3 4 5 9

list 1 | list 2:




3 4 9
4 9
9
9

Dan akhirnya akan didapat list yang sudah tersusun:
1 2 3 4 5 9

Atau dengan kata lain
1. Larik tersebut dibagi menjadi dua bagian, {3, 9, 4} dan {1, 5, 2}
2. Kedua larik kemudian diurutkan secara terpisah sehingga menjadi {3, 4, 9}
dan {1, 2, 5}
3. Sebuah larik baru dibentuk yang sebagai penggabungan dari kedua larik
tersebut {1}, sementara nilai-nilai dalam masing larik {3, 4, 9} dan {2, 5}
(nilai 1 dalam elemen larik ke dua telah dipindahkan ke larik baru)
4. langkah berikutnya adalah penggabungan dari masing-masing larik ke
dalam larik baru yang dibuat sebelumnya.
1) {1, 2} <-> {3, 4, 9} dan {5}
2) {1, 2, 3} <-> {4, 9} dan {5}
3) {1, 2, 3, 4} <-> {9} dan {5}
4) {1, 2, 3, 4, 5} <-> {9} dan {null}
5) {1, 2, 3, 4, 5, 9} <-> {null} dan {null}
Berikut contoh program merge sort dengan rekursif:
program urut_angka;
uses crt;
type
urut= array[1..50] of byte;
var
a,b: byte;
data: urut;

procedure input;
begin
clrscr;
write('Masukkan banyak data : ');
readln(b);
clrscr;
writeln('Masukkan ',b,' data');
writeln('*******************');
for a:= 1 to b do
begin
write('Data ke-',a,'= ');
readln(data[a]);
end;
clrscr;
writeln('Data sebelum disortir adalah : ');
for a:= 1 to b do
write(data[a], ' ');
writeln;
end;


procedure change(var c,d:byte);
var
e: byte;
begin
e:= c;
c:= d;
d:= e;
end;

procedure selection(var temp:urut; jmldata:integer);
var
i,j,lok: byte;
begin
for i:=1 to (jmldata-1) do
begin
lok := i;
for j:=(i+1) to jmldata do
if (temp[lok] > temp[j]) then lok := j;
change(temp[i],temp[lok]);
end;
end;

procedure output;
begin
writeln;
writeln('Maka data setelah disortir adalah : ');
for a:= 1 to b do
write(data[a],' ');
writeln;
end;

begin
input;
selection(data,b);
output;
readln;
end.


B. RECURRENCE
Recurrence merupakan suatu persamaan yang menggambarkan fungsi yang lebih kecil
dan nilai yang lebih kecil. ada tiga metode untuk menyelesaikan rekurensi, yaitu
untuk mendapatkan batas asymptotic " "O atau " "O pada solusi. Ketiga
metode tersebut adalah metode iterasi, substitusi, metode master.
a. Metode Subtitusi
T(n) = 4T (n/2) + n
1.) anggap T(n) = O


2.) asumsi T() = C


3.) buktikan T(n)

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

+ n
=

jika dan
Kemudian T(n) = O(


Subtitusi : harus memilih c yang cukup besar untuk bisa menangani
T(n) = untuk

untuk beberapa


b. Metode Iterasi
Ide dasarnya adalah dengan memperluas recurence dan mengubahnya kedalam
bentuk penjumlahan.










Selain cara di atas ada cara yang lebih mudah yaitu dengan pohon rekursi




















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

2
( ) ( / 4) ( / 2) T n T n T n n = + +
( ) ( / 3) (2 / 3) T n T n T n n = + +
L
a
m
a
n
y
a
r
u
n
n
i
n
g
t
i
m
e
c. Metode master
Metode master merupakan salah satu metode penyelesaian running time dengan
3 cara berbeda untuk 3 kasus yang berbeda pula. Mengingat recurence yang
diberikan maka ada 3 kasus, yaitu:




( ) ( / ) ( ) T n aT n b f n = +
( )
( )
( )
( )
( )
( )
log
log
log
log
log
0
1. ( )
( )
2. ( )
( ) lg
3. ( ) and ( / ) ( ), for some 1,
( ) ( )
b
b
b
b
b
a
a
a
a
a
f n O n
T n n
f n n
T n n n
f n n af n b cf n c n n
T n f n
c
+c
=
= O
= O
= O
= O s < >
= O

Anda mungkin juga menyukai