Anda di halaman 1dari 45

Logika & Algoritma Halaman 1 dari 45 halaman

RAT
Logika & Algoritma









Jurusan Manajemen Informatika
Fakultas Ilmu Komputer & Teknologi Informasi
Universitas Gunadarma
Graf & Analisis Algoritma Halaman 2 dari 45 halaman
Pertemuan ke-7
Algoritma


Algoritma
Istilah algoritma pertama kali diperkenalkan oleh seorang ahli matematika yaitu Abu
Jafar Muhammad Ibnu Musa Al Khawarizmi.
Yang dimaksud dengan algoritma adalah :
Urutan dari barisan instruksi untuk menyelesaikan suatu masalah
Adapun algoritma dapat dinyatakan dalam bentuk : flow chart, diagram alur,
bahasa semu
Sedangkan secara bahasa, algoritma berarti suatu metode khusus untuk
menyelesaikan suatu masalah yang nyata (dari Webster Dictionary).

Dari suatu permasalahan yang akan diselesaikan, bisa terjadi terdapat lebih dari satu
algoritma. Dalam memilih algoritma yang terbaik yang dapat digunakan, harus
diperhatikan beberapa kriteria. Kriteria tersebut antara lain :
- Efektif dan efisien
- Jumlah langkahnya berhingga
- Berakhir
- Ada output
- Terstruktur

Adapun langkah-langkah yang dilakukan dalam proses penyelesaian masalah dengan
bantuan komputer adalah sebagai berikut :
Graf & Analisis Algoritma Halaman 3 dari 45 halaman
MASALAH ?
MODEL
PROGRAM
ALGORITMA
HASIL / SOLUSI
EKSEKUSI
DATA



Studi Tentang Algoritma
Hal-hal yang akan dipelajari mengenai studi algoritma yaitu :
1. Bagaimana Merencanakannya
2. Bagaimana Menyatakannya
3. Bagaimana Validitasnya
4. Bagaimana Menganalisisnya
5. Bagaimana Menguji suatu program

Merencanakan algoritma : Merupakan suatu studi tentang teknik variasi design (model)
Menyatakan algoritma : Menyatakannya dengan singkat, dibuat dalam bahasa
pemrograman yang terstruktur, misalnya Pascal, C


Graf & Analisis Algoritma Halaman 4 dari 45 halaman
Validitas algoritma : Memenuhi kebutuhan yang diinginkan, dan
perhitungannya/solusinya selalu benar untuk semua kemungkinan input yang
legal
Menganalisis algoritma : Perbandingan dari waktu perhitungan dan banyaknya
storage/memori yang digunakan (efisiensi)
Menguji suatu program : Pengujian suatu program yang dilakukan dalam dua fase,
yakni :
- Fase Debugging :
proses dari eksekusi program yang mengkoreksi kesalahan dalam bahasa
pemrograman (logic & syntax)
- Fase Profiling :
program sudah benar
melihat/mengukur waktu tempuh & storage


Analisis Algoritma
Sebagaimana studi tentang algoritma, maka faktor yang sangat diperhitungkan adalah
faktor efisiensi, yang meliputi :
a. Waktu tempuh (running time)
- banyaknya langkah
- besar dan jenis input data
- jenis operasi
- jenis komputer dan kompilator
b. Jumlah memori yang dipakai

Dalam hal menganalisis algoritma, dikenal istilah kompleksitas.
Kompleksitas adalah :
Sebuah fungsi F(N) yang diberikan untuk waktu tempuh dan / atau kebutuhan
storage dengan ukuran N input data
Kompleksitas ini dapat berupa kompleksitas waktu & memori

Graf & Analisis Algoritma Halaman 5 dari 45 halaman
Beberapa definisi kompleksitas:
1. f(n) = O(g(n)) - dua konstanta positif c dan n
0

|f(n)| s c|g(n)| n > n
0


2. f(n) = O(g(n)) - konstanta positif c dan n0
|f(n)| > c|g(n)| n ) n
0


3. f(n) = u(g(n)) - konstanta positif c1, c2 dan n0
c
1
|g(n)|s |f(n)| s c
2
|g(n)| n ) n
0


4. f(n) ~ o(g(n)) - sebuah konstanta positif n0
lim ( ) / ( )
n
f n g n

1, n ) n
0

Dari keempat definisi di atas, yang paling banyak digunakan untuk menganalisis
algoritma adalah definisi 1 (Big Oh).

Teorema :
Jika f(n) = a
m
n
m
+ a
m-1
n
m-1
+ . . .+ a
1
n + a
0
adalah polinomial tingkat m,
maka f(n) = O(n
m
)

Sebagai contoh :
f(n) = 3n
5
+ 4n
4
+ 10n
2
+ 56 = O(n
5
)
f(n) = 9n
7
+ 5n
6
+ 36 = O(n
7
)
f(n) = 8n
9
= O(n
9
)
f(n) = n
6
+ 19 = O(n
6
)
f(n) = 25
= O(n
0
) = O(1)

Berikut ini adalah urutan dari Big Oh - Big Oh :
O(1) ( O(log n) ( O(n) ( O(n log n) ( O(n
2
) ( O(n
3
) ( O(2
n
)
Graf & Analisis Algoritma Halaman 6 dari 45 halaman

Berikut ini beberapa contoh analisis terhadap algoritma
Contoh 1 :
(i) c a + b

(ii) for i 1 to n do
c a + b
repeat

(iii) for i 1 to n do
for j 1 to n do
c a + b
repeat
repeat
Analisisnya :
banyaknya
operasi +
f(n) Big Oh
(i) 1 kali f(n) = 1 O(1)
(ii) n kali f(n) = n O(n)
(iii)
n
2
kali f(n) = n
2
O(n
2
)

Contoh 2 :
Penjumlahan 2 buah matriks berorde (m X n) dan elemennya real

1. Set A[i,j], B[i,j], C[i,j] real
2. Untuk i 1 s/d m kerjakan
3. untuk j 1 s/d n kerjakan
4. C[i,j] A[i,j] + B[i,j]
5. akhir j
6. akhir i
Graf & Analisis Algoritma Halaman 7 dari 45 halaman

Analisisnya :
jumlah operasi + = mn kali
jumlah memori = 3 mn x 4 = 12 mn
(asumsi : 1 elemen memerlukan 4 satuan memori/byte)
total = 13 mn


Keadaan Dari Kompleksitas Waktu Algoritma
Keadaan dari kompleksitas waktu algoritma meliputi :
a. WORST Case nilai maksimum dari f(n) input yang mungkin
b. BEST Case nilai minimum dari f(n) input yang mungkin
c. AVERAGE Case nilai ekspektasi dari f(n)

Contoh 3 :
Menentukan lokasi suatu elemen pada array data secara linier

1. Set k:= 1 ; loc := 0
2. Repeat langkah 3 dan 4 While loc := 0 dan k s n
3. If Item := Data(k) then set loc := k
4. Set k := k + 1
5. If loc := 0 then
Write Elemen tidak ada pada array data
Else Write loc adalah lokasi dari elemen
6. Exit


Bila elemen (item) yang dicari merupakan elemen terakhir dari array tersebut atau tidak
terdapat dalam array :
WORST CASE
F(n) = O(n)
Graf & Analisis Algoritma Halaman 8 dari 45 halaman

Bila elemen (item) yang dicari merupakan elemen pertama dari array tersebut :
BEST CASE
F(n) = O(1)

Bila elemen (item) yang dicari berada diantara elemen pertama dan elemen terakhir
dari array tersebut :
AVERAGE CASE
Banyaknya elemen dalam array tersebut adalah n, maka probabilitas masing-masing
elemen adalah 1/n
F(n) = 1 . 1/n + 2 . 1/n + 3 . 1/n + . . . + n . 1/n
= ( 1 + 2 + 3 + . . . + n ) . 1/n
= (n + 1) . n/2 . 1/n
= (n + 1)/2
= 1/2 n + 1/2
= O(n)


Graf & Analisis Algoritma Halaman 9 dari 45 halaman
Pertemuan ke-8
Teknik Iteratif & Rekursif


Teknik Iteratif
Teknik Iteratif merupakan suatu teknik pembuatan algoritma dengan pemanggilan
procedure beberapa kali atau hingga suatu kondisi tertentu terpenuhi

Contoh :
Teknik Iteratif pada algoritma untuk menghitung faktorial dari bilangan bulat positif n,
adalah sebagai berikut :

Function FAK (n : integer) : integer
FAK=1
For i = 1 TO n
FAK = FAK * i
NEXT i
END FAK

Gambaran jalannya proses algoritma tersebut adalah sebagai berikut :
Misal n = 5, maka :
FAK=1, kemudian
i FAK
1 1 * 1 = 1
2 1 * 2 = 2
3 2 * 3 = 6
4 6 * 4 = 24
5 24 * 5 = 120
Contoh :
BARISAN BILANGAN FIBBONACI
Graf & Analisis Algoritma Halaman 10 dari 45 halaman
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. Set x, y, n, i, f : integer
2. x 1 ; y 1
3. If n ) 2 then
begin
4. for i 3 to n do
begin
5. F x + y
6. x y
7. y F
end
else
8. F x
9. Write(F)
End

Gambaran jalannya proses algoritma tersebut adalah sebagai berikut :
Misal n = 5, maka :
x=1, y=1, kemudian
i F x y
3 1 + 1 = 2 1 2
4 1 + 2 = 3 2 3
5 2 + 3 = 5 3 5


Teknik Rekursif

Graf & Analisis Algoritma Halaman 11 dari 45 halaman
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 :
FAK(5) = 5 * FAK(4)


FAK(4) = 4 * FAK(3)


FAK(3) = 3 * FAK(2)


FAK(2) = 2 * FAK(1)


FAK(1) = 1 * FAK(0)


1
Contoh :
BARISAN BILANGAN FIBBONACI
Graf & Analisis Algoritma Halaman 12 dari 45 halaman
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 s 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 :

F(2)
F(3)
F(4)
F(5)
F(1)
F(1)
F(2)
F(3)
F(2)
1
1
1
1 1




PERBEDAAN ANTARA TEKNIK ITERATIF DAN REKURSIF :

Graf & Analisis Algoritma Halaman 13 dari 45 halaman
ITERATIF REKURSIF
Tidak ada variabel lokal baru Ada variabel lokal baru
Program tidak sederhana Program menjadi lebih sederhana



Permainan Menara Hanoi
Contoh paling umum dari penggunaan teknik rekursif adalah pada permainan menara
Hanoi. Berdasarkan legenda, pertama kali dimainkan secara manual oleh seorang
pendeta Budha di Hanoi, sehingga permainan ini disebut Menara Hanoi. Dalam
permainan ini, akan dipindahkan sejumlah piringan yang tidak sama besarnya dari satu
tonggak ke tonggak lainnya, dengan diperbolehkan menggunakan (melewati) sebuah
tonggak bantuan. Aturan permainannya adalah semua piringan pada tonggak A akan
dipindahkan ke tonggak C (dapat dengan melewati tonggak bantuan B), dengan
ketentuan bahwa pemindahan piringan dilakukan satu per satu dan piringan yang lebih
besar tidak boleh diletakan di atas piringan yang lebih kecil. Untuk jelasnya lihat gambar
berikut :
Menurut legenda tersebut dikatakan bahwa jika anda selesai memindahkan seluruh 64
piringan, pada saat itu juga dunia kiamat. Ini menurut legenda, yang mungkin juga
benar. Secara umum, untuk menyelesaikan n buah piringan diperlukan pemindahan

Tonggak Asal (A) Tonggak Bantu (B) Tonggak Tujuan (C)
Graf & Analisis Algoritma Halaman 14 dari 45 halaman
sebanyak 2
n
1 kali. Bayangkan jika untuk setiap pemindahan memerlukan waktu 1
detik, maka berapa waktu yang diperlukan untuk menyelesaikan 64 buah piringan.

Graf & Analisis Algoritma Halaman 15 dari 45 halaman
Pertemuan ke-9
Teknik Backtracking


Teknik Backtracking merupakan salah satu teknik dalam penyelesaian masalah secara
umum (General Problem Solving). Adapun dasar dari teknik ini adalah suatu teknik
pencarian (Teknik Searching). Teknik pencarian ini digunakan dalam rangka
mendapatkan himpunan penyelesaian yang mungkin. Dari himpunan penyelesaian
yang mungkin ini akan diperoleh solusi optimal atau memuaskan.

Teknik Backtracking ini diperkenalkan pertama kali oleh : D.H. Lehmer (1950),
Penulisan algoritmanya oleh : R.J. Walker (1960), dan
Variasi aplikasinya dikembangkan oleh : Golomb & Baumert (1960)

Berikut ini disajikan algoritma backtracking secara umum, yang menggunakan teknik
iteratif :

PROCEDURE BACKTRACK(n)
INTEGER k,n; LOCAL x(1:n)
k 1
WHILE k > 0 DO
IF ada x(k) yang belum dicoba sedemikian sehingga
x(k) e T(x(1), , x(k-1)) AND Bk(x(1), , x(k)) = TRUE
THEN
IF (x(1), , x(k)) adalah sebuah jalur (path) yang merupakan solusi
THEN PRINT (x(1), , x(k)) ENDIF
k k + 1
ELSE k k 1
ENDIF
REPEAT
Graf & Analisis Algoritma Halaman 16 dari 45 halaman
END BACKTRACK

Sedangkan bentuk rekursifnya adalah sebagai berikut :

PROCEDURE RBACKTRACK(k)
GLOBAL n, x(1:n)
FOR setiap x(k) sedemikian sehingga
x(k) e T(x(1), , x(k-1)) AND Bk(x(1), , x(k)) = TRUE
IF (x(1), , x(k)) adalah sebuah jalur (path) yang merupakan solusi
THEN PRINT (x(1), , x(k)) ENDIF
CALL RBACKTRACK(k + 1)
END RBACKTRACK

Contoh Pemakaian Teknik Backtracking :
- The 8 - Queens Problem
- The 4 - Queens Problem
- Sum of Subsets
- Graph Coloring
- Hamilton Cycles
- Knapsack Problem
- Tic - Tac - Toe Game
- The Travelling Salesman Problem


Sum of Subsets
Masalah utama dari Sum of Subsets adalah jika terdapat n bilangan real dan ingin
dihitung semua kombinasi yang mungkin dari himpunan bilangan tersebut. Kombinasi
yang diinginkan yaitu kombinasi yang jumlah seluruh elemennya sama dengan M
(tertentu).
Graf & Analisis Algoritma Halaman 17 dari 45 halaman
Sebelum kita selesaikan masalah tersebut dengan menggunakan teknik backtracking,
perhatikan terlebih dahulu penyajian permasalahan dan penyelesaiannya dalam bentuk
pohon.
Misalkan banyaknya bilangan real tersebut adalah 4 (n=4). Terdapat 2 jenis pohon
pencarian, yakni Breadth First Search (BFS) yang menggunakan queue dan Depth First
Search (DFS) yang menggunakan stack. Berikut penggambaran kedua jenis pohon
tersebut.








1
2 3 4 5
6 7 8
11
12 13 14 15
16
9 10
Breadth First Search (BFS)
Graf & Analisis Algoritma Halaman 18 dari 45 halaman
Kedua bentuk penyajian pohon dari persoalan sum of subsets, merupakan tahapan
pertama dalam proses mendapatkan solusi sesungguhnya (solusi optimal). Untuk
mendapatkan solusi yang optimal dari ruang penyelesaian digunakan suatu algoritma
lain. Algoritma tersebut menggunakan teknik backtracking, yang selanjutnya disebut
dengan algoritma SUMOFSUB.

PROCEDURE SUMOFSUB(s,k,r)
GLOBAL INTEGER M,n
GLOBAL REAL W(1:n)
GLOBAL BOOLEAN X(1:n)
REAL r,s; INTEGER k,j
X(k) = 1
IF s + W(k) = M THEN PRINT (X(j), j 1 TO k)
ELSE
IF s + W(k) + W(k+1) s M THEN

2
3
18 19
6 7
8
21 12 13 20 26
30 9 10
Depth First Search (DFS)
1
31 24
4 5
28 16 17 11 29 22 25
27
23 14 15
Graf & Analisis Algoritma Halaman 19 dari 45 halaman
CALL SUMOFSUB(s+W(k), k+1, r-W(k))
ENDIF
ENDIF
IF s + r - W(k) > M AND s + W(k) s M THEN
X(k) 0
CALL SUMOFSUB(s, k+1, r-W(k))
ENDIF
END SUMOFSUB

Contoh :
Suatu himpunan terdiri dari 6 bilangan, yakni {5, 10, 12, 13, 15, 18} yang disusun
secara tidak turun. Akan ditentukan himpunan-himpunan bagiannya, yang jumlah
seluruh elemennya adalah 30.

15,3,58 5,3,58 10,3,58 0,3,58
0,4,46 12,4,46 10,4,46 5,4,46 17,4,46 15,4,46 27,4,46
0,5,33 13,5,33 12,5,33 10,5,33 5,5,33 15,5,33
0,1,73
20,6,18
5,2,68 0,2,68
12,6,18 13,6,18 A
C
B
Bagian dari state space tree dengan SUMOFSUB
Graf & Analisis Algoritma Halaman 20 dari 45 halaman
Perhatikan simpul A, B dan C yang merupakan outputnya dalam bentuk tuple
(1,1,0,0,1), (1,0,1,1) dan (0,0,1,0,0,1).



Graf & Analisis Algoritma Halaman 21 dari 45 halaman
Pertemuan ke-10
Metode Devide And Conquer (DANDC) - Searching


Di dalam metode ini, kita mempunyai suatu fungsi untuk menghitung input. Kemudian n
input tersebut dipartisi menjadi k subset input yang berbeda (1< k s n) k subproblem
k subproblem k subsolusi solusi

Bentuk Umum dari Proses Metode DANDC :

Jika subproblem masih relatif cukup besar, maka metode DANDC dapat digunakan lagi
untuk keadaan tersebut. Pemakaian ulang DANDC dinyatakan dengan teknik rekursif.
Pemecahan menjadi k subproblem ini menunjukkan bahwa ia mempunyai sifat yang
sama dengan problem aslinya (awalnya).

Algoritmanya secara umum :

n input
Subsolusi 1
Subproblem 1
Input 1
Solusi Optimal
Subsolusi 2
Subproblem 2
Input 2
Subsolusi 3
Subproblem 3
Input 3
Subsolusi k
Subproblem k
Input k . . .
. . .
. . .
Graf & Analisis Algoritma Halaman 22 dari 45 halaman

PROCEDURE DANDC(p,q)
GLOBAL n,A(1:n); INTEGER m.p.q
IF SMALL(p,q) THEN G(p,q)
ELSE
M DIVIDE(p,q)
COMBINE(DANDC(p,m),DANDC(m+1,q))
ENDIF
END DANDC

SMALL(p,q) adlah fungsi yang bernilai boole yang menentukan apakah input q-p+1
berukuran cukup kecil solusi dapat dihitung tanpa pemecahan. Jika demikian halnya,
maka fungsi G(p,q) yang dipanggil.
Pada keadaan lain fungsi DIVIDE(p,q) yang dipanggil.
Fungsi DIVIDE(p,q) menghasilkan integer yang menguraikan input menjadi 2 bagian.
Misal m = DIVIDE(p,q), maka input dipecah A(p:m) dan A(m+1,q)

Metode DANDC biasa dipakai pada searching dan sorting.


Searching
Menentukan Bilangan Max dan Min
Sebelum kita lihat penggunaan metode DANDC-nya, maka kita lihat terlebih dahulu
algoritmanya secara iteratif sebagai berikut :

PROCEDURE STRAITMAXMIN
INTEGER i,n
max min A(1)
For i 2 TO n DO
IF A(i) > max THEN max A(i) bagian perbandingan
ELSE IF A(i) < min THEN min A(i) bagian perbandingan
Graf & Analisis Algoritma Halaman 23 dari 45 halaman
ENDIF
ENDIF
REPEAT
END STRAITMAXMIN

Procedure STRAITMAXMIN tersebut akan menghasilkan 3 keadaan, yakni:
1. Best Case, bila datanya tersusun menaik, dengan banyak perbandingan adalah n-1
2. Worst Case, bila datanya tersusun menurun, dengan banyak perbandingan adalah
2(n-1)
3. Average Case, bila datanya tidak tersusun menaik ataupun menurun, dengan
banyak perbandingan adalah 3(n-1)/2

Bila pada procedure STRAITMAXMIN tersebut, bagian perbandingannya diubah
menjadi :
IF A(i) > max THEN max A(i) ENDIF
IF A(i) < min THEN min A(i) ENDIF
Maka Best Case = Worst Case = Average Case = 2(n-1)

Algoritmanya secara rekursif (dengan metode DANDC)

PROCEDURE MAXMIN(i,j,fmax,fmin)
INTEGER i,j; GLOBAL n,A(1:n)
CASE
: i=j ; fmax fmin A(i)
: i=j-1 ; IF A(i) < A(j) THEN fmax A(j); fmin A(i)
ELSE fmax A(i); fmin A(j)
ENDIF
: ELSE
mid (i+j)/2
CALL MAXMIN(i,mid,gmax,gmin)
CALL MAXMIN(mid+1,j,hmax,hmin)
Graf & Analisis Algoritma Halaman 24 dari 45 halaman
fmax MAX(gmax,hmax)
fmin MIN(gmin,hmin)
ENDCASE
END MAXMIN

Contoh :
A = { 22, 13, -5, -8, 15, 60, 17, 31, 47 }
Maka simulasi dari procedure MAXMIN tersebut adalah :

Jadi outputnya adalah max = 60 dan min = -8

Jumlah perbandingan elemennya, yang direpresentasikan oleh T(n) adalah :

T( n/2 ) +T( n/2 ( ) + 2 ; n > 2
T(n) { 1 ; n = 2

7
1 9 60 -8
6 9 60 17 1 5 22 -8
8 9 47 31 6 7 60 17 4 5 15 -8 1 3 22 -5
3 3 -5 -5 1 2 22 13
2
9
5 8
3 6 4
1
Graf & Analisis Algoritma Halaman 25 dari 45 halaman
0 ; n = 1

untuk n ~ power value dari 2 = 2
k
dan k integer positif, maka :
T(n) = 2 T(n/2) + 2
= 2 (2 T(n/4) + 2) + 2
= 4 T(n/4) + 4 + 2 = 2
2
T(n/2
2
) + 2
2
+ 2
= 2
3
T(n/2
3
) + 2
3
+ 2
2
+ 2
.
.
.
= 2
k-1
T(2) + 2
k-1
+ 2
k-2
+ + 2
3
+ 2
2
+ 2
= 2
k-1
+2
k
- 2
= 3n/2 - 2

Jadi T(n) = O(n)



Graf & Analisis Algoritma Halaman 26 dari 45 halaman
Pertemuan ke-11
Metode Devide And Conquer (DANDC) - Sorting


Sorting
Untuk mengurutkan barisan n input elemen yang ditempatkan dalam suatu array.
Urutan yang diinginkan adalah urutan yang tidak turun (non decreasing).

Contoh barisan dengan urutan :
1. Menaik : 5, 8, 10, 12, 15, 16
2. Menurun : 20, 17, 15, 14, 12, 10
3. Tidak turun : 5, 9, 10, 12, 12, 15, 16
4. Tidak naik : 16, 15, 15, 12, 10, 8

Dari Metode Sorting yang ada, akan dibahas metode merge sort dan quick sort.

Merge Sort
Algoritma dari Merge Sort terdiri dari dua prosedur, yakni prosedur MERGESORT dan
prosedur MERGE. Kedua prosedur tersebut tidak dapat dipisahkan satu dengan yang
lainnya (terintegrasi).

PROCEDURE MERGESORT(low,high)
INTEGER low,high
IF low < high THEN
mid (low + high) / 2
CALL MERGESORT(low,mid)
CALL MERGESORT(mid+1,high)
CALL MERGE(low,mid,high)
ENDIF
END MERGESORT
Graf & Analisis Algoritma Halaman 27 dari 45 halaman
PROCEDURE MERGE(low,mid,high)
INTEGER h,I,j,k,low,mid,high
GLOBAL A(low:high); LOCAL B(low:high)
h low; j mid + 1; i low
WHILE h s mid AND j s high DO
IF A(h) s A(j) THEN B(i) A(h); h h+1
ELSE B(i) A(j); j j+1
ENDIF
i i+1
REPEAT
IF h > mid THEN FOR k j TO high DO
B(i) A(k); i i+1
REPEAT
ELSE FOR k h TO mid DO
B(i) A(k); i i+1
REPEAT
ENDIF
FOR k low TO high DO
B(k) A(k)
REPEAT
END MERGE


Contoh :
A(1:10) yakni :
A = { 310, 285, 179, 652, 351, 423, 861, 254, 450, 520 }




Graf & Analisis Algoritma Halaman 28 dari 45 halaman
Representasi di dalam tree dari CALL MERGESORT sbb :

Representasi di dalam tree dari CALL MERGE sbb :

T(n) = O(n
2
log n)



1,10
10,10
1,3
9,9 8,8 6,7 5,5 4,4 3,3 1,2
2,2 1,1
6,8 4,5 9,10
7,7 6,6
1,5 6,10
1,1,2
1,2,3 4,4,5
1,3,5
6,7,8 9,9,10
6,6,7
6,8,10
1,5,10
Graf & Analisis Algoritma Halaman 29 dari 45 halaman
Quick Sort
Algoritma Quick Sort terdiri dari dua prosedur, yaitu prosedur PARTITION dan prosedur
QUICKSORT.

PROCEDURE QUICKSORT(p,q)
IF p < q THEN
j q+1
CALL PARTITION(p,j)
CALL QUICKSORT(p,j-1)
CALL QUICKSORT(j+1,q)
ENDIF
END QUICKSORT

PROCEDURE PARTITION(m,p)
INTEGER m,p,i; GLOBAL A(m-1,p)
V A(m); i m
LOOP
LOOP i i+1 UNTIL A(i) > V REPEAT
LOOP p p-1 UNTIL A(p) s V REPEAT
IF i < p THEN CALL INTERCHANGE(A(i),A(p))
ELSE EXIT
REPEAT
A(m) A(p); A(p) V
END PARTITION

Contoh :
Suatu array A berisi elemen-elemen :

65 70 75 80 85 60 55 50 45
1 2 3 4 5 6 7 8 9

Graf & Analisis Algoritma Halaman 30 dari 45 halaman
Hasil tracenya adalah sebagai berikut :

i p 1 2 3 4 5 6 7 8 9 10
65 70 75 80 85 60 55 50 45 +
2 9 65 45 75 80 85 60 55 50 70 +
3 8 65 45 50 80 85 60 55 75 70 +
4 7 65 45 50 55 85 60 80 75 70 +
5 6 65 45 50 55 60 85 80 75 70 +
6 5 60 45 50 55 65 85 80 75 70 +

5 4 55 45 50 60 65 85 80 75 70 +
4 3 50 45 55 60 65 85 80 75 70 +
3 2 45 50 55 60 65 85 80 75 70 +

10 9 55 45 50 60 65 70 80 75 85 +
9 8 50 45 55 60 65 70 75 80 85 +
8 7 45 50 55 60 65 70 75 80 85 +


Analisisnya :
Worst Case = O(n
2
)
Average Case = O(n log n)
Graf & Analisis Algoritma Halaman 31 dari 45 halaman
Pertemuan ke-12
Metode Greedy


Masalah Knapsack
Kita diberikan sebuah knapsack (ransel) yang dapat menampung berat
maksimum M dan sehimpunan benda A = {a
0
,a
1
,...,a
n-1
} yang berbobot W =
{w
0
,w
1
,...,w
n-1
}. Setiap benda tersebut diberikan nilai profit yang dinotasikan dengan P
= {p
0
,p
1
,...,p
n-1
}. Jika kita diperbolehkan memasukkan z
i
bagian dari benda a
i
yang
ada ke dalam knapsack dimana 0 sz
i
s 1 , maka kita dapatkan profit sebesar z
i
p
i

untuk benda a
i
tersebut.
Yang dimaksud dengan masalah knapsack adalah :
Bagaimana kita memilih atau menentukan z
i
untuk masing-masing benda a
i
dari
keadaan di atas dengan tujuan mendapatkan total profit yang maksimal, dan
dengan kendala bahwa total bobot dari benda-benda yang dimasukkan ke dalam
knapsack tidak melebihi M.
Secara matematis, masalah knapsack tersebut dapat ditulis sebagai berikut :

maksimumkan Q z p i i
i=0
n-1
=



dengan kendala zi
i
n
i w W s
=

0
1


dan 0 s z
i
s 1 , p
i
) 0 , w
i
) 0 , 0 s i s n-1

Sebuah solusi yang optimal adalah himpunan Z = {z
0
,z
1
,...,z
n-1
} yang memaksimalkan
nilai Q dan memenuhi kendala-kendala yang ada.

Graf & Analisis Algoritma Halaman 32 dari 45 halaman
Contoh :
Kita diberikan sebuah knapsack (ransel) yang dapat menampung berat
maksimum 15 Kg dan sehimpunan benda A = {a
0
,a
1
,a
2
,a
3
} yang berbobot
(dalam Kg) W = {5,9,2,4}. Setiap benda tersebut diberikan nilai profit P =
{100,135,26,20}. Jika kita diperbolehkan memasukkan z
i
bagian dari benda a
i

yang ada ke dalam knapsack dimana 0 s z
i
s 1 , maka tentukanlah Z =
{z
0
,z
1
,z
2
,z
3
} agar diperoleh total profit yang maksimal !

Algoritma Sekuensial Knapsack Metode Greedy
Salah satu cara untuk menyelesaikan masalah knapsack secara sekuensial
adalah dengan pemakaian metode Greedy. Procedure tersebut disebut procedure
GREEDY_KNAPSACK.
Sebelum procedure tersebut digunakan, benda-benda harus diurutkan rasio p
i
/w
i
-nya
tidak menaik. Dengan kata lain :
p
0
/ w
0 >
p
1
/ w
1 > ... >
p
n-1
/ w
n-1

Adapun procedure GREEDY_KNAPSACK adalah sebagai berikut :

procedure GREEDY_KNAPSACK(P,W,M,Z,n)
real P(0:n-1),W(0:n-1),Z(0:n-1),cu; {n = banyak benda}
integer i,n;
Z 0 { Z(0), Z(1), . . . , Z(n-1) = 0}
cu M
for i 0 to n-1 do
if W(i) ) cu then exit endif
Z(i) 1
cu cu - W(i)
repeat
if i s n-1 then Z(i) cu/W(i) endif
end GREEDY_KNAPSACK
Graf & Analisis Algoritma Halaman 33 dari 45 halaman

Jika algoritma ini digunakan untuk menyelesaikan masalah seperti pada contoh yang
lalu, dimana n = 4; M = 15; W = { 5,9,2,4 }; P = { 100,135,26,20 }, maka akan terlihat
hasil tracenya sebagai berikut :

Z 0
cu 15

i = 0
karena W(0) ( cu yaitu : 5 ( 15 berarti : Z(0) 1
cu 15 - 5 = 10
i = 1
karena W(1) ( cu yaitu : 9 ( 10 berarti : Z(1) 1
cu 10 - 9 = 1
i = 2
karena W(2) ) cu yaitu : 2 ) 1 berarti : keluar dari loop (exit)

Karena 2 s 3 maka Z(2) cu/W(2) = 1/2 = 0,5

Jadi optimisasi masalah knapsack diperoleh bila Z = { 1; 1; 0,5; 0 }
Sehingga Q = 1 x 100 + 1 x 135 + 0,5 x 26 + 0 x 20
= 100 + 135 + 13 + 0
= 248

Analisis :
Kompleksitas waktu dari algoritma Greedy_Knapsack ini adalah O(n). Tetapi jika
data yang digunakan belum terurut rasio p
i
/w
i
-nya tidak menaik, maka
diperlukan kompleksitas waktu sebesar O(n log n) untuk mengurutkan
sebelumnya. Sehingga untuk masalah optimisasi knapsack, kompleksitas waktu
dari algoritma ini akan lebih besar pada waktu proses pengurutannya.
Graf & Analisis Algoritma Halaman 34 dari 45 halaman


Latihan :
Diketahui 3 buah benda dan sebuah knapsack dengan kapasitas maksimum 20. Berat
dan profit dari masing-masing benda tersebut adalah (18, 15, 10) dan (25, 24, 15).
Tentukanlah Z agar diperoleh total profit yang maksimal !

Jawab :
Pertama, kita periksa apakah rasio p
i
/w
i
-nya tidak menaik.
p
0
/w
0
= 25/18
p
1
/w
1
= 24/15
p
2
/w
2
= 15/10
Terlihat bahwa syarat rasio p
i
/w
i
-nya tidak menaik belum terpenuhi. Jadi
susunan (urutan) -nya untuk sementara kita ubah, agar syarat rasio p
i
/w
i
-nya
tidak menaik terpenuhi dan kita dapat menyelesaikan masalah tersebut
dengan procedure GREEDY_KNAPSACK.
Untuk itu, kita ubah sementara urutan benda-bendanya (setelah diperoleh
jawaban sementara, kita kembalikan urutan ke susunan semula). Perubahan
yang kita lakukan adalah sebagai berikut :
urutan ke-
(yang lama)
urutan ke-
(yang baru)
0 2
1 0
2 1

sehingga syaratnya terpenuhi ;
24/15 ) 15/10 ) 25/18 rasio p
i
/w
i
-nya tidak menaik
Graf & Analisis Algoritma Halaman 35 dari 45 halaman
Sekarang kita sudah dapat menggunakan procedure GREEDY_KNAPSACK
untuk menyelesaikan masalah tersebut. Adapun hasil trace-nya adalah sebagai
berikut :


Z 0
cu 20

i = 0
karena W(0) ( cu yaitu : 15 ( 20 berarti : Z(0) 1
cu 20 - 15 = 5
i = 1
karena W(2) ) cu yaitu : 10 ) 5 berarti : keluar dari loop (exit)

Karena 1 s 2 maka Z(1) cu/W(1) = 5/10 = 0,5
Jadi diperoleh : Z(0) = 1 ; Z(1) = 0,5 ; Z(2) = 0
Sekarang urutannya kita kembalikan seperti semula, yakni :

urutan ke-
(yang saat ini)
urutan ke-
(yang
semula)
Z(i)
2 0 0
0 1 1
1 2 0,5

Jadi optimisasi masalah knapsack diperoleh bila Z = { 0; 1; 0,5 }
Sehingga Q = 0 x 25 + 1 x 24 + 0,5 x 15
= 0 + 24 + 7,5
= 31,5
Graf & Analisis Algoritma Halaman 36 dari 45 halaman
Pertemuan ke-13
Metode Greedy (Lanjutan)



Masalah Pohon Rentangan Minimal
Permasalahan umum dari pohon rentangan minimal adalah mencari minimum biaya
(cost) pohon rentangan dari setiap ruas suatu graf yang membentuk pohon.
Setiap graf tidak dapat ditentukan pohon rentangan minimalnya. Adapun graf yang
dapat kita tentukan pohon rentangan minimalnya adalah graf yang memenuhi ketiga
syarat berikut :
1. graf tersebut harus terhubung
2. setiap ruas dari graf tersebut harus mempunyai nilai atau bobot (graf
berlabel)
3. graf teresbut tidak berarah

Algoritma yang dapat digunakan untuk menyelesaikan masalah pohon rentangan
minimal cukup banyak. Dalam pembahasan ini, algoritma yang akan dipakai adalah
algoritma PRIMS.
Berikut ini akan disajikan langkah-langkah penyelesaian masalah pohon rentangan
minimal dengan menggunakan algoritma PRIMS.

PROCEDURE PRIM(E,COST,n,T,mincost)
REAL COST(n,n),mincost
INTEGER NEAR(n),n,i,j,k,l,T(1:n-1,2)
(k,l) ruas dengan biaya atau bobot yang minimum
mincost COST(k,l)
(T(1,1),T(1,2)) (k,l)
FOR i 1 TO n DO
IF COST (i,l) < COST(i,k) THEN NEAR (i) l
Graf & Analisis Algoritma Halaman 37 dari 45 halaman
ELSE NEAR(i) k ENDIF
REPEAT i
NEAR(k) NEAR(l) 0
FOR i 2 TO n-1 DO
Pilih j (sebuah index) sedemikian sehingga NEAR(j) = 0 AND COST(j,NEAR(j)) adalah
minimum
(T(i,1),T(i,2)) (j,NEAR(j))
mincost mincost + COST(j,NEAR(j))
NEAR(j) 0
FOR k 1 TO n DO
IF NEAR(k) = 0 AND COST(k,NEAR(k)) > COST(k,j)
THEN NEAR(k) j
ENDIF
REPEAT k
REPEAT i
IF mincost > ~ THEN PRINT bukan pohon rentangan ENDIF
END PRIM

Contoh :
Perhatikan graf berikut ini :
Tentukanlah nilai pohon rentangan minimalnya, serta pohon yang membentuk pohon
rentangan minimal tersebut.

1
6
3
4 5
2
10
25
45
20
40
35
55
30
15
50
Graf & Analisis Algoritma Halaman 38 dari 45 halaman
Penyelesaian :
Dengan menggunakan algoritma PRIMS, prosesnya adalah sebagai berikut :

(k,l) (1,2)
mincost COST(1,2) = 10
(T(1,1),T(1,2)) (1,2)
i=1
COST (1,2) < COST(1,1) ?
10 < ~ TRUE : NEAR (1) 2
i=2
COST (2,2) < COST(2,1) ?
~ < 10 FALSE : NEAR (2) 1
i=3
COST (3,2) < COST(3,1) ?
50 < ~ TRUE : NEAR (3) 2
i=4
COST (4,2) < COST(4,1) ?
~ < 30 FALSE : NEAR (4) 1
i=5
COST (5,2) < COST(5,1) ?
40 < 45 TRUE : NEAR (5) 2
i=6
COST (6,2) < COST(6,1) ?
25 < ~ TRUE : NEAR (6) 2
NEAR(1) NEAR(2) 0

i = 2
Pilih j = 6 karena NEAR(6) = 0 dan COST(6,NEAR(6)) adalah minimum
(T(2,1),T(2,2)) (6,2)
mincost 10 + COST(6,2) = 10 + 25 = 35
Graf & Analisis Algoritma Halaman 39 dari 45 halaman
NEAR(6) 0
k = 1
NEAR(1) = 0 dan COST(1,NEAR(1)) > COST(1,6) ?
0 = 0 dan ~ > ~ FALSE dan FALSE FALSE
k = 2
NEAR(2) = 0 dan COST(2,NEAR(2)) > COST(2,6) ?
0 = 0 dan ~ > 25 FALSE dan TRUE FALSE
k = 3
NEAR(3) = 0 dan COST(3,NEAR(3)) > COST(3,6) ?
2 = 0 dan 50 > 15 TRUE dan TRUE TRUE : NEAR(3) = 6
k = 4
NEAR(4) = 0 dan COST(4,NEAR(4)) > COST(4,6) ?
1 = 0 dan 30 > 20 TRUE dan TRUE TRUE : NEAR(4) = 6
k = 5
NEAR(5) = 0 dan COST(5,NEAR(5)) > COST(5,6) ?
2 = 0 dan 40 > 55 TRUE dan FALSE FALSE
k = 6
NEAR(6) = 0 dan COST(6,NEAR(6)) > COST(6,6) ?
0 = 0 dan ~ > ~ FALSE dan FALSE FALSE

i = 3
Pilih j = 3 karena NEAR(3) = 0 dan COST(3,NEAR(3)) adalah minimum
(T(3,1),T(3,2)) (3,6)
mincost 35 + COST(3,6) = 35 + 15 = 50
NEAR(3) 0
k = 1
NEAR(1) = 0 dan COST(1,NEAR(1)) > COST(1,3) ?
0 = 0 dan ~ > ~ FALSE dan FALSE FALSE
k = 2
NEAR(2) = 0 dan COST(2,NEAR(2)) > COST(2,3) ?
Graf & Analisis Algoritma Halaman 40 dari 45 halaman
0 = 0 dan ~ > 50 FALSE dan TRUE FALSE
k = 3
NEAR(3) = 0 dan COST(3,NEAR(3)) > COST(3,3) ?
0 = 0 dan ~ > ~ FALSE dan FALSE FALSE
k = 4
NEAR(4) = 0 dan COST(4,NEAR(4)) > COST(4,3) ?
6 = 0 dan 20 > ~ TRUE dan FALSE FALSE
k = 5
NEAR(5) = 0 dan COST(5,NEAR(5)) > COST(5,3) ?
2 = 0 dan 40 > 35 TRUE dan TRUE TRUE : NEAR(5) = 3
k = 6
NEAR(6) = 0 dan COST(6,NEAR(6)) > COST(6,3) ?
0 = 0 dan ~ > 15 FALSE dan TRUE FALSE

i = 4
Pilih j = 4 karena NEAR(4) = 0 dan COST(4,NEAR(4)) adalah minimum
(T(4,1),T(4,2)) (4,6)
mincost 50 + COST(4,6) = 50 + 20 = 70
NEAR(4) 0
k = 1
NEAR(1) = 0 dan COST(1,NEAR(1)) > COST(1,4) ?
0 = 0 dan ~ > 30 FALSE dan TRUE FALSE
k = 2
NEAR(2) = 0 dan COST(2,NEAR(2)) > COST(2,4) ?
0 = 0 dan ~ > ~ FALSE dan FALSE FALSE
k = 3
NEAR(3) = 0 dan COST(3,NEAR(3)) > COST(3,4) ?
0 = 0 dan ~ > ~ FALSE dan FALSE FALSE
k = 4
NEAR(4) = 0 dan COST(4,NEAR(4)) > COST(4,4) ?
Graf & Analisis Algoritma Halaman 41 dari 45 halaman
0 = 0 dan ~ > ~ FALSE dan FALSE FALSE
k = 5
NEAR(5) = 0 dan COST(5,NEAR(5)) > COST(5,4) ?
3 = 0 dan 35 > ~ TRUE dan FALSE FALSE
k = 6
NEAR(6) = 0 dan COST(6,NEAR(6)) > COST(6,4) ?
0 = 0 dan ~ > 20 FALSE dan TRUE FALSE

i = 5
Pilih j = 5 karena NEAR(5) = 0 dan COST(5,NEAR(5)) adalah minimum
(T(5,1),T(5,2)) (5,3)
mincost 70 + COST(5,3) = 70 + 35 = 105
NEAR(5) 0
k = 1
NEAR(1) = 0 dan COST(1,NEAR(1)) > COST(1,5) ?
0 = 0 dan ~ > 45 FALSE dan TRUE FALSE
k = 2
NEAR(2) = 0 dan COST(2,NEAR(2)) > COST(2,5) ?
0 = 0 dan ~ > 40 FALSE dan TRUE FALSE
k = 3
NEAR(3) = 0 dan COST(3,NEAR(3)) > COST(3,5) ?
0 = 0 dan ~ > 35 FALSE dan TRUE FALSE
k = 4
NEAR(4) = 0 dan COST(4,NEAR(4)) > COST(4,5) ?
0 = 0 dan ~ > ~ FALSE dan FALSE FALSE
k = 5
NEAR(5) = 0 dan COST(5,NEAR(5)) > COST(5,5) ?
0 = 0 dan ~ > ~ FALSE dan FALSE FALSE
k = 6
NEAR(6) = 0 dan COST(6,NEAR(6)) > COST(6,5) ?
Graf & Analisis Algoritma Halaman 42 dari 45 halaman
0 = 0 dan ~ > 55 FALSE dan TRUE FALSE

mincost > ~ ?
105 > ~ FALSE

terdapat sebuah pohon rentangan, yang mempunyai nilai minimal = 105
Berikut adalah bentuk pohon rentangan minimalnya :







1
6
3
4 5
2
10
25
20
35
15
Graf & Analisis Algoritma Halaman 43 dari 45 halaman
Pertemuan ke-14
Pemrograman Dinamis


Metode Umum
Pemrograman Dinamis adalah metode rancangan algoritma yang dapat dipakai bila
pemecahan masalah yang mungkin dipandang sebagai hasil dari rangkaian keputusan-
keputusan.
Untuk beberapa masalah dari masalah-masalah ynag dapat dipandang dengan cara ini,
rangkaian optimal dari keputusan-keputusan mungkin dapat ditemukan dengan
membuat satu dari keputusan-keputusan pada satu waktu dan jangan pernah membuat
keputusan yang keliru.
Satu cara untuk memecahkan masalah-masalah yang mana ini tidak mungkin untuk
membuat sebuah rangkaian dari langkah-langkah keputusan yang dapat dilakukan
mengacu (mengarah) kepada rangkaian keputusan optimal adalah untuk mencoba
semua kemungkinan rangkaian-rangkaian keputusan.
Pemrograman Dinamis seringkali secara drastic (spontan) mengurangi jumlah
pembilangan dengan menghindari pembilangan dari beberapa rangkaian keputusan
yang tidak memungkinkan menjadi optimal.
Dalam merumuskan hubungan-hubungan kembali pemrograman dinamis yang harus
dipecahkan, seseorang dapat menggunakan 1 dari 2 pendekatan yang berbeda yaitu
forward atau backward.

Multistage Graf
Sebuah multistage graf adalah sebuah graf berarah dimana bentuk tersebut dibagi
dalam k > 2 disjoint set V1.

Berikut ini adalah contoh sebuah graf 5 stage.
Graf & Analisis Algoritma Halaman 44 dari 45 halaman
1
2
3
4
5
6
7
8
9
10
11
12
9
7
3
2
4
2
2
7
11
1
11
8
6
3
5 4
5
6
2
4
5
t s
V
1
V
4
V
2
V
3
V
5

Algoritma untuk menyelesaikan masalah multistage graf, dengan pendekatan forward
adalah sebagi berikut :
Procedure FGRAPH(E,k,n,P)
1. real COST(n), integer D(n-1), P(k), r, j, k, n
2. COST(n) 0
3. for j n-1 to 1 by -1 do
4. let r be a vertex such that ( j , r ) e E and c( j,r ) +
COST(r) is minimum
5. COST(j) c( j,r ) + COST(r)
6. D(j) r
7. repeat
8. P(1) 1 ; P(k) n
9. for j 2 to k-1 do
10. P(j) D(P(j-1))
11. repeat
12. end FGRAPH
Graf & Analisis Algoritma Halaman 45 dari 45 halaman