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) = (n
m
)
Sebagai contoh :
f(n) = 3n
5
+ 4n
4
+ 10n
2
+ 56 = (n
5
)
f(n) = 9n
7
+ 5n
6
+ 36 = (n
7
)
f(n) = 8n
9
= (n
9
)
f(n) = n
6
+ 19 = (n
6
)
f(n) = 25
= (n
0
) = (1)
Berikut ini adalah urutan dari Big Oh - Big Oh :
(1) (log n) (n) (n log n) (n
2
) (n
3
) (2
n
)
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 (1)
(ii) n kali f(n) = n (n)
(iii)
n
2
kali f(n) = n
2
(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
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 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) = (n)
Bila elemen (item) yang dicari merupakan elemen pertama dari array tersebut :
BEST CASE
F(n) = (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
= (n)
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
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
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
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 :
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 :
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
sebanyak 2
n
1 kali. Bayangkan jika untuk setiap pemindahan memerlukan waktu 1
detik, maka berapa waktu yang diperlukan untuk menyelesaikan 64 buah piringan.
Tonggak Asal (A) Tonggak Bantu (B) Tonggak Tujuan (C)
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) 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
END BACKTRACK
Sedangkan bentuk rekursifnya adalah sebagai berikut :
PROCEDURE RBACKTRACK(k)
GLOBAL n, x(1:n)
FOR setiap x(k) sedemikian sehingga
x(k) 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).
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)
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) M THEN
CALL SUMOFSUB(s+W(k), k+1, r-W(k))
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
ENDIF
ENDIF
IF s + r - W(k) M AND s + W(k) 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.
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).
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
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 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 :
PROCEDURE DANDC(p,q)
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 . . .
. . .
. . .
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
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)
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
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
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
= 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) = (n)
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
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 mid AND j high DO
IF A(h) 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 }
Representasi di dalam tree dari CALL MERGESORT sbb :
Representasi di dalam tree dari CALL MERGE sbb :
T(n) = (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
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) 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
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 = (n
2
)
Average Case = (n log n)
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 z
i
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
=
0
1
dan 0 z
i
1 , p
i
0 , w
i
0 , 0 i 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.
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 z
i
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 n-1 then Z(i) cu/W(i) endif
end GREEDY_KNAPSACK
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 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.
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
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 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
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
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.
Penyelesaian :
Dengan menggunakan algoritma PRIMS, prosesnya adalah sebagai berikut :
1
6
3
4 5
2
10
25
45
20
40
35
55
30
15
50
(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
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) ?
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) ?
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) ?
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
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.
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 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
Contoh Soal
Graf & Analisis Algoritma
1. Orang yang dikenal sebagai bapak dari lahirnya (awal) teori graf adalah :
A. Solin dan Kruskal
B. Hamilton
C. Welch-Powell
D. Leonhard Euler
2. Bila size dari suatu graf adalah n, maka jumlah derajat grafnya adalah :
A. 2n-1
B. 2 (n-1)
C. 2n
D. 2n+1
3. Pada pohon, simpul yang bukan merupakan akar dan berderajat simpul 1 adalah :
A. Cabang
B. Daun
C. Brother
D. Level
4. Suatu bentuk graf yang terbentuk karena penambahan sejumlah vertex baru
terhadap graf asal disebut :
A. Isomorfis
B. Isograf
C. Homomorfis
D. Isographic
5. Suatu tree yang mempunyai cabang / anak selalu 2 disebut :
A. Unary tree
B. Binary tree
C. Union tree
D. Threenary Tree
6. Graf yang tidak memiliki self loop atau ruas sejajar disebut :
A. multigraf
B. graf sederhana
C. graf null
D. graf lengkap
7. Algoritma Welch-Powell digunakan untuk mencari :
A. Minimal Spanning Tree
B. Aliran Maksimal
C. Bilangan Kromatik
D. Jalur Terpendek
8. Perjalanan (walk) yang semua simpul dalam barisan berbeda adalah
A. jalur (path)
B. lintasan ( trail)
C. sirkuit (cycle)
D. diameter
9. Graf regular adalah graf yang memiliki :
A. gelung atau self-loop
B. ruas sejajar
C. derajat setiap simpulnya berbeda
D. derajat setiap simpulnya sama
Logika & Algoritma Halaman 85 dari 93 halaman
RAT
Untuk soal no. 10 s/d 16, gunakan graf di bawah ini :
10. Order dan Size dari graf G
1
adalah :
A. 4 dan 12
B. 12 dan 16
C. 12 dan 17
D. 16 dan 12
11. Derajat dari graf G
1
adalah :
A. 12
B. 24
C. 32
D. 34
12. Bilangan Kromatik dari graf G
1
adalah :
A. 2
B. 3
C. 4
D. 5
13. Pada pewarnaan graf G
1,
simpul yang boleh menggunakan warna yang sama adalah
:
A. A dan L
B. A dan B
C. C dan H
D. B dan H
14. Jarak antara simpul A dan G pada graf G
1
adalah :
A. 2
B. 3
C. 4
D. 5
15. Graf G
1
mempunyai diameter :
A. 2
B. 3
C. 4
D. 5
J
G
L
I
A
B
C
D
E
K
H F
Graf G
1
Logika & Algoritma Halaman 86 dari 93 halaman
RAT
16. Yang merupakan jalur (path) dalam graf G
1
adalah :
A. A,B,C,H,A
B. E,D,K,J,C,D
C. A,L,K,F
D. A,H,C,J,F
17. Graf G2 berikut ini, mempunyai region sebanyak :
A. 2
B. 3
C. 4
D. 5
18. Pembuatan jadwal kuliah pada suatu Perguruan Tinggi dapat diselesaikan dengan
membawanya ke masalah graf, yakni masalah :
A. jalur terpendek
B. minimal spanning tree
C. pewarnaan graf
D. travelling salesman
19. Matriks adjasensi suatu graf bersifat :
A. simetris
B. refleksif
C. transitif
D. antisimetris
20. Pada graf berarah, simpul yang mempunyai derajat kedalam = 0 disebut :
A. muara
B. sumber
C. terpencil
D. artikulasi
21. Pada graf berarah, simpul yang mempunyai derajat keluar = 0 disebut :
A. muara
B. sumber
C. terpencil
D. artikulasi
22. Formula Euler untuk graf planar; dimana V adalah banyaknya simpul, E banyaknya
ruas dan R banyaknya region, adalah :
A. V - R + E = 2
B. V - E + R = 2
C. V - E + 2 = R
D. V + E - R = -2
H
E
F I
A D
C
B
G J
K
Graf G2
Logika & Algoritma Halaman 87 dari 93 halaman
RAT
23. Yang bukan merupakan graf planar adalah :
A. graf kubus
B. graf segitiga
C. graf berbentuk pohon
D. graf lengkap dengan 5 simpul
(K5)
24. Manakah dari pernyataan berikut yang paling benar ?
A. Graf Regular juga merupakan
Graf Lengkap
B. Graf Lengkap juga merupakan
Graf Regular
C. Graf Bipartisi juga merupakan
Graf Regular
D. Graf Regular juga merupakan
Graf Bipartisi
25. Bilangan Kromatik dari graf bipartisi adalah :
A. 2
B. 3
C. 4
D. 5
26. Suatu urutan dari barisan langkah-langkah guna menyelesaikan masalah disebut :
A. algoritma
B. semi algoritma
C. instruksi
D. semi instruksi
27. Suatu prosedur yang hanya akan berhenti jika menghasilkan penyelesaian yang
diharapkan disebut :
A. algoritma
B. semi algoritma
C. instruksi
D. semi instruksi
28. Diagram alur dari proses penyelesaian masalah, yang paling benar adalah :
A. masalah semi algoritma model program eksekusi hasil
B. masalah model algoritma program eksekusi hasil
C. masalah algoritma model program eksekusi hasil
D. masalah program algoritma model eksekusi hasil
29. Penilaian dari suatu algoritma pertama kali dilihat dari :
A. efisiensi
B. efektivitas
C. terstruktur
D. ada output
30. Yang bukan termasuk kriteria dari suatu algoritma yang terbaik adalah :
A. efisiensi
B. terstruktur
C. berakhir
D. prosesnya cepat
Graf & Analisis Algoritma Halaman 88 dari 93 halaman
RAT
31. Jika diketahui F(x) = 20 x
7
+ 12 x
4
+ 38 merupakan fungsi waktu tempuh, maka
A. F(x) = O(20 x
7
)
B. F(x) = 20 O(x
7
)
C. F(x) = O(x
7
+ x
4
)
D. F(x) = O(x
7
)
32. Bila terdapat 4 algoritma sorting (kita sebut algoritma A, B, C dan D), dimana
algoritma A memiliki kompleksitas O(n
2
), algoritma B memiliki kompleksitas O(n
3
),
algoritma C memiliki kompleksitas O(log n), dan algoritma D memiliki kompleksitas
O(n), maka algoritma manakah dari keempat algoritma tersebut yang lebih baik ?
A. algoritma A
B. algoritma B
C. algoritma C
D. algoritma D
33. Diberikan sebuah algoritma sebagai berikut :
Set A[i,j], B[i,j], C[i,j] real
untuk i 1 s/d n kerjakan
untuk j 1 s/d n kerjakan
C[i,j] A[i,j] + B[i,j]
akhir j
akhir i
Algoritma diatas merupakan algoritma untuk :
A. melakukan penjumlahan matriks
B. melakukan perkalian matriks
C. melakukan penjumlahan
D. melakukan perkalian
34. Algoritma pada soal nomor 33 mempunyai kompleksitas waktu :
A. O(n)
B. O(n
2
)
C. O(log n)
D. O(n
3
)
35. Diberikan sebuah algoritma sebagai berikut :
Function RAT (n : integer) : integer
If n := 1 then RAT := 1
Else RAT := n * RAT(n-1)
End Function
Graf & Analisis Algoritma Halaman 89 dari 93 halaman
RAT
Algoritma di atas menggunakan teknik :
A. Backtracking
B. Rekursif
C. Greedy
D. Iteratif
36. Bila Algoritma pada soal nomor 35 berinput n = 5, maka outputnya adalah :
A. 120
B. 720
C. 7
D. 5040
37. Bila Algoritma pada soal nomor 35 berinput n = 5, maka pemanggilan ulang function
RAT adalah :
A. 1 kali
B. 4 kali
C. 5 kali
D. n kali
38. Algoritma pada soal nomor 35 mempunyai kompleksitas waktu :
A. O(n)
B. O(log n)
C. O(n
2
)
D. O(n
3
)
39. Diberikan sebuah algoritma sebagai berikut :
Set x, y, n, i, f : integer
x 1 ; y 1
If n 2 then
begin
for i 3 to n do
begin
F x + y
x y
y F
end
end
else
F x
Write(F)
End
Graf & Analisis Algoritma Halaman 90 dari 93 halaman
RAT
Algoritma di atas menggunakan teknik :
A. Iteratif
B. DANDC
C. Greedy
D. Rekursif
40. Bila Algoritma pada soal nomor 39 berinput n = 13, maka outputnya adalah :
A. 55
B. 233
C. 89
D. 144
41. Algoritma pada soal nomor 39 mempunyai keadaan kompleksitas waktu :
A. keadaan terbaik keadaan
terburuk
B. keadaan terbaik = keadaan
terburuk
C. keadaan terbaik > keadaan
terburuk
D. keadaan terbaik < keadaan
terburuk
42. Dasar dari teknik algoritma Backtracking adalah :
A. searching
B. merging
C. divide and conquer
D. sorting
43. Pencarian ruang solusi dengan menggunakan stack disebut juga dengan istilah :
A. Depth First Search
B. Breadth First Search
C. Binary Search
D. Mergesort
44. Pencarian ruang solusi dengan menggunakan queue disebut juga dengan istilah :
A. Depth First Search
B. Breadth First Search
C. Binary Search
D. Mergesort
45. Solusi yang diperoleh dengan cara Depth First Search berupa tupel yang :
A. berbeda secara teratur
B. seragam atau sama
C. sembarang
D. berbeda dan tidak teratur
46. Teknik Divide AND Conquer adalah teknik yang digunakan untuk merancang
sebuah algoritma dengan cara :
A. memecah n input menjadi 2 subset input
B. memecah n input sebanyak k input, k < n
C. memecah n input sebanyak 2 input
D. memecah n input menjadi k subset input, 1 < k n
47. Perhatikan procedure berikut ini :
Graf & Analisis Algoritma Halaman 91 dari 93 halaman
RAT
PROCEDURE STRAITMAXMIN(A,n,max,min)
INTEGER i,n
max min A(1)
FOR i 2 TO n DO
IF A(i) > max THEN max A(i)
ELSE IF A(i) < min THEN min A(i) ENDIF
REPEAT
END STRAITMAXMIN
Pada procedure STRAITMAXMIN di atas, akan tercapai keadaan terbaik bila :
A. elemen A(1: n) disusun secara menaik
B. elemen A(1: n) disusun secara menurun
C. elemen A(1: n) disusun secara acak
D. elemen A(1: n) disusun secara tidak naik
48. Bila diketahui sebuah prosedur sebagai berikut :
PROCEDURE XXX(A,n)
solusi 0 ......{solusi awal}
FOR i 1 TO n DO
x SELECT(A)
IF FEASIBLE (solusi,x)
THEN solusi UNION(solusi,x)
ENDIF
REPEAT
RETURN (solusi)
END XXX
Algoritma di atas adalah algoritma secara umum dari :
A. Metode DANDC
B. Teknik BackTracking
C. Pemrograman Dinamis
D. Metode Greedy
Graf & Analisis Algoritma Halaman 92 dari 93 halaman
RAT
49. Pada permainan menara HANOI, algoritma yang paling baik adalah digunakannya
teknik/metode :
A. Backtracking
B. Iteratif
C. Greedy
D. Rekursif
50. Pada permainan menara HANOI, bila banyaknya piringan adalah 5 buah, maka
banyaknya pemindahan adalah sebanyak :
A. 15 kali
B. 16 kali
C. 31 kali
D. 32 kali
Logika & Algoritma Halaman 93 dari 93 halaman
RAT