Oleh :
SYAMSUL BACHRI
0093-01-39-2013
MM-9
MAGISTER MANAJEMEN
KONSENTRASI SISTEM INFORMASI
PASCA SARJANAUNIVERSITAS MUSLIM INDONESIA
2014/2015
T (n)
a , n=1
n
2T
+ cn ,n> 1
2
()
12
23
21
35
24
35
24
1
35
min = 1
maks = 35
24
24
DIVIDE
4
12
23
9
21
1
SOLVE : tentukan min &
maks pada tiap bagian
4
12
min = 4
maks = 23
23
21
4
12
min = 1
maks = 35
23
COMBINE
9
21
35
Algoritma MinMaks:
1. Untuk kasus n = 1 atau n = 2,
SOLVE: Jika n = 1, maka min = maks = A n. Jika n = 2, maka bandingkan
kedua elemen untuk menentukan min dan maks.
2. Untuk kasus n > 2,
a. DIVIDE: Bagi dua tabel A secara rekursif menjadi dua bagian yang
berukuran sama, yaitu bagian kiri dan bagian kanan.
b. CONQUER: Terapkan algoritma Divide and Conquer untuk masingmasing bagian, dalam hal ini min dan maks dari tabel bagian kiri
dinyatakan dalam peubah min1 dan maks1, dan min dan maks dari
tabel bagian kanan dinyatakan dalam peubah min2 dan maks2.
c. COMBINE: Bandingkan min1 dengan min2 untuk menentukan min
tabel A. Bandingkan maks1 dengan maks2 untuk menentukan maks
tabel A
DIVIDE dan CONQUER: Bagi tabel menjadi dua bagian sampai berukuran 1
atau 2 elemen:
4
12
23
21
35
24
12
23
21
35
24
12
23
21
35
24
SOLVE dan COMBINE: Tentukan min dan maks masing-masing bagian tabel,
lalu gabung:
4
12
23
21
35
24
min=4
maks=12
min=9
maks=23 maks=21
min=1
min=35
maks=35 maks=24
23
35
12
min = 4
maks=23
4
12
12
24
min = 1
min = 2
maks = 21 maks=35
23
min = 4
maks = 23
4
21
21
35
24
35
24
min = 1
maks = 35
23
21
min = 1
maks = 35
Jadi, nilai minimum tabel = 1 dan nilai maksimum = 35.
min=2
result.append(right.pop(0))
Dari kode di atas terlihat bahwa merge sort memiliki dua bagian, yang dituliskan
dalam dua buah fungsi: merge dan merge_sort. Fungsi merge_sort memiliki logika
dan cara kerja yang sama dengan fungsi penjumlahan total yang kita bangun
sebelumnya, dengan perbedaan pada bagian yang melakukan penggabungan list
(return merge(left, right)).
Penggabungan list sendiri dilakukan dengan cukup sederhana dan gamblang, yaitu
hanya membandingkan elemen-elemen dari dua buah list yang dikirimkan satu per
satu, untuk kemudian disimpan ke dalam variabel result secara terurut. Untuk lebih
jelasnya, mari kita coba bedah algoritma pada fungsi merge, langkah demi langkah.
Misalkan kita memanggil fungsi merge seperti berikut:
left = [3, 5]
right = [1, 4]
merge(left, right)
Jika kita mengikuti langkah demi langkah pada kode, maka pada setiap
iterasi while kita akan mendapatkan nilai masing-masing variabel sebagai
berikut:
# Awal fungsi
left = [3, 5]
right = [1, 4]
result = []
# Iterasi 1
left = [3, 5]
right = [4]
result = [1]
# Iterasi 2
left = [5]
right = [4]
result = [1, 3]
# Iterasi 3
left = [5]
right = []
result = [1, 3, 4]
# Iterasi 4
left = []
right = []
result = [1, 3, 4, 5]
Contoh :
BARISAN BILANGAN FIBBONACI 1, 1, 2, 3, 5, 8, 13, 21, . . .
Teknik Iteratif pada algoritma untuk menentukan suku ke-n dari barisan
bilangan Fibbonaci, adalah sebagai berikut :
1.
2.
3.
Set x, y, n, i, f : integer
x1;y1
If n 2 then
begin
4.
for i 3 to n do
begin
5.
Fx+y
6.
xy
7.
yF
end
else
8.
Fx
9.
Write(F)
End
Gambaran jalannya proses algoritma tersebut adalah sebagai berikut :
Misal n = 5, maka :
x=1, y=1, kemudian
TEKNIK REKURSIF
Teknik Rekursif merupakan salah satu cara pembuatan algoritma dengan
pemanggilan procedure atau function yang sama
Contoh :
Teknik Rekursif pada algoritma untuk menghitung faktorial dari bilangan
bulat positif n, adalah sebagai berikut :
Function FAK (n : integer) : integer
1. If n := 0 then FAK := 1
2. Else FAK := n * FAK(n-1)
Gambaran jalannya proses algoritma tersebut adalah sebagai berikut :
Misal n = 5, maka :
Contoh :
BARISAN BILANGAN FIBBONACI 1, 1, 2, 3, 5, 8, 13, 21, . . .
Teknik Rekursif pada algoritma untuk menentukan suku ke-n dari barisan bilangan
Fibbonaci, adalah sebagai berikut :
Procedure F(n : integer) : integer
1.
If n 2 then F(n) = 1
Else F(n) = F(n-1) + F(n-2)
Endif
End
Gambaran jalannya proses algoritma tersebut adalah sebagai berikut :
Misal n = 5, maka :
REKURSIF
lebih