Bentuk umum :
While {kondisi} do
…………..
instruksi-instruksi
…………..
Endwhile
Repeat - Until
Bentuk Umum ;
Repeat
………………..
Instruksi
………………...
Until (kondisi)
Contoh :
Contoh :
Algoritma Cetak_Angka
Algoritma Cetak_Angka
{mencetak 1, 2, .., 8 ke piranti keluaran}
{mencetak 1, 2, .., 8 ke piranti keluaran}
Deklarasi :
Deklarasi :
K: integer
K: integer
Deskripsi :
Deskripsi :
K 1 {inisialisasi}
K 1 {inisialisasi}
while k <= 8 do
repeat
write (k)
write (k)
k k+1
k k+1
endwhile
until k > 8
1. Buat Algoritma untuk mengecek suatu bilangan positif atau
negatif menggunakan struktur bahasa indonesia,
pseudocode dan flowchart
2. Buat algoritma untuk menampilkan deret angka berikut :
0
2
5
10
26
37
3. Diketahui sebuah algoritma berikut ini :
Deklarasi :
i, m : integer
Deskripsi :
i=0
m=0
while i < 9 then
m= i*i
cetak m
i=i+1
endwhile.
Tulis output yang dihasilkan algoritma di atas !
Jajat Sudrajat,
http://www.google.co.id/url?sa=t&rct=j&q=syarat%20algoritma%20yang%20baik&sou
rce=web&cd=1&ved=0CBcQFjAA&url=http%3A%2F%2Fyusufhdc.edublogs.org%2Ffi
les%2F2010%2F01%2FPENGANTAR-ALGORITMA_adzet.ppt&ei=K2-
FTryKEOqtiQfYuqCSDw&usg=AFQjCNFR-bfs2ySV6zumBAvRI1tOwM-pvw&cad=rja
Kompleksitas Algoritma
• f(x,y)= xy
def pangkat(x, y):
hasil = 1
for i in range(0, y):
hasil = x * hasil
return hasil
• Pada dasarnya yang kita lakukan pada kode
di atas adalah mengkalikan x dengan
dirinya sendiri sebanyak y kali, dan
menyimpan hasil kali tersebut di dalam
variabel hasil.
• Baris hasil = x * hasil melakukan
perkalian x dengan dirinya sendiri, dan
perulangan dilakukan untuk memastikan
baris ini dijalankan sebanyak y kali
Y Proses Jml Langkah
1 2+1 3
10 2 + 10 12
1 1 1
10 10 100
1
n (1 n )
(1 2 3 ... n ) 2 ( n 1)
T AVG (n)
n n 2
Notasi Asimtotik
• Perhitungan pertumbuhan fungsi seperti
yang kita lakukan sebelumnya sangat
krusial dalam menghitung efisiensi sebuah
algoritma
• Penulisan fungsi pertumbuhan dilakukan
dengan menggunakan notasi asimtotik
Jenis Notasi Asimtotik
• Keadaan terbaik (best case)
Dilambangkan dengan notasi (...) dibaca
Theta
while True:
if upper_bound < lower_bound:
print("Not found.")
return -1
i = (lower_bound + upper_bound) // 2
if lst[i] < search:
lower_bound = i + 1
elif lst[i] > search:
upper_bound = i - 1
else:
print("Element " + str(search) + " in " + str(i))
return 0
1. Langkah yang akan selalu dieksekusi pada
awal fungsi, yaitu inisialisasi lower_bound dan
upper_bound: 2 langkah.
2. Pengecekan kondisi while (pengecekan tetap
dilakukan, walaupun tidak ada perbandingan
yang dijalankan): 1 langkah.
3. Pengecekan awal
(if upper_bound < lower_bound): 1 langkah.
4. Inialisasi i: 1 langkah.
5. Pengecekan kondisi kedua (if lst[i] < search: ...),
kasus terburuk (masuk pada else dan
menjalankan kode di dalamnya): 4 langkah.
Setelah melalui langkah kelima, jika elemen
belum ditemukan maka kita akan kembali ke
langkah kedua. Perhatikan bahwa sejauh ini,
meskipun elemen belum ditemukan atau
dianggap tidak ditemukan, kita minimal harus
menjalankan 2 langkah dan pada setiap
perulangan while kita menjalankan 7 langkah.
Sampai di titik ini, model matematika untuk
fungsi Big-O yang kita dapatkan adalah
seperti berikut:
f(n)=2+7(jumlah perulangan)
Pertanyaan berikutnya, tentunya adalah berapa
kali kita harus melakukan perulangan?
Berhentinya kondisi perulangan ditentukan oleh
dua hal, yaitu:
• Kondisi upper_bound < lower_bound, dan
• Pengujian apakah lst[i] == search, yang
diimplikasikan oleh perintah else.
Perhatikan juga bagaimana baik nilai
upper_bound maupun lower_bound dipengaruhi
secara langsung oleh i, sehingga dapat dikatakan
bahwa kunci dari berhentinya perulangan ada
pada i
Melalui baris kode ini:
i = (lower_bound + upper_bound) / 2
• Atau sederhananya
O(n): Kompleksitas Linear
n log n
n
log n
Kesimpulan
• Pengembangan algoritma idealnya diusahakan
mendapatkan kompleksitas O(1) atau O(logn).
Tetapi pada kenyataannya kita tidak akan selalu
mendapatkan kompleksitas terbaik dalam
merancang algoritma.
• Jika tidak dapat mencapai kompleksitas maksimal,
hal terbaik yang dapat kita lakukan ketika
mengembangkan solusi dari masalah adalah
melihat apakah masalah yang ada dapat
diselesaikan dengan algoritma yang ada terlebih
dahulu, sebelum mengembangkan algoritma baru.
Novrina
JENIS STRATEGI ALGORITMA
Strategi Solusi Langsung
ü Alg. Brute Force
ü Alg Greedy
Strategi Berbasis Pencarian Pada Ruang Status
ü Teknik DFS (Depth First Search)
ü Teknik BFS (Breadth First search)
ü Alg. Backtracking
ü Alg. Branch and Bound
Strategi Solusi Atas-Bawah
ü Alg. Devide and Conquer
Strategi Solusi Bawah-Atas
ü Alg. Dinamic Programming
Strategi Shortest Path
ü Alg. Djikstra
ü Alg . Floyd-Warshall
Definisi Brute Force
Brute force adalah sebuah pendekatan yang
langsung (straightforward) untuk memecahkan
suatu masalah, biasanya didasarkan pada
pernyataan masalah (problem statement) dan
definisi konsep yang dilibatkan.
n! = 1 × 2 × 3 × … × n , jika n > 0
=1 , jika n = 0
Algoritma: kalikan n buah bilangan, yaitu 1, 2, 3, …,
n, bersama-sama
3. Mengalikan dua buah matrik yang berukuran n
× n.
Persoalan:
Diberikan sebuah bilangan bilangan bulat positif.
Ujilah apakah bilangan tersebut merupakan
bilangan prima atau bukan.
9. Menghitung nilai polinom secara brute force
T(n) = (n – 1) + (n – 1) = 2n – 2 = O(n)
• Ukuran tabel hasil pembagian dapat
dibuat cukup kecil sehingga mencari
minimum dan maksimum dapat
diselesaikan (SOLVE) secara lebih mudah.
Algoritma:
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.
(b) CONQUER:
MinMaks(A1, n/2, min1, maks1)
MInMaks(A2, n/2, min2, maks2)
(c) COMBINE:
if min1 <min2 then min min1 else min min2
if maks1 <maks2 then maks maks2 else maks maks1
Procedure MinMaks2 (Input A: TableInt, i, j: integer, Output min, maks: integer)
Algoritma:
If i = j then
min maks A(i)
Else
if (i = j-1) then
if A(i) < A(j) then
maks A(j); min A(i)
else
maks A(i); min A(j)
endif
else
k (i+j) div 2
MinMaks2(A, i, k, min1, maks1)
MinMaks2(A, k+1, j, min2, maks2)
if min1 < min2 then
min min1
else
min min2
endif
if maks1 < maks 2 then
maks maks2
else
maks maks1
endif
endif
endif
Kompleksitas waktu asimptotik:
• MinMaks1 secara brute force :
T(n) = 2n – 2
Persoalan minimasi
Contoh 1: tersedia banyak koin 1, 5, 10, 25
Strategi greedy:
Pada setiap langkah, pilihlah koin dengan nilai
terbesar dari himpunan koin yang tersisa.
Pada akhir setiap lelaran, solusi yang terbentuk adalah optimum lokal.
Pada akhir kalang while-do diperoleh optimum global.
• Warning: Optimum global belum tentu merupakan solusi
optimum (terbaik), tetapi sub-optimum atau pseudo-
optimum.
• Alasan:
1. Algoritma greedy tidak beroperasi secara menyeluruh
terhadap semua alternatif solusi yang ada
(sebagaimana pada metode exhaustive search).
i 1
T=
2. Greedy by weight.
- Pada setiap langkah, pilih objek yang
mempunyai berat teringan.
- Mencoba memaksimumkan keuntungan
dengan dengan memasukkan sebanyak mungkin
objek ke dalam knapsack.
3. Greedy by density.
- Pada setiap langkah, knapsack diisi dengan objek
yang mempunyai pi /wi terbesar.
- Mencoba memaksimumkan keuntungan dengan
memilih objek yang mempunyai keuntungan
per unit berat terbesar.
ALGORITHM
Analysis & Design
With
Introduction to Algorithms
by Thomas H. Cormen, Charles
E. Leiserson, Ronald L.
Rivest, Clifford Stein
TUGAS #1 :
MILIKI BUKU AJAR/TEXT-BOOK UNTUK MATA
KULIAH PAA, PILIH SALAH SATU DARI 3 BUKU INI,
MILIKI KETIGANYA LEBIH BAIK :
104
1 jam
103 10-4 x n3
102
1 menit
10 10-6 x n3
1 detik
1
5 10 15 20 25 30 35 40
10-1 Ukuran masukan
Alasan:
1. Setiap komputer dengan arsitektur berbeda mempunyai
bahasa mesin yang berbeda waktu setiap operasi
antara satu komputer dengan komputer lain tidak sama.
Algoritma pengurutan
Operasi khas: perbandingan elemen, pertukaran
elemen
sum 0
for i 1 to n do
sum sum + a[i]
endfor
rata_rata sum/n
Algoritma
maksa1
k2
while k n do
if ak > maks then
maksak
endif
ii+1
endwhile
{ k > n }
Algoritma:
k1
ketemu false
while (k n) and (not ketemu) do
if ak = x then
ketemutrue
else
k k + 1
endif
endwhile
{ k > n or ketemu }
Tmax(n) = n
Algoritma
i1
jn
ketemufalse
while (not ketemu) and ( i j) do
mid (i+j) div 2
if amid = x then
ketemu true
else
if amid < x then { cari di belahan kanan }
imid + 1
else { cari di belahan kiri }
jmid - 1;
endif
endif
endwhile
{ketemu or i > j }
if ketemu then
idxmid
else
idx0
endif
2. Kasus terburuk:
Tmax (n) = 2log n + 1
Algoritma
for in downto 2 do { pass sebanyak n – 1 kali }
imaks1
for j2 to i do
if aj > aimaks then
imaksj
endif
endfor
{ pertukarkan aimaks dengan ai }
tempai
aiaimaks
aimakstemp
endfor
i = 2 jumlah perbandingan = 1
T(n) = n – 1.
Algoritma
j n
while j 1 do
for i 1 to j do
x x * i
endfor
j d div 2
endwhile
{ j > 1 }
jumlahx
n T(n) = 2n2 + 6n + 1 n2
10 261 100
100 2061 1000
1000 2.006.001 1.000.000
10.000 2.000.060.001 1.000.000.000
T(n) = O(n2)
Rinaldi M/IF2120 Matdis 50
Notasi “O” disebut notasi “O-Besar” (Big-O) yang merupakan
notasi kompleksitas waktu asimptotik.
untuk n n0.
f(n) adalah batas lebih atas (upper bound) dari T(n) untuk n yang
besar.
T(n)
n0 n
atau karena
Penyelesaian:
5 = O(1) karena 5 6.1 untuk n 1.
(C = 6 dan n0 = 1)
Kita juga dapat memperlihatkan bahwa
5 = O(1) karena 5 10 1 untuk n 1
Penyelesaian:
n(n – 1)/2 =O (n2) karena
n(n – 1)/2 n2/2 + n2/2 = n2
untuk semua n 1 (C = 1 dan n0 = 1).
Penyelesaian:
6*2n + 2n2 = O(2n) karena
6*2n + 2n2 6*2n + 2*2n = 8*2n
untuk semua n 1 (C = 8 dan n0 = 1).
Penyelesaian:
1 + 2 + .. + n n + n + … + n = n2 untuk n 1
Penyelesaian:
n! = 1 . 2 . … . n n . n . … . n =nn untuk n 1
Contoh:
T(n) = 5 = 5n0 = O(n0) = O(1)
T(n) = n(n – 1)/2 = n2/2 – n/2 = O(n2)
T(n) = 3n3 + 2n2 + 10 = O(n3)
Penyelesaian:
5n2 = O(n3) karena 5n2 n3 untuk semua n 5.
O(1) O(log n) O(n) O(n log n) O(n 2 ) O(n 3 ) ... O(2 n ) O(n!)
log n n n log n n2 n3 2n n!
0 1 0 1 1 2 1
1 2 2 4 8 4 2
2 4 8 16 64 16 24
3 9 24 64 512 256 362880
4 16 64 256 4096 65536 20922789888000
5 32 160 1024 32768 4294967296 (terlalu besar )
Definisi -Besar,
2n2 + 6n + 1 = (n2)
Karena 5n3 + 6n2 log n = O(n3) dan 5n3 + 6n2 log n = (n3), maka
5n3 + 6n2 log n = (n3)
1 + 2 + … + n = (n) karena
1 + 2 + … + n 1 + 1 + … + 1 = n untuk n 1.
1 + 2 + … + n n/2 + … + (n – 1) + n
n/2 + … + n/2 + n/2
= (n + 1)/2 n/2
(n/2)(n/2)
= n2/4
1 + 2 + … + n = (n2)
1 + 2 + … + n = (n2)
Rinaldi M/IF2120 Matdis 80
Latihan
Tentukan kompleksitas waktu dari algoritma
dibawah ini jika melihat banyaknya operasi a←a+1
for i ← 1 to n do
for j ← 1 to i do
for k ← j to n do
a ← a + 1
endfor
endfor
endfor
Untuk i = 2,
Untuk j = 1, jumlah perhitungan = n kali
Untuk j = 2, jumlah perhitungan = n – 1 kali
...
Untuk i = n,
Untuk j = 1, jumlah perhitungan = n kali
Untuk j = 2, jumlah perhitungan = n – 1 kali
...
Untuk j = n, jumlah perhitungan = 1 kali.
Deklarasi
i, j : integer
Algoritma:
for i 1 to n do
for j 1 to n do
if Ai,j Bi,j then
return false
endif
endfor
endfor
return true
for i := 1 to n do
for j := 1 to n do
for k := 1 to j do
x := x + 1;
Jawaban:
(a) 2 + 4 + 6 … + 2n = 2(1 + 2 + 3 + … + n)
2(n + n + n + … + n) untuk n ≥ 1
= 2n2 = O(n2)
(b) (n + 1)(n + 3)/(n + 2) =(n2 + 4n + 3)/(n + 2)
8n untuk n ≥ 1
= O(n)
Rinaldi M/IF2120 Matdis 87
4. Algoritma di bawah ini menghitung nilai polinom:
p(x) = a0 + a1x + a2x2 + … + anxn
function p(input x:real)real
{ Mengembalikan nilai p(x)}
Deklarasi
j, k : integer
jumlah, suku : real
Algoritma
jumlah a0
for j 1 to n do
{ hitung ajxj }
suku aj
for k 1 to j do
suku suku * x
endfor
jumlah jumlah + suku
endfor
return jumlah
Deklarasi
k : integer
b1, b2, ..., bn : real
Algoritma
bnan
for kn-1 downto 0 do
bkak + bk+1 * x
endfor
return b0
Algoritma:
maksa1
for k2 to n do
if ak > maks then
maksak
endif
endfor
6
procedure PencarianBeruntun(input a1, a2, ..., an : integer, x : integer; output idx : integer)
{ Mencari elemen bernilai x di dalam senarai a1, a2, ..., an. Lokasi (indeks elemen) tempat x
ditemukan diisi ke dalam idx. Jika x tidak ditemukan, maka idx diisi dengan 0.
Masukan: a1, a2, ..., an
Luaran: idx
}
Deklarasi
k : integer
Algoritma:
k1
while (k < n) and (ak x) do
kk+1
endwhile
{ k = n or ak = x }
if ak = x then { x ditemukan }
idx k
else
idx –1 { x tidak ditemukan }
endif
Definisi:
an = a a … a (n kali) , jika n > 0
=1 , jika n = 0
8
function pangkat(a : real, n : integer) → real
{ Menghitung an }
Deklarasi
i : integer
hasil : real
Algoritma:
hasil 1
for i 1 to n do
hasil hasil * a
endfor
return hasil
Definisi:
n! = 1 × 2 × 3 × … × n , jika n > 0
=1 , jika n = 0
10
function faktorial(n : integer) → integer
{ Menghitung n! }
Deklarasi
k : integer
fak : real
Algoritma:
fak 1
for k 1 to n do
fak fak * k
endfor
return fak
11
3. Mengalikan dua buah matriks, A dan B, berukuran n x n
Misalkan C = A × B dan elemen-elemen matrik dinyatakan sebagai
cij, aij, dan bij
Definisi perkalian matriks:
n
cij = ai1b1 j + ai 2b2 j + + ain bnj = aik bkj
k =1
Algoritma brute force: hitung setiap elemen hasil perkalian satu per
satu, dengan cara mengalikan dua vektor yang panjangnya n.
12
procedure PerkalianMatriks(input A, B : Matriks, input n : integer, output C : Matriks)
{Mengalikan matriks A dan B yang berukuran n × n, menghasilkan matriks C yang juga berukuran n × n
Masukan: matriks integer A dan B, ukuran matriks n
Luaran: matriks C
}
Deklarasi
i, j, k : integer
Algoritma:
for i1 to n do
for j1 to n do
C[i, j]0 { inisialisasi penjumlah }
for k 1 to n do
C[i, j]C[i, j] + A[i, k]*B[k, j]
endfor
endfor
endfor
14
function IsPrima(n : integer) → boolean
{ Menguji apakah n bilangan prima atau bukan. True jika n prima, atau false jika n tidak prima. }
Deklarasi
k : integer
test : boolean
Algoritma:
testtrue
k2
while (test) and (k n – 1) do
if n mod k = 0 then
testfalse
else
kk+1
endif
endwhile
{ not test or k = n }
return test
endif
Algoritma:
if n < 2 then { 1 bukan prima }
return false
else
testtrue
k2
while (test) and (k n) do
if n mod k = 0 then
testfalse
else
kk+1
endif
endwhile
{ not test or k > n } Kompleksitas waktu algoritma (kasus terburuk): O(n)
return test
endif
16
Contoh-contoh lainnya
17
Selection Sort
Pass ke –1:
1. Cari elemen terkecil di dalam s[1..n]
2. Letakkan elemen terkecil pada posisi ke-1 (lakukan pertukaran)
Pass ke-2:
1. Cari elemen terkecil di dalam s[2..n]
2. Letakkan elemen terkecil pada posisi 2 (pertukaran)
18
Sumber gambar: Prof. Amr Goneid
Department of Computer Science, AUC
19
procedure SelectionSort(input/output s1, s2, ..., sn : integer)
{ Mengurutkan s1, s2, ..., sn sehingga tersusun menaik dengan metode pengurutan seleksi.
Masukan: s1, s2, ..., sn
Luaran: s1, s2, ..., sn (terurut menaik) }
Deklarasi
i, j, imin, temp : integer
Algoritma:
for i 1 to n – 1 do { jumlah pass sebanyak n – 1 }
{ cari elemen terkecil di dalam s[i], s[i+1, ..., s[n] }
imin i { elemen ke-i diasumsikan sebagai elemen terkecil sementara }
for j i+1 to n do
if s[j] < s[imin] then
imin j
endif
endfor
{pertukarkan s[imin] dengan s[i] }
temp s[i]
s[i] s[imin]
s[imin] temp
endfor
21
Sumber gambar: Prof. Amr Goneid
Department of Computer Science, AUC
22
procedure BubbleSort (input/output s1, s2, ..., sn : integer, input n : integer)
{Mengurutkan s1, s2, ..., sn sehingga terurut menaik dengan metode pengurutan bubble sort.
Masukan: s1, s2, ..., sn
Luaran: s1, s2, ..., sn (terurut menaik) }
Deklarasi
i : integer { pencacah untuk jumlah langkah }
k : integer { pencacah,untuk pengapungan pada setiap langkah }
temp : integer { peubah bantu untuk pertukaran }
Algoritma:
for i n – 1 downto 1 do
for k 1 to i do
if s[k+1] < s[k] then
{pertukarkan s[k] dengan s[k+1]}
temp s[k]
s[k] s[k+1]
s[k+1] temp
endif
endfor
endfor
24
function polinom(t : real)→real
{ Menghitung nilai p(x) pada x = t. Koefisien-koefisein polinom sudah disimpan di dalam a[0..n].
Masukan: t
Keluaran: nilai polinom pada x = t. }
Deklarasi
i, j : integer
p, pangkat : real
Algoritma:
p0
for i n downto 0 do
pangkat 1
for j 1 to i do {hitung ti }
pangkat pangkat * t
endfor
p p + a[i] * pangkat
endfor
return p
Deklarasi
i, j : integer
p, pangkat : real
Algoritma:
p a[0]
pangkat 1
for i 1 to n do
pangkat pangkat * t
p p + a[i] * pangkat
endfor
Contoh:
Teks: Di mana-mana banyak orang berjualan bakso
Pattern: jual
27
Algoritma brute force:
3. Bila pattern belum ditemukan kecocokannya dan teks belum habis, geser
pattern satu karakter ke kanan dan ulangi kembali langkah 2.
28
Contoh 1:
Teks: NOBODY NOTICED HIM
Pattern: NOT
29
Contoh 2 (string biner):
Teks: 10010101001011110101010001
Pattern: 001011
10010101001011110101010001
1 001011
2 001011
3 001011
4 001011
5 001011
6 001011
7 001011
8 001011
9 001011
30
function PencocokanString(input P : string, T : string, m, n : integer, output idx : integer) → integer)
{ Luaran: lokasi awal kecocokan (idx) }
Deklarasi
i : integer
ketemu : boolean
Algoritma:
i0
ketemu false
while (i n – m) and (not ketemu) do
j1
while (j m) and (Pj = Ti + j ) do
jj+1
endwhile
{ j > m or Pj Ti+j }
• Best case terjadi bila karakter pertama pattern P tidak pernah sama dengan
karakter teks T yang dicocokkan.
• Jumlah pergeseran pattern = (n – m + 1)
• Jumlah perbandingan karakter sebanding dengan jumlah pergeseran pattern
• Jumlah perbandingan maksimal n kali:
• Kompleksitas kasus terbaik adalah O(n).
• Contoh:
T: String ini berakhir dengan zzzz
P: zzzz
Average Case
• Contoh:
• T: Pada bulan Januari, hujan hampir turun setiap hari
• P: hujan
8. Mencari Pasangan Titik yang Jaraknya Terdekat (Closest Pairs Problem)
Persoalan: Diberikan n buah titik (pada 2-D atau 3-D), tentukan dua
buah titik yang terdekat satu sama lain.
36
• Jarak dua buah titik, p1 = (x1, y1) dan p2 = (x2, y2) dihitung dengan rumus Euclidean:
𝑑= (𝑥1 − 𝑥2 )2 +(𝑦1 − 𝑦2 )2
• Ada n buah titik, maka untuk setiap titik dihitung jaraknya dengan n – 1 titik lainnya. Jadi
ada n(n – 1) perhitungan jarak dengan rumus Euclidean.
• Untuk setiap titik akan terhitung dua kali dalam perhitungan jarak, jadi sebenarnya hanya
terdapat sebanyak n(n – 1)/2 perhitungan jarak dengan rumus Euclidean.
37
procedure CariDuaTitikTerdekat(input P : SetOfPoint, n : integer, output P1, P2 : Point)
{ Mencari dua buah titik di dalam himpunan P yang jaraknya terdekat.
Masukan: P = himpunan titik, dengan struktur data sebagai berikut
type Point = record(x : real, y : real)
type SetOfPoint = array [1..n] of Point
Luaran: dua buah titik, P1 dan P2 yang jaraknya terdekat. }
Deklarasi
d, dmin : real
i, j : integer
Algoritma:
dmin9999
for i 1 to n – 1 do
for j i + 1 to n do
d((Pi.x – Pj.x)2 + ((Pi.y – Pj.y)2)
if d < dmin then { perbarui jarak terdekat }
dmin d
P1 Pi
P2 Pj
endif
endfor
endfor
39
2. Algoritma brute force lebih cocok untuk persoalan yang
ukuran masukannya (n) kecil.
Pertimbangannya:
- sederhana,
- implementasinya mudah
40
3. Meskipun bukan metode problem solving yang mangkus, hampir semua
persoalan dapat diselesaikan dengan algoritma brute force. Ini adalah
kelebihan brute force
Bahkan, ada persoalan yang hanya dapat diselesaikan dengan brute force.
Contoh: mencari elemen terbesar di dalam senarai.
Contoh lainnya?
1. Algoritma brute force dapat diterapkan untuk memecahkan hampir sebagian besar
masalah (wide applicability).
3. Algoritma brute force menghasilkan algoritma yang layak untuk beberapa masalah
penting seperti pencarian, pengurutan, pencocokan string, perkalian matriks.
43
Algoritma Brute Force dalam Sudoku
• Sudoku adalah adalah permainan teka-teki (puzzle) logik yang
berasal dari Jepang. Permainan ini sangat populer di seluruh dunia.
44
• Kotak-kotak di dalam Sudoku harus diisi dengan angka 1 sampai 9
sedemikian sehingga:
1. tidak ada angka yang sama (berulang) pada setiap baris;
2. tidak ada angka yang sama (berulang) pada setiap kolom;
3. tidak ada angka yang sama (berulang) pada setiap bujursangkar (persegi)
yang lebih kecil.
45
Algoritma Brute Force untuk Sudoku:
1. Tempatkan angka “1” pada sel kosong pertama. Periksa apakah
penempatan “1” dibolehkan (dengan memeriksa baris, kolom,
dan kotak).
47
• Langkah-langkah di dalam exhaustive search:
2. Evaluasi setiap kemungkinan solusi satu per satu, simpan solusi terbaik yang
ditemukan sampai sejauh ini (the best solution found so far).
48
Contoh-contoh exhaustive search
1. Travelling Salesperson Problem (TSP)
Persoalan: Diberikan n buah kota serta diketahui jarak antara setiap kota
satu sama lain. Temukan perjalanan (tour) dengan jarak terpendek yang
dilakukan oleh seorang pedagang sehingga ia melalui setiap kota tepat
hanya sekali dan kembali lagi ke kota asal keberangkatan.
49
• Persoalan TSP tidak lain adalah menemukan sirkuit Hamilton dengan
bobot minimum.
50
Contoh 3:
TSP dengan n = 4, simpul awal = a
(4 – 1)! = 3! = 6
53
• Perbaikan: setengah dari semua rute perjalanan adalah hasil pencerminan
dari setengah rute yang lain, yakni dengan mengubah arah rute perjalanan
No. Rute perjalanan (tour) Bobot
1 dan 6 1. a→b→c→d→a 12+8+15+10 = 45
12+9+15+5 = 41
2. a→b→d→c→a
5+8+9+10 = 32
2 dan 4 3.
4.
a→c→b→d→a
a→c→d→b→a 5+15+9+12 = 41
5. a→d→b→c→a 10+9+8+5 = 32
3 dan 5 6 a→d→c→b→a 10+15+8+12 = 45
• maka dapat dihilangkan setengah dari jumlah permutasi (dari 6 menjadi 3).
5 9 5 9
10 8 10 8
d 15 c d 15 c d c
Bobot = 45 Bobot = 32 54
Bobot = 41
• Untuk graf lengkap dengan n buah simpul, kita hanya perlu
mengevaluasi (n – 1)!/2 sirkuit Hamilton.
55
• Sayangnya, untuk persoalan TSP belum ada algoritma lain yang lebih
baik daripada algoritma exhaustive search.
56
2. 1/0 Knapsack Problem
• Persoalan: Diberikan n buah objek dan sebuah
knapsack dengan kapasitas bobot K. Setiap objek
memiliki properti bobot (weigth) wi dan
keuntungan(profit) pi.
58
• Solusi persoalan dinyatakan sebagai X = {x1, x2, …, xn}
xi = 1, jika objek ke-i dipilih,
xi = 0, jika objek ke-i tidak dipilih.
w x K
i =1
i i
60
Contoh 4: Misalkan terdapat n = 4 buah objek dan sebuah knapsack
dengan kapasitas K = 16. Properti setiap objek adalah sbb
61
Himpunan Bagian Total Bobot Total keuntungan
{} 0 0
{1} 2 20
{2} 5 30
{3} 10 50
{4} 5 10
{1, 2} 7 50
{1, 3} 12 70
{1, 4} 7 30
{2, 3} 15 80 → optimal
{2, 4} 10 40
{3, 4} 15 60
{1, 2, 3} 17 tidak layak
{1, 2, 4} 12 60
{1, 3, 4} 17 tidak layak
{2, 3, 4} 20 tidak layak
{1, 2, 3, 4} 22 tidak layak
63
Bersambung ke bagian 2
Bahan Kuliah
IF2211 Strategi Algoritma
3
3. (Bujursangkar ajaib). Bujursangkar ajaib (magic square) adalah
pengaturan n buah bilangan dari 1 hingga n2 di dalam bujursangkar
yang berukuran n x n sedemikian sehingga jumlah nilai setiap
kolom,baris, dan diagonal sama. Rancanglah algoritma exhaustive
search untuk membangkitkan bujursangkar ajaib orde n.
4
Exhaustive Search di dalam Kriptografi
• Di dalam kriptografi, exhaustive search merupakan teknik yang digunakan
penyerang untuk menemukan kunci dekripsi dengan cara mencoba semua
kemungkinan kunci.
Serangan semacam ini dikenal dengan nama exhaustive key search attack atau
brute force attack.
• Serangan yang sama juga digunakan dalam menemukan password, PIN, dan
kode rahasia lainnya.
5
Contoh 5: Panjang kunci enkripsi di dalam algoritma DES (Data Encryption
Standard) adalah 64 bit.
• Dari 64 bit tersebut, hanya 56 bit yang digunakan (8 bit paritas lainnya
tidak dipakai).
7
Teknik Heuristik
• Algoritma exhaustive search dapat diperbaiki kinerjanya sehingga
tidak perlu melakukan pencarian solusi dengan mengeksplorasi
semua kemungkinan solusi.
9
Asal Mula Kata Heuristik
10
11
12
• Heuristik mengacu pada teknik memecahkan persoalan berbasis pengalaman,
dari proses pembelajaran, dan penemuan solusi meskipun tidak dijamin
optimal.
• Teknik heuristik mungkin tidak selalu memberikan hasil optimal, tetapi secara
ekstrim ia berguna pada penyelesaian persoalan.
13
• Heuristik yang bagus dapat secara dramatis mengurangi waktu yang
dibutuhkan untuk memecahkan persoaln dengan cara mengeliminir
kebutuhan untuk mempertimbangkan kemungkinan solusi yang tidak
perlu.
14
Contoh penggunaan heuristik untuk mempercepat algoritma exhaustive search
• Salah satu teknik heuristik yang digunakan misalnya membuat aturan bahwa
dalam Bahasa Inggris huruf c dan h selalu digunakan berdampingan sebagai ch
(lihat contoh charm dan march), sehingga kita hanya membuat permutasi
huruf-huruf dengan c dan h berdampingan.
16
Contoh 7: Kubus ajaib 3 x 3 mempunyai 8 buah solusi sbb
Dengan exhaustive search, kita perlu memeriksa 9! = 362,880 susunan solusi yang
mungkin, kemudian memeriksa apakah bahwa jumlah setiap baris, setiap kolom, atau
setiap diagonal selalu 15.
Teknik heuristik: pada setiap pembangkitan permutasi, periksa apakah nilai 3 buah angka
pertama jumlahnya 15. Jika ya → teruskan, jika tidak → tolak
17
Contoh 8: Pada permainan 8-puzzle, fungsi heuristik digunakan untuk
menentukan cost minimal dari suatu status ke status lainnya di dalam
ruang pencarian.
3 2 8 1 2 3
5 4 4 5 6
7 6 1 7 8
Fungsi heuristik:
h(n) = jumlah ubin yang tidak terdapat pada status akhir
=5
= dibutuhkan minimal 5 pergerakan ubin untuk mencapai status akhir
dari status awal
18
Latihan Soal Brute Force dan Exhaustive Search
1. Soal UTS 2014
• Diberikan sebuah larik (array) integer a1, a2, …, an. Anda diminta
menemukan sub-sequence yang kontigu (berderetan) dari larik tersebut
yang memiliki nilai maksimum. Nilai maksimum sub-sequence adalah
nol jika semua elemen larik adalah negatif. Sebagai contoh instansiasi:
larik [–2 , 11, –4 , 13, –5 , 2, –1, 3] memiliki nilai maksimum sub-
sequence kontigu adalah 20, yaitu dari elemen ke-2 hingga elemen ke-4
(yaitu [11, –4 , 13]).
Jumlah semua upa-himpunan adalah 2n, menghitung jumlah nilai di dalam upa-
himpunan adalah O(n), maka kompleksitas algoritmanya adalah O(n. 2n).
20
• Alternatif 2 (Exhaustive Search), lebih baik
- Tuliskan semua sub-sequence dengan 1 elemen (ada n buah), sub-sequence
dengan 2 elemen (ada n – 1 buah), dan seterusnya hingga sub-sequence dengan n
elemen (1 buah). Seluruhnya ada
n + (n – 1) + (n – 2) + … + 2 + 1 = n(n + 1)/2 sub-sequence.
Contoh: [8 , –6, 4 , 3, –5] → n = 5
Sub-sequence dengan 1 elemen: [8] , [–6], [4], [3] , [–5] → 5 sub-sequence
Sub-sequence dengan 2 elemen: [8, –6], [–6, 4], [4, 3], [3, –5] → 4 sub-sequence
dst …
- Hitung jumlah nilai pada setiap sub-sequence
- Pilih sub-sequence yang jumlahnya maksimum
22
23
3. Soal UTS 2011
• Misalkan kita menempuh perjalanan sejauh 100 km, dimulai dari titik
0 dan berakhir pada kilometer 100. Di sepanjang jalan terdapat SPBU
pada jarak 10, 25, 30, 40, 50, 75, dan 80 km dari titik awal. Tangki
bensin pada awalnya hanya cukup untuk berjalan sejauh 30 km.
Bagaimana kita menempuh tempat pemberhentian agar kita berhenti
sesedikit mungkin?
24
TAMAT
25
Bahan Kuliah IF2211 Strategi Algoritma
Algoritma Greedy
(Bagian 1)
2
Contoh persoalan optimasi:
➔ Persoalan minimasi
3
Contoh 1: tersedia banyak koin 1, 5, 10, 25
4
• Greedy = rakus, tamak, loba, …
• Oleh karena itu, pada setiap langkah harus dibuat keputusan yang terbaik dalam
menentukan pilihan. Tidak bisa mundur lagi (kembali) ke langkah sebelumnya.
• Jadi pada setiap langkah, kita memilih optimum lokal (local optimum)
6
• Tinjau masalah penukaran uang:
Strategi greedy:
Pada setiap langkah, pilihlah koin dengan nilai terbesar
dari himpunan koin yang tersisa.
• Misal: A = 32, koin yang tersedia: 1, 5, 10, dan 25 (dalam jumlah banyak)
Langkah 1: pilih 1 buah koin 25 (Total = 25)
Langkah 2: pilih 1 buah koin 5 (Total = 25 + 5 = 30)
Langkah 3: pilih 1 buah koin 1 (Total = 25+5+1 = 31)
Langkah 4: pilih 1 buah koin 1 (Total = 25+5+1 = 32)
9
Skema umum algoritma greedy:
function greedy(C : himpunan_kandidat) → himpunan_solusi
{ Mengembalikan solusi dari persoalan optimasi dengan algoritma greedy }
Deklarasi
x : kandidat
S : himpunan_solusi
Algoritma:
S {} { inisialisasi S dengan kosong }
while (not SOLUSI(S)) and (C {} ) do
x SELEKSI(C) { pilih sebuah kandidat dari C}
C C – {x} { buang x dari C karena sudah dipilih }
if LAYAK(S {x}) then { x memenuhi kelayakan untuk dimasukkan ke dalam himpunan solusi }
S S {x} { masukkan x ke dalam himpunan solusi }
endif
endwhile
{SOLUSI(S) or C = {} }
• Pada akhir setiap lelaran (iterasi), solusi yang terbentuk adalah optimum lokal.
• Pada akhir kalang while-do diperoleh optimum global (jika ada). 10
• Warning: Optimum global belum tentu merupakan solusi optimum (terbaik), bisa
jadi merupakan solusi sub-optimum atau pseudo-optimum.
• Alasan:
1. Algoritma greedy tidak beroperasi secara menyeluruh
terhadap semua kemungkinan solusi yang ada
(sebagaimana pada metode exhaustive search).
• Misalnya mencari tur dengan bobot minimal pada persoalan TSP untuk
jumlah simpul (n) yang banyak dengan algoritma brute force dibutuhkan
waktu komputasi yang lama untuk menemukannya.
17
Penyelesaian dengan exhaustive search
18
Penyelesaian dengan algoritma greedy
• Strategi greedy: Pada setiap langkah, pilih koin dengan nilai terbesar dari himpunan
koin yang tersisa.
function CoinExchange(C : himpunan_koin, A : integer) → himpunan_solusi
{ mengembalikan koin-koin yang total nilainya = A, tetapi jumlah koinnya minimum }
Deklarasi
S : himpunan_solusi
x : koin
Algoritma
S {}
while ((nilai semua koin di dalam S) A) and (C {} ) do
x koin yang mempunyai nilai terbesar
C C – {x}
if ((nilai semua koin di dalam S) + nilai koin x A then
S S {x}
endif
endwhile
if ((nilai semua koin di dalam S) = A then
return S
else
write(’tidak ada solusi’)
endif
19
• Memilih koin bernilai terbesar dari himpunan dengan n koin kompleksitasnya
adalah O(n), menjumlahkan semua koin di dalam S juga O(n).
• Kalang while diulang maksimal sebanyak jumlah koin di dalam himpunan, yaitu n
kali.
• Sehingga kompleksitas algoritma CoinExchange adalah O(n2)
• Agar pemilihan koin uang berikutnya optimal, maka kita perlu mengurutkan
himpunan koin dalam urutan yang menurun (noninceasing order).
• Sayangnya, algoritma greedy untuk persoalan penukaran uang ini tidak selalu
menghasilkan solusi optimal (lihat contoh-contoh sebelumnya).
20
2. Persoalan memilih aktivitas
(activity selection problem)
• Persoalan: Misalkan terdapat n buah aktivitas, S = {1, 2, …, n}, yang ingin
menggunakan sebuah resource (misalnya ruang pertemuan, studio, prosesor,
dll). Resource hanya dapat digunakan oleh satu aktivitas dalam satu waktu.
Setiap kali suatu aktivitas memakai (occupy) resource, maka aktivitas lain tidak
dapat menggunakannya sebelum aktivitas tersebut selesa.
Setiap aktivitas i memiliki waktu mulai si dan waktu selesai fi, yang dalam hal ini
si fi. Dua aktivitas i dan j dikatakan kompatibel jika interval [si, fi] dan [sj, fj]
tidak beririsan.
21
Contoh 4: Contoh instansiasi persoalan. Misalkan terdapat n = 11 buah aktivitas
dengan waktu mulai dan waktu selesai masing-masing sebagai berikut:
i si fi
------------------------
1 1 4
2 3 5
3 4 6
4 5 7
5 3 8
6 7 9
7 10 11
8 8 12
9 8 13
10 2 14
11 13 15
22
Penyelesaian dengan Exhaustive Search
Langkah-langkah:
• Tentukan semua himpunan bagian dari himpunan dengan n aktivitas.
• Jika kompatibel, maka himpunan bagian tersebut adalah salah satu kandidat
solusinya.
2. Pada setiap langkah, pilih aktivitas yang waktu mulainya lebih besar
atau sama dengan waktu selesai aktivitas yang sudah dipilih
sebelumnya
24
------------- Solusi:
i si fi
------------- A = {1}, fj = 4
1 1 4 A = {1, 3}, fj = 6
2 3 5 A = {1, 3, 6}, fj = 9
3 4 6 A = {1, 3, 6, 7}, fj = 11
4 5 7
5 3 8 A = {1, 3, 6, 7, 11}, fj = 15
6 7 9
7 10 11
8 8 12
9 8 13
10 2 14
11 13 15
-------------
Sumber: http://scanftree.com/Data_Structure/activity-selection-problem
26
• Solusi dengan Algoritma Greedy:
27
Algoritma greedy untuk activity selection problem
function Greedy-Activity-Selector(s1, s2, …, sn : integer, f1, f2, …, fn : integer) → set of integer
{ Asumsi: aktivitas sudah diurut terlebih dahulu berdasarkan waktu selesai: f1 <= f2 <= … <= fn }
Deklarasi
i, j, n : integer
A : set of integer
Algoritma:
n ← length(s)
A ← {1} { aktivitas nomor 1 selalu terpilih }
j←1
for i ← 2 to n do
if si fj then
A ← A {i]
j←i
endif
endif
30
Solusi dengan strategi greedy yang kedua: memilih aktivitas yang
paling kecil lebih dahulu
i si fi durasi
----------------------------------
1 1 4 3
2 3 5 2
3 4 6 2
4 5 7 2
5 3 8 5
6 7 9 2
7 10 11 1
8 8 12 4
9 8 13 5
10 2 14 12
11 13 15 2
-----------------------------------
Solusi: aktivitas yang dipilih adalah 7, 2, 4, 6, dan 11 (5 aktivitas) 31
3. Minimisasi waktu di dalam sistem
• Persoalan: Sebuah server (dapat berupa processor, pompa, kasir di bank, tukang
cukur, dll) mempunyai n pelanggan (customer, client) yang harus dilayani. Waktu
pelayanan untuk setiap pelanggan i adalah ti.
Bagaimana cara meminimumkan total waktu di dalam sistem:
n
T= (waktu di dalam sistem)
i =1
32
Contoh 6: Tiga pelanggan dengan
t1 = 5, t2 = 10, t3 = 3,
• Pita kaset adalah media penyimpanan sinyal analog pada masa lalu. Pita kaset
merupakan media penyimpanan yang bersifat sekuensial.
• Lagu-lagu (atau program-program) disimpan di dalam pita kaset secara sekuensial.
Panjang setiap lagu i adalah ti (dalam satuan menit atau detik). Untuk menemukan
(retrieve) dan memainkan sebuah lagu, pita pada mulanya diposisikan pada bagian
awal.
• Jika lagu-lagu di dalam pita disimpan dalam urutan I = i1, i2, …, in, maka lama waktu
yang dibutuhkan untuk memainkan lagu ij sampai selesai adalah σ𝑖≤𝑘≤𝑗 𝑡𝑖𝑘
• Jika semua lagu sering dimainkan, maka waktu rata-rata retrieval (mean retrieval
1
time atau MRT) adalah σ𝑖≤𝑗≤𝑛 𝑡𝑗 .
𝑛
36
Penyelesaian dengan algoritma greedy
• Strategi greedy: Pada setiap langkah, pilih pelanggan yang membutuhkan
waktu pelayanan terkecil di antara pelanggan lain yang belum dilayani.
Deklarasi
S : himpunan_pelanggan
i : pelanggan
Algoritma
S {}
while (C {}) do
i pelanggan yang mempunyai t[i] terkecil
C C – {i}
S S {i}
endwhile
return S
37
• Agar proses pemilihan pelanggan berikutnya optimal, urutkan pelanggan
berdasarkan waktu pelayanan dalam urutan yang menaik.
Algoritma:
{pelanggan 1, 2, ..., n sudah diurut menaik berdasarkan ti}
for i1 to n do
write(i)
endfor
38
• Algoritma greedy untuk penjadwalan pelanggan berdasarkan waktu layanan
yang terurut menaik akan selalu menghasilkan solusi optimal .
T= t
k =1 j =1
ij
Bukti untuk teorema ini dapat dibaca pada slide berikut (Sumber: Ellis Horrowitz
& Sartaj Sahni, Computer Algorithms, 1998)
39
(Sumber: Ellis Horrowitz & Sartaj Sahni,
Computer Algorithms, 1998)
4. Integer Knapsack Problem
• Persoalan: Diberikan n buah objek dan sebuah
knapsack dengan kapasitas bobot K. Setiap objek
memiliki properti bobot (weigth) wi dan
keuntungan(profit) pi.
n
Maksimasi F = p x i i
i =1
w x K
i =1
i i
43
Penyelesaian dengan algoritma greedy
44
1. Greedy by profit.
- Pada setiap langkah, pilih objek yang mempunyai keuntungan terbesar.
- Strategi ini mencoba memaksimumkan keuntungan dengan memilih objek yang paling
menguntungkan terlebih dahulu.
2. Greedy by weight.
- Pada setiap langkah, pilih objek yang mempunyai berat teringan.
- Mencoba memaksimumkan keuntungan dengan dengan memasukkan sebanyak
mungkin objek ke dalam knapsack.
3. Greedy by density.
- Pada setiap langkah, knapsack diisi dengan objek yang mempunyai pi /wi terbesar.
- Mencoba memaksimumkan keuntungan dengan memilih objek yang mempunyai
keuntungan per unit berat terbesar.
45
• Pemilihan objek berdasarkan salah satu dari ketiga strategi di atas
tidak menjamin akan memberikan solusi optimal.
46
Contoh 7. Diberikan 4 buah objek sbb:
(w1, p1) = (6, 12); (w2, p2) = (5, 15); (w3, p3) = (10, 50); (w4, p4) = (5, 10);
dan sebuah knapsack dengan kapasitas K = 16.
Solusi dengan algoritma greedy:
49
5. Fractional Knapsack Problem
• Fractional knapsack problem merupakan varian persoalan knapsack tetapi dengan
solusi yang boleh berbentuk pecahan atau fraksi
• Objek yang dimasukkan ke dalam knapsack dapat berupa sebagian saja (0 xi 1)
n
Maksimasi F = p x i i
i =1
w x K
i =1
i i
50
Penyelesaian dengan exhaustive search
51
Penyelesaian dengan algoritma greedy
• Agar proses pemilihan objek berikutnya optimal, maka kita urutkan objek
berdasarkan pi /wi yang menurun, sehingga objek berikutnya yang dipilih
adalah objek sesuai dalam urutan itu.
Teorema 2. Jika p1/w1 p2/w2 ... pn/wn maka algoritma greedy dengan
strategi pemilihan objek berdasarkan pi /wi terbesar menghasilkan solusi
yang optimum.
54
• Algoritma persoalan fractional knapsack:
55
function FractionalKnapsack(C : himpunan_objek, K : real) → himpunan_solusi
{ Menghasilkan solusi persoalan fractional knapsack dengan algoritma greedy yang menggunakan strategi
pemilihan objek berdasarkan density (pi/wi). Solusi dinyatakan sebagai vektor X = x[1], x[2], …, x[n].
Asumsi: Seluruh objek sudah terurut berdasarkan nilai pi/wi yang menurun }
Deklarasi
i, TotalBobot : integer
MasihMuatUtuh : boolean
x : himpunan_solusi
Algoritma:
for i 1 to n do
x[i] 0 { inisialisasi setiap fraksi objek i dengan 0 }
endfor
….
56
i0
TotalBobot 0
MasihMuatUtuh true
return x
58
Contoh 10. Misalkan terdapat 4 job (n = 4):
(p1, p2, p3, p4) = (50, 10, 15, 30)
(d1, d2, d3, d4) = (2, 1, 2, 1)
Andaikan mesin mulai bekerja jam 6.00 pagi, maka itu artinya:
59
• Misalkan J adalah himpunan job yang diproses oleh mesin. Maka,
fungsi obyektif persoalan ini:
Maksimasi F = pi
iJ
60
Penyelesaian dengan Exhaustive Search
Cari himpunan bagian (subset) job yang layak dan memberikan total keuntungan terbesar.
Barisan job Urutan pemrosesan Total keuntungan (F) Keterangan
{} - 0 layak
{1} 1 50 layak
{2} 2 10 layak
{3} 3 15 layak
{4} 4 30 layak
{1, 2} 2, 1 60 layak
{1, 3} 1, 3 atau 3, 1 65 layak
{1, 4} 4, 1 80 layak → optimal
{2, 3} 2, 3 25 layak
{2, 4} - - tidak layak
{3, 2} - - tidak layak
{3, 4} 4, 3 45 layak
{1, 2, 3} - - tidak layak
{1, 2, 4} - - tidak layak
{1, 3, 4} - - tidak layak
{1, 2, 3, 4} - - tidak layak
62
Contoh 11: Misalkan terdapat 4 job dengan profit dan deadline
sebagai berikut:
(p1, p2, p3, p4) = (50, 10, 15, 30)
(d1, d2, d3, d4) = (2, 1, 2, 1)
Deklarasi
i, k : integer
J : himpunan_job { solusi }
Algoritma
J {}
for i 1 to n do
k job yang mempunyai profit terbesar
if (semua job di dalam J {k} layak) then
J J {k}
endif
endfor
return J
Deklarasi
i : integer
J : himpunan_job { solusi }
Algoritma
J {1} { job 1 selalu terpilih}
for i 2 to n do
if (semua job di dalam J {i} layak) then
J J {i}
endif
endfor
return J
• Algoritma yang lebih detil:
Algoritma Greedy
(Bagian 2)
1 10 2
50
30 45 40 3
35
4
25
5
20 55
15
2
(a) Algoritma Prim
“Pada setiap langkah, pilih sisi e = (v1, v2) dari graf G(V, E)
yang memiliki bobot terkecil dan bersisian (incidency)
dengan simpul-simpul di T tetapi e tidak membentuk
sirkuit di T. Masukkan e ke dalam T. “
3
Algoritma Prim
Langkah 1: ambil sisi dari graf G yang berbobot minimum,
masukkan ke dalam T.
Deklarasi
i, p, q, u, v : integer
Algoritma
Cari sisi (p, q) dari E yang berbobot terkecil
T {(p, q)}
for i1 to n – 2 do
Pilih sisi (u, v) dari E yang bobotnya terkecil namun bersisian dengan simpul di T
T T {(u, v)}
endfor
1 10 2 2
1 10
50
2 (2, 6) 25
30 45 40 3
35 25
4
25
5 6
20 55 15
1 10
3 (3, 6)
15
3
25
6
15
1 10 2
4 (4, 6) 20
3
4
25
20
15
1 10 2
5 (3, 5) 35
45 3
35
4
25
5
20 55
15
6
6
(b) Algoritma Kruskal
“Pada setiap langkah, pilih sisi e = (v1, v2) dari graf G = (V, E) yang
memiliki bobot minimum. Jika e tidak membentuk sirkuit di T, maka
masukkan e ke dalam T”
7
Algoritma Kruskal
( Langkah 0: sisi-sisi dari graf sudah diurut menaik berdasarkan
bobotnya – dari bobot kecil ke bobot besar)
Deklarasi
i, u, v : integer
Algoritma
{ Asumsi: sisi-sisi dari graf sudah diurut menaik berdasarkan bobotnya dari kecil ke besar}
T {}
while jumlah sisi di dalam T < n – 1 do
Pilih sisi (u, v) dari E yang bobotnya terkecil
if (u, v) tidak membentuk sirkuit di T then
T T {(u, v)}
endif
endfor
6 1 (1, 2) 10
1 2
2 (3, 6) 15
1 2 3 4 5
3 (4, 6) 20
1 2 3 5
4
6
4 (2, 6) 25
1 2 3 5
4
10
5 (1, 4) 30 ditolak
6 (3, 5) 35
1 2
3
5
4
6
45 3
35
4
25
5
20 55
15
Bobot = 10 + 25 + 15 + 20 + 35 = 105
11
12
(Sumber: Ellis Horrowitz & Sartaj Sahni, Computer Algorithms, 1998)
8. Lintasan Terpendek (Shortest Path)
Beberapa macam persoalan lintasan terpendek:
a) Lintasan terpendek antara dua buah simpul tertentu (a pair
shortest path).
b) Lintasan terpendek antara semua pasangan simpul (all pairs
shortest path).
c) Lintasan terpendek dari simpul tertentu ke semua simpul yang
lain (single-source shortest path).
d) Lintasan terpendek antara dua buah simpul yang melalui
beberapa simpul tertentu (intermediate shortest path).
14
Penyelesaian dengan Algoritma Brute Force
15
Penyelesaian dengan Algoritma Greedy
16
• Namun, strategi greedy di atas tidak selalu menjamin solusi optimal
• Contoh: Lintasan terpendek dari 1 ke 10 pada graf di bawah ini!
7
2 5
1
2 4 3 4
6 8 3
6
4
1 3 2 6 3 10
3 9 4
4
3 1
4
3
4 7
5
Deklarasi:
i : integer
u, v : vertex
S : set of vertex { himpunan solusi untuk mencatat simpul-simpul yang sudah dipilih di dalam tur }
Algoritma
for i1 to n
L(vi)
endfor
L(a) 0 { jarak dari a ke a adalah 0 }
S{}
for k 1 to n do
u pilih simpul yang belum terdapat di dalam S dan memiliki L(u) minimum
S S {u} { masukkan u ke dalam S }
for semua simpul v yang tidak terdapat di dalam S
{ update jarak yang baru dari a ke v }
if L(u) + G(u, v) < L(v) then { jarak dari a ke u ditambah bobot sisi dari u ke v lebih kecil dari jarak a ke v }
L(v) L(u) + G(u, v) { jarak dari a ke v yang baru diganti dengan L(u) + G(u, v) }
endif
endfor
enfor
20
Contoh 14: Diberikan graf G di bawah ini. Carilah lintasan terpendek dari simpula a
ke semua simpul lainnya.
(i) Memilih simpul u yang bukan di dalam S dan memiliki L(u) minimum
→ membutuhkan paling banyak n – 1 perbandingan: O(n)
(ii) Memperbarui (update) jarak yang baru dari a ke v:
→ membutuhkan paling banyak n – 1 perbandingan dan n – 1 penjumlahan: O(n)
25
• Pesan yang dikirim dari satu komputer ke komputer lainnya umumnya
dipecah menjadi sejumlah paket (packet) data yang berukuran lebih
kecil.
26
• Router adalah komputer yang didedikasikan untuk mengarahkan pesan
dari suatu simpul ke simpul lainnya.
• Setiap router memelihara sebuah tabel yang disebut tabel rute (routing
table). Tabel rute berisi alamat komputer asal, alamat komputer tujuan,
dan simpul antara (via) yang dilalui.
27
Contoh sebuah jaringan router:
Router 1
Mencari lintasan terpendek dari router asal ke router tujuan dapat diartikan
sebagai menentukan lintasan terpendek dari simpul asal ke simpul tujuan di
dalam jaringan komputer.
28
Lintasan terpendek (berdasarkan delay time):
Router Asal Router Tujuan Lintasan Terpendek
1 1 -
2 1, 4, 2
3 1, 4, 6, 3
4 1, 4
5 1, 4, 2, 5
6 1, 4, 6
2 1 2, 4, 1
2 -
3 2, 4, 6, 3
4 2, 4
5 2, 5
6 2, 4, 6
3 1 3, 6, 4, 1
2 3, 6, 4, 2
3 -
4 3, 6, 4
5 3, 5
6 3, 6
4 1 4, 1
2 4, 2
3 4, 6, 2
4 4, 6, 3
5 4, 2, 5
6 4, 6
29
Router 1
30
Bersambung ke bagian 3
Bahan Kuliah IF2211 Strategi Algoritma
Algoritma Greedy
(Bagian 3)
- karakter yang paling sering muncul di dalam data dengan kode yang
lebih pendek;
- sedangkan karakter yang relatif jarang muncul dikodekan dengan kode
yang lebih panjang.
2
Fixed-length code
Karakter a b c d e f
---------------------------------------------------------------------------
Frekuensi 45% 13% 12% 16% 9% 5%
Karakter a b c d e f
-----------------------------------------------------------------------------
Frekuensi 45% 13% 12% 16% 9% 5%
-----------------------------------------------------------------------------
Kode 0 101 100 111 1101 1100
• Setiap sisi pada pohon biner diberi nilai (label) 0 atau 1 secara konsisten
(misalnya sisi cabang kiri dengan 0, sisi cabang kanan dengan 1)
• Lintasan dari akar ke daun sama dengan barisan bi-bit biner yang
merepresentasikan simbol karakter pada daun.
2. Terapkan strategi greedy sebagai berikut: pada setiap langkah gabungkan dua
buah pohon yang mempunyai frekuensi terkecil pada sebuah akar. Akar
mempunyai frekuensi yang merupakan jumlah dari frekuensi dua buah pohon
penyusunnya.
4. Selanjutnya, beri label sisi-sisi di dalam pohon biner dengan 0 atau 1 secara
konsisten.
5. Lintasan dari akar ke daun merepresentasikan string biner untuk setiap karakter
Karakter a b c d e f
-------------------------------------------------------------------
Frekuensi 45 13 12 16 9 5
7
Penyelesaian:
f:5 e:9
f:5 e:9
9
5. cbfed:55 a:45
cb:25 fed:30
f:5 e:9
Kode Huffman:
a=0
b = 101
6 acbfed:100
c = 100
0 1 d = 111
a:45 cbfed:55 e = 1101
0 1 f = 1100
cb:25 fed:30
0 1 0 1
c:12 b:13 fe:14 d:16
0 1
f:5 e:9 10
10. Pecahan Mesir (Egyptian Fraction)
Pecahan Mesir adalah pecahan, dalam bentuk p/q, yang dapat didekomposisi
pecahan menjadi jumlah dari sejumlah pecahan yang berbeda:
p 1 1 1
= + + ... +
q k1 k 2 kn
2 1 1 5 1 1 1 87 1 1 1
= + = + + = + +
5 3 15 7 2 5 70 100 2 5 11
11
• Pecahan yang diberikan mungkin mempunyai lebih dari satu
representasi Mesir
Contoh: 8/15 = 1/3 + 1/5
8/15 = 1/2 + 1/30
12
Strategi greedy: pada setiap langkah, tambahkan unit pecahan terbesar ke
representasi yang baru terbentuk yang jumlahnya tidak melebihi nilai pecahan
yang diberikan
Algoritma:
Input: p/q
1. Mulai dengan i = 1
2. Jika p = 1, maka ki = q. STOP
3. 1/ki = pecahan terbesar yang lebih kecil dari p/q
4. p/q = p/q – 1/ki
5. Ulangi langkah 2.
13
• Contoh hasil:
8/15 = 1/2 + 1/30 (optimal)
5/7 = 1/2 + 1/5 + 1/70 (optimal)
• Strategi greedy: pada setiap langkah i, pilih sisi dari vi ke vj yang memiliki
bobot terkecil
Contoh 17: Diberikan sebuah graf berbobot dengan lima simpul sebagai berikut
A
12 10
15 9
E 11 B
10
13
12 11
Kesimpulan: Algoritma greedy tidak memberikan solusi optimal untuk persoalan TSP
Aplikasi Algoritma Greedy pada
Permainan Othello (Riversi)
18
Othello
• Othello atau Riversi adalah permainan yang
menggunakan papan (board game) dan
sejumlah koin yang berwarna gelap (misalnya
hitam) dan terang (misalnya putih).
• Barisan koin lawan yang terletak dalam satu garis lurus yang diapit oleh sepasang koin
pemain yang current diubah (reverse) warnanya menjadi warna pemain current.
20
• Setiap pemain bergantian meletakkan koinnya. Jika seorang pemain tidak
dapat meletakan koin karena tidak ada posisi yang dibolehkan,
permainan kembali ke pemain lainnya.
• Jika kedua pemain tidak bisa lagi meletakkan koin, maka permainan
berakhir. Hal ini terjadi jika seluruh kotak telah terisi, atau ketika seorang
pemain tidak memiliki koin lagi, atau ketika kedua pemain tidak dapat
melakukan penempatan koin lagi.
21
• Algoritma Greedy dapat diaplikasikan untuk memenangkan
permainan.
22
Dua strategi greedy heuristik:
1. Greedy by jumlah koin
Pada setiap langkah, koin pemain menuju koordinat yang menghasilkan
sebanyak mungkin koin lawan. Strategi ini berusaha memaksimalkan jumlah
koin pada akhir permainan dengan menghasilkan sebanyak-banyaknya koin
lawan pada setiap langkah.
23
Greedy by Jumlah Koin
1. Himpunan kandidat
Langkah-langkah yang menghasilkan jumlah koin yang diapit.
2. Himpunan solusi
Langkah-langkah dari Himpunan kandidat yang memiliki jumlah
koin diapit paling besar.
3. Fungsi seleksi
Pilih langkah yang memiliki jumlah koin diapit paling besar
4. Fungsi kelayakan
Semua langkah adalah layak
5. Fungsi obyektif
Maksimumkan jumlah koin lawan
24
25
Sumber: Roger Crawfis, CSE 680 Introduction
to AlgorithmsGreedy Algorithms
Soal-soal Latihan
1. Connecting wires
• There are n white dots and n black dots, equally spaced, in a line
• You want to connect each white dot with some one black dot, with a minimum
total length of “wire”
• Example:
3
Representasi Graf dalam Proses Pencarian
Dalam proses pencarian solusi, terdapat dua pendekatan:
4
Graf Statis
5
Pencarian Melebar (BFS)
• Traversal dimulai dari simpul v. 1
• Algoritma:
1. Kunjungi simpul v 2 3
2. Kunjungi semua simpul yang
bertetangga dengan simpul
v terlebih dahulu.
3. Kunjungi simpul yang belum 4 5 6 7
dikunjungi dan bertetangga
dengan simpul-simpul yang
tadi dikunjungi, demikian
seterusnya. 8
6
BFS: Struktur Data
1. Matriks ketetanggaan A = [aij] yang berukuran nxn,
aij= 1, jika simpul i dan simpul j bertetangga,
aij= 0, jika simpul i dan simpul j tidak bertetangga.
7
8
BFS: Ilustrasi
1 Iterasi V Q dikunjungi
1 2 3 4 5 6 7 8
Inisialisasi 1 {1} T F F F F F F F
2 3 Iterasi 1 1 {2,3} T T T F F F F F
Iterasi 2 2 {3,4,5} T T T T T F F F
Iterasi 3 3 {4,5,6,7} T T T T T T T F
Iterasi 4 4 {5,6,7,8} T T T T T T T T
4 5 6 7 Iterasi 5 5 {6,7,8} T T T T T T T T
Iterasi 6 6 {7,8} T T T T T T T T
Iterasi 7 7 {8} T T T T T T T T
Iterasi 8 8 {} T T T T T T T T
8
• Algoritma:
1. Kunjungi simpul v 2 3
13
DFS: Ilustrasi 1
1 • DFS(1): v=1; dikunjungi[1]=true; DFS(2)
• DFS(2): v=2; dikunjungi[2]=true; DFS(4)
• DFS(4): v=4; dikunjungi[4]=true; DFS(8)
2 3 • DFS(8): v=8; dikunjungi[8]=true; DFS(5)
• DFS(5): v=5; dikunjungi[5]=true
• DFS(6): v=6; dikunjungi[6]=true; DFS(3)
• DFS(3): v=3; dikunjungi[3]=true; DFS(7)
• DFS(7): v=7; dikunjungi[7]=true
4 5 6 7
14
DFS: Ilustrasi 2
1 • DFS(1): v=1; dikunjungi[1]=true; DFS(2)
• DFS(2): v=2; dikunjungi[2]=true; DFS(3)
• DFS(3): v=3; dikunjungi[3]=true; DFS(6)
2 3 • DFS(6): v=6; dikunjungi[6]=true; DFS(8)
• DFS(8): v=8; dikunjungi[8]=true; DFS(4)
• DFS(4): v=4; dikunjungi[4]=true;
DFS(8): DFS(5)
• DFS(5): v=5; dikunjungi[5]=true
4 5 6 7 DFS(8): DFS(7)
• DFS(7): v=7; dikunjungi[7]=true
8
Urutan simpul2 yang dikunjungi: 1, 2, 3, 6, 8, 4, 5, 7
15
16
17
18
Contoh (hal 113)
1 2
• Khusus untuk graf berarah,
beberapa simpul mungkin tidak
dapat dicapai dari simpul awal.
3 4 Coba dengan simpul yang belum
dikunjungi sebagai simpul awal.
6 (hal 113)
5 7
• DFS (1): 1-2-4-3-5-6-7
• BFS (1): 1-2-4-3-5-7-6
19
Contoh Lain
20
Penerapan BFS dan DFS: Citation Map
21
Citation Map:
22
Sumber: Teufel (1999), Argumentative Zoning
Penerapan BFS dan DFS: Web Spider
query
23
Penerapan BFS dan DFS: Web Spider
Arsitektur umum mesin pencari • Secara periodik, web
spider menjejalahi
internet untuk
mengunjungi halaman-
halaman web
http://www.ibm.com/developerworks/web/library/wa-lucene2/
24
Web Spider: Penjelajahan Web
• Halaman web dimodelkan sebagai
graf berarah
• Simpul menyatakan halaman web
(web page)
• Sisi menyatakan link ke halaman web
• Bagaimana teknik menjelajahi
web? Secara DFS atau BFS
• Dimulai dari web page awal, lalu
setiap link ditelusuri secara DFS
sampai setiap web page tidak
http://introcs.cs.princeton.edu/java/16pagerank/ mengandung link.
25
DFS dan BFS untuk penelusuran direktori (folder)
26
Pencarian dokumen di dalam direktori (folder) secara BFS
27
Pencarian dokumen di dalam direktori (folder) secara DFS
28
BERSAMBUNG
29
Breadth/Depth First Search
(BFS/DFS)
(Bagian 2)
Bahan Kuliah IF2211 Strategi Algoritmik
2
Pencarian Solusi dengan BFS/DFS
• Menyelesaikan persoalan dengan melakukan pencarian
• Pencarian solusi pembentukan pohon dinamis
• Setiap simpul diperiksa apakah solusi (goal) telah dicapai atau tidak. Jika simpul merupakan
solusi , pencarian dapat selesai (satu solusi) atau dilanjutkan mencari solusi lain (semua
solusi).
• Representasi pohon dinamis:
• Pohon ruang status (state space tree)
• Simpul: problem state (layak membentuk solusi)
• Akar: initial state
• Daun: solution/goal state
• Cabang: operator/langkah dalam persoalan
• Ruang status (state space): himpunan semua simpul
• Ruang solusi: himpunan status solusi
• Solusi: path ke status solusi
3
Pohon Dinamis: Permutasi A,B,C
• Operator: add X
• Akar : status awal (status “kosong”)
• Simpul: problem state
• Status persoalan (problem state): simpul-
simpul di dalam pohon dinamis yang
memenuhi kendala (constraints).
• Daun: status solusi
• Status solusi (solution state): satu atau
lebih status yang menyatakan solusi
persoalan.
• Ruang solusi:
• Ruang solusi (solution space): himpunan
semua status solusi.
• Ruang status (state space): Seluruh
simpul di dalam pohon dinamis dan
Pohon ruang status pohonnya dinamakan juga pohon
ruang status (state space tree).
4
Pembangkitan Status
• Pembangkitan status baru dengan cara mengaplikasikan operator
(langkah legal) kepada status (simpul) pada suatu jalur
5
BFS untuk Pembentukan Pohon Ruang Status
6
BFS untuk Permutasi
7
DFS untuk Pembentukan Pohon Ruang Status
DFS:
BFS:
8
DFS Permutasi A,B,C
Add(A)
Add(B)
Add(C)
9
Evaluasi dari Teknik Pencarian
• Aspek untuk melihat seberapa ‘baik’ suatu teknik pencarian
• Completeness: apakah menjamin ditemukannya solusi jika memang ada
• Optimality: apakah teknik menjamin mendapatkan solusi yang optimal (e.g: lowest
path cost)?
• Time Complexity: waktu yang diperlukan untuk mencapai solusi
• Space Complexity: memory yang diperlukan ketika melakukan pencarian
10
Permainan 8-Puzzle
11
• State berdasarkan ubin kosong (blank)
• Operator: up, down, left, right
12
8-Puzzle: Pohon Ruang Status
13
BFS untuk 8-Puzzle
Catatan:
Urutan operator yang
digunakan harus konsisten.
14
Bagaimana property dari BFS?
• Completeness?
• Ya (selama nilai b terbatas )
• Optimality?
• Ya, jika langkah = biaya
• Kompleksitas waktu:
• 1+b+b2+b3+…+bd = O(bd)
• Kompleksitas ruang:
• O(bd)
16
Bagaimana property dari DFS?
• Completeness?
• Ya (selama nilai b terbatas, dan ada penanganan ‘redundant paths’ dan ‘repeated
states’ )
• Optimality?
• Tidak
• Kompleksitas waktu:
• O(bm)
• Kompleksitas ruang:
• O(bm)
• Kurang baik dalam kompleksitas waktu, lebih baik dalam kompleksitas ruang
17
Aplikasi Backtracking di dalam DFS untuk Pencarian Solusi
18
• Backtracking di dalam algoritma DFS adalah cara yang
metodologis mencoba beberapa sekuens keputusan,
19
Animasi Backtracking *)
dead end
?
dead end
dead end
?
start ? ? dead end
dead end
?
success!
20 *) Sumber: www.cis.upenn.edu/.../35-backtracking.ppt
• Backtracking di dalam algoritma DFS banyak diterapan untuk mencari
solusi persoalan games seperti:
• permainan tic-tac-toe,
• menemukan jalan keluar dalam sebuah labirin,
• Catur, crossword puzzle, sudoku, dan masalah-masalah pada bidang
kecerdasan buatan (artificial intelligence).
21
Crossword puzzle:
22
Tic-Tac-Toe
23
Sudoku
24
Catur
25
Maze Problem
Diberikan sebuah labirin (maze), temukan lintasan dari titik awal sampai
titik akhir
26
• Pada tiap perpotongan, anda harus memutuskan satu diantara
tiga pilihan:
• Maju terus
• Belok kiri
• Belok kanan
27
Penyelesaian Maze Problem dengan DFS:
• Sebuah langkah terdiri dari pergerakan satu unit sel pada arah
tertentu.
28
Garis besar algoritma DFS:
29
• Bagaimana mengetahui langkah yang mana yang perlu dijejaki
kembali?
30
Depth-First-Search-Kickoff( Maze m )
Depth-First-Search( m.StartCell )
End procedure
Depth-First-Search( MazeCell c )
If c is the goal
Exit
Else
Mark c "Visit In Progress"
Foreach neighbor n of c
If n "Unvisited"
Depth-First-Search( n )
Mark c "Visited"
End procedure
{Source:
https://courses.cs.washington.edu/courses/cse326/03su/homework/hw3/dfs.html}
31
in out
32
Contoh lainnya:
33
Jika kita menggambarkan
sekuens pilihan yang kita
lakukan, maka diagram
berbentuk seperti pohon.
36
Kemungkinan lain:
37
(b) DFS
38
Persoalan Missionaris dan Kanibal
• Terdapat 3 misionaris dan 3 kanibal yang harus menyebrang ke sisi
sungai menggunakan sebuah perahu. Perahu hanya boleh berisi
penumpang maksimal 2 orang. Jumlah kanibal tidak boleh lebih
banyak dari jumlah misionaris di salah satu sisi, jika tidak maka
misionaris akan dimakan oleh kanibal.
42
Algoritma Pencarian Lainnya
• Depth-limited search
• Iterative deepening search
43
Depth-Limited Search
• BFS: dijamin menemukan path dgn langkah minimum tapi
membutuhkan ruang status yang besar
• DFS: efisien, tetapi tidak ada jaminan solusi dgn langkah minimum
• DFS dapat memilih langkah yang salah, sehingga path panjang bahkan
infinite. Pemilihan langkah sangat penting
• Optimality?
• Tidak
• Kompleksitas waktu:
• O(bl)
• Kompleksitas ruang:
• O(bl)
46
Iterative Deepening Search (IDS)
• IDS: melakukan serangkaian DFS, dengan peningkatan nilai kedalaman-cutoff,
sampai solusi ditemukan
• Asumsi: simpul sebagian besar ada di level bawah, sehingga tidak menjadi
persoalan ketika simpul pada level-level atas dibangkitkan berulang kali
Depth 0
Iterate
result DLS(problem,depth)
stop: result ≠ cutoff
depth depth+1
→ result
47
IDS dengan d=1
48
IDS dengan d=2
49
IDS dengan d=3
50
IDS (animasi)
51
Bagaimana property dari IDS?
• Completeness?
• Ya, jika b terbatas
• Optimality?
• Ya, jika langkah = biaya
• Kompleksitas waktu:
• O(bd)
• Kompleksitas ruang:
• O(bd)
52
Route/Path Planning
Materi Kuliah IF2211 – Strategi Algoritma
Teknik Informatika - ITB
53
Referensi
• Materi kuliah IF3170 Inteligensi Buatan Teknik Informatika ITB, Course
Website:
http://kuliah.itb.ac.id → STEI → Teknik Informatika → IF3170
55
Source: Russell’s book
Search O
71 151 F
S 99
Z
75 211
A 140 80
R B
97 P
120
118 101
D
75
T M 146 138
111 L 70
C
S: set of cities
i.s: A (Arad)
g.s: B (Bucharest)
Goal test: s = B ?
Path cost: time ~ distance
56
Breadth-First Search (BFS)
Treat agenda as a queue (FIFO)
O
Z
71 151 S F
99
75 211
A 80
140
R B
97 P
120 101
118 Simpul-E Simpul Hidup
D
75 138
M 146 A ZA,SA,TA
T 111 L 70 ZA SA,TA,OAZ
C SA TA,OAZ,OAS,FAS,RAS
TA OAZ,OAS,FAS,RAS,LAT
Path: A→ S → F → B, OAZ OAS,FAS,RAS,LAT
Path-cost = 450 OAS FAS,RAS,LAT
FAS RAS,LAT,BASF
RAS LAT,BASF,DASR,CASR,PASR
LAT BASF,DASR,CASR,PASR,MATL
BASF Solusi ketemu 57
Depth-First Search (DFS)
Treat agenda as a stack (LIFO)
O
Z
71 151 S F
99
75 211
A 80
140
R B
97 P
120
118 101
D
75
M 146 138
T 111 L 70
Simpul-E Simpul Hidup
C
A ZA,SA,TA
58
IDS
Z
71 O 151 S F
99
75 211
A 80
140
R B
97 P
120
118 101
D
75
M 146 138
T 111 L 70
Depth=0: A: cutoff C
Depth=1: A → ZA,SA,TA → ZA: cutoff, SA: cutoff, TA: cutoff
Depth=2: A → ZA,SA,TA → OAZ, SA,TA → OAZ : cutoff → FAS, RAS,TA → FAS : cutoff
→ RAS : cutoff → LAT → LAT : cutoff
Depth=3: A → ZA,SA,TA → OAZ, SA,TA → SAZO,SA,TA → SAZO: cutoff → FAS, RAS,TA
→ BASF, RAS,TA → BASF
Stop: B=goal, path: A→ S → F → B, path-cost = 450
59
Contoh path finding lainnya:
Sumber:https: //medium.com/omarelgabrys-blog/path-finding-algorithms-f65a8902eb40
60
BFS:
Sumber:https: //medium.com/omarelgabrys-blog/path-finding-algorithms-f65a8902eb40
61
DFS:
Sumber:https: //medium.com/omarelgabrys-blog/path-finding-algorithms-f65a8902eb40
62
SELAMAT BELAJAR
63
Algoritma Branch & Bound
(Bagian 1)
Bahan Kuliah IF2211 Strategi Algoritma
Oleh: Rinaldi Munir, Nur Ulfa Maulidevi, Masayu Leylia Khodra
2
Overview
• BFS: solusi dengan minimum step, exponential space
• DFS: lebih efisien (1 solusi) , lintasannya dapat terlalu panjang (pohon
ruang status tidak berhingga kedalamannya)
• DLS: variasi DFS, solusi bisa tidak ketemu (depth-limited)
• IDS: sekuens DLS (depth ++)
• Backtracking: basis DFS, expand simpul jika arahnya benar, fungsi
pembatas
3
Algoritma Branch & Bound (B&B)
• Digunakan untuk persoalan optimisasi → meminimalkan atau
memaksimalkan suatu fungsi objektif, yang tidak melanggar batasan
(constraints) persoalan
• B&B = BFS + least cost search
• BFS murni: Simpul berikutnya yang akan diekspansi berdasarkan urutan
pembangkitannya (FIFO)
• B&B:
• Setiap simpul diberi sebuah nilai cost:
ĉ(i) = nilai taksiran lintasan termurah ke simpul status tujuan yang melalui
simpul status i.
• Simpul berikutnya yang akan di-expand tidak lagi berdasarkan urutan
pembangkitannya, tetapi simpul yang memiliki cost yang paling kecil (least
cost search) – pada kasus minimasi.
4
B&B vs Backtracking
• Persamaan:
• Pencarian solusi dengan pembentukan pohon ruang status
• ‘Membunuh’ simpul yang tidak ‘mengarah’ ke solusi
• Perbedaan:
• ‘nature’ persoalan yang bisa diselesaikan:
• Backtracking: Tak ada batasan (optimisasi/non-optimasi), umumnya untuk
persoalan non-optimisasi
• B&B:
• Persoalan optimisasi
• Untuk setiap simpul pada pohon ruang-status, diperlukan suatu cara
penentuan batas (bound) nilai terbaik fungsi objektif pada setiap solusi yang
mungkin, dengan menambahkan komponen pada solusi sementara yang
direpresentasikan oleh simpul
• Nilai dari solusi terbaik sejauh ini
• Pembangkitan simpul: …
5
B&B vs Backtracking (2)
• Perbedaan:
• Pembangkitan simpul:
• Backtracking: umumnya DFS
• B&B : beberapa ‘aturan’ tertentu → paling umum ‘best-first rule’
6
“Fungsi Pembatas”
• Algoritma B&B juga menerapkan “pemangkasan” pada jalur yang
dianggap tidak lagi mengarah pada solusi.
7
Persoalan N-Ratu (The N-Queens Problem)
• Tinjau kembali persoalan N-Ratu
x1=1 x1=2
2 18
3 8 13 19 24 29
B B B
x3=2 x3=3
x3=2 x3=4 x3=1
9 11 14 16 30
B B B
x4=3 x4=3
15 31
9
B
Solusi 4-Ratu dengan BFS-dengan Pembatasan
(FIFO-Branch and Bound)
10
Strategi Pencarian Solusi 4-Ratu menggunakan
Algoritma Branch and Bound
• Simpul hidup yang menjadi simpul-E(xpand) ialah simpul yang
mempunyai nilai cost terkecil (least cost search)→ salah satu jenis
aturan
11
Solusi 4-Ratu dengan Algoritma Branch and Bound
• Oleh karena itu, nilai cost simpul i merupakan estimasi ongkos termurah
lintasan dari simpul i ke simpul solusi (yang tidak diketahui letaknya),
dilambangkan dengan ĉ(i). Nilai ĉ(i) dihitung secara heuristik.
• Dengan kata lain, ĉ(i) menyatakan batas bawah (lower bound) dari ongkos
pencarian solusi dari status i.
14
Algoritma Global Branch & Bound
1. Masukkan simpul akar ke dalam antrian Q. Jika simpul akar adalah
simpul solusi (goal node), maka solusi telah ditemukan. Stop.
2. Jika Q kosong, tidak ada solusi. Stop.
3. Jika Q tidak kosong, pilih dari antrian Q simpul i yang mempunyai nilai
‘cost’ ĉ(i) paling kecil. Jika terdapat beberapa simpul i yang
memenuhi, pilih satu secara sembarang.
4. Jika simpul i adalah simpul solusi, berarti solusi sudah ditemukan, stop.
Jika simpul i bukan simpul solusi, maka bangkitkan semua anak-
anaknya. Jika i tidak mempunyai anak, kembali ke langkah 2.
5. Untuk setiap anak j dari simpul i, hitung ĉ(j), dan masukkan semua
anak-anak tersebut ke dalam Q.
6. Kembali ke langkah 2.
15
Permainan 15-Puzzle
16
Reachable Goal?
• Terdapat 16! 20,9 x 1012 susunan ubin yang berbeda, dan hanya
setengah yang dapat dicapai dari state awal sembarang.
• Teorema : Status tujuan hanya dapat dicapai dari status awal jika
bernilai genap.
• X=1 jika sel kosong pada posisi awal ada pada sel yg diarsir
Kurang (i) + X = 15 + 1 = 16
9 1
10 1
i =1
11 0
12 0
13 1
14 1
15 1
16 9
19
Sebagian pohon ruang status untuk 15-Puzzle secara BFS
1
1 2 3 4
5 6 8
9 10 7 11
13 14 15 12
up
left
right down
2 3 4 5
1 2 4 1 2 3 4 1 2 3 4 1 2 3 4
5 6 3 8 5 6 8 5 6 7 8 5 6 8
9 10 7 11 9 10 7 11 9 10 11 9 10 7 11
13 14 15 12 13 14 15 12 13 14 15 12 13 14 15 12
6 7 8 9 10 11 12 13 14 15
1 2 4 1 2 4 1 2 3 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 3 4 1 2 3 4 1 2 3 4
5 6 3 8 5 6 3 8 5 6 8 4 5 6 8 11 5 6 7 8 5 6 7 8 5 6 7 8 5 7 6 8 5 10 6 8 5 6 8
9 10 7 11 9 10 7 11 9 10 7 11 9 10 7 9 10 11 9 10 15 11 9 10 11 9 10 7 11 9 7 11 9 10 7 11
13 14 15 12 13 14 15 12 13 14 15 12 13 14 15 12 13 14 15 12 13 14 12 13 14 15 12 13 14 15 12 13 14 15 12 13 14 15 12
up down
down left
16 19 down left 22 23
down left
1 2 4 8 1 2 3 1 2 3 4 1 2 3 4
5 6 3 5 6 8 4 5 6 7 5 6 7 8
9 10 7 11 9 10 7 11 9 10 11 8 9 10 11 12
13 14 15 12 13 14 15 12 13 14 15 12 13 14 15
17 18 20 21
1 6 2 4 1 2 4 1 2 3 4 1 2 3 4
5 3 8 5 6 3 8 5 6 8 11 5 6 8 11
9 10 7 11 9 10 7 11 9 10 7 12 9 10 7
13 14 15 12 13 14 15 13 14 15 13 14 15 12
20
Pohon Ruang Status untuk DFS
http://chern.ie.nthu.edu.tw/alg2003/alg-2009-chap-7.pdf
21
Cost dari Simpul Hidup (2)
• Pada umumnya, untuk kebanyakan persoalan, letak simpul solusi (tujuan)
tidak diketahui.
root
• Cost setiap simpul umumnya berupa taksiran.
መ
𝑓(i)
i
𝑔(i)
ො
i
goal node
• Cost simpul P pada 15-puzzle: 𝑐Ƹ 𝑃 = 𝑓 𝑃 + 𝑔(𝑃)
ො
22
Cost dari Simpul Hidup 15-Puzzle
Target
25
Algoritma Branch & Bound
(Bagian 2)
Bahan Kuliah IF2211 Strategi Algoritma
Oleh: Rinaldi Munir, Nur Ulfa Maulidevi, Masayu Leylia Khodra
IF2211 B&B/NUM-MLK-RN 2
Pohon Ruang Status TSP n = 4 Simpul
12
1 2
4 3
Brute Force:
- 4!=24 sirkuit hamilton
- Solusi: 1-4-2-5-3-1
- Bobot: 10+6+2+7+3=28
Greedy:
- Solusi: 1-4-5-2-3-1 B&B-TSP dgn B&B
- Bobot: 10+3+4+16+3=36 x0 = x5=1
IF2211 B&B/NUM-MLK-RN 4
Cost dari Simpul Hidup TSP
• Cost untuk setiap simpul di dalam pohon ruang status menyatakan nilai
batas bawah (lower bound) ongkos mencapai simpul solusi dari simpul
tersebut. .
• Cost setiap simpul dapat dihitung secara heuristik berdasarkan salah satu
dari dua cara:
1. Matriks ongkos-tereduksi (reduced cost matrix) dari graf
2. Bobot minimum tur lengkap
IF2211 B&B/NUM-MLK-RN 5
1. Cost berdasarkan Reduced Cost Matrix
• Ongkos atau nilai batas untuk setiap simpul dihitung dengan menggunakan
matriks ongkos-tereduksi (reduced cost matrix) dari graf G.
• Sebuah matriks dikatakan tereduksi jika setiap kolom dan setiap barisnya
mengandung paling sedikit satu buah nol dan semua elemen lainnya non-negatif.
Contoh: M’
M
12 20 30 10 11 1 10 17 0 1
15 8 16 4 2 12 6 11 2 0
Reduksi baris
3 5 11 2 4 dan kolom
0 3 6 0 2
19 6 18 9 3 15 3 12 6 0
16 4 7 16 8 11 0 0 12 4
6
• Tinjau sebuah TSP dengan n = 5, graf dinyatakan dalam matriks ketetanggaan:
1
20 30 10 11 11/16 20/15
15 16 4 2 30/3
5
2/4 2
3 5 2 4 10/19 4/6
19 6 18 3 3/16 4/7 16/5
16 4 7 16
4 2/18
3
• Karena perjalanan pedagang di dalam graf melalui sisi (i, j), dengan i = 1, 2, …, 5
dan j = 1, 2, …, 5, maka mengurangkan setiap elemen pada suatu baris atau pada
suatu kolom dengan konstanta t akan mengurangi panjang (bobot) setiap
perjalanan sebesar t.
• Jika t dipilih dari elemen minimum pada baris i (kolom j), maka mengurangkan
seluruh elemen pada baris i (kolom j) dengan t akan menghasilkan sebuah nol
pada baris i (kolom j) tersebut. Dengan mengulangi proses ini berulangkali akan
menghasilkan matriks bobot tereduksi.
IF2211 B&B/NUM-MLK-RN 7
Reduced Cost Matrix (2)
8
• Jumlah total elemen pengurang dari semua baris dan kolom menjadi batas bawah
(lower bound) dari tur dengan total bobot minimum. Nilai ini digunakan sebagai
nilai untuk simpul akar pada pohon ruang status.
cˆ( root ) = 25
IF2211 B&B/NUM-MLK-RN 9
R
B&B-TSP dgn Reduced Cost Matrix i
S
• Misalkan:
• Tur (perjalanan) dimulai dari simpul 1 j
• A: matriks tereduksi untuk simpul R.
• S: anak dari simpul R sehingga sisi (R, S) pada pohon ruang status berkoresponden
dengan sisi (i, j) pada perjalanan.
• Jika S bukan simpul daun, maka matriks bobot tereduksi untuk simpul S
dapat dihitung sebagai berikut:
(a) ubah semua nilai pada baris i dan kolom j menjadi . Ini untuk mencegah agar
tidak ada lintasan yang keluar dari simpul i atau masuk pada simpul j;
(b) ubah A(j, 1) menjadi . Ini untuk mencegah penggunaan sisi (j, 1);
(c) reduksi kembali semua baris dan kolom pada matriks A kecuali untuk elemen .
• Jika r adalah total semua pengurang, maka nilai batas untuk simpul S
adalah:
Hasil reduksi ini menghasilkan matriks B.
10
• Secara umum, persamaan fungsi pembatas (bounding function) adalah:
IF2211 B&B/NUM-MLK-RN 11
• Bangkitkan semua anak dari simpul 1:
1
25
x1 = 2 x1= 5
x1 = 3 x1 = 4
2 3 4 5
IF2211 B&B/NUM-MLK-RN 12
B&B-TSP dgn Reduced Cost Matrix (2)
1. Simpul 2; Lintasan di dalam graf: 1, 2
(a) ubah semua nilai pada baris 1 dan kolom 2 menjadi .
(b) ubah A(2, 1) menjadi . Ini untuk mencegah penggunaan sisi (2, 1)
(c) reduksi kembali semua baris dan kolom pada matriks A kecuali untuk
elemen .
A Kolom2
Baris 1
Baris 1
12 2 0 1 2 0
3 0 2 C1 − 11 0 3 0 2 = B
15 3 0 4 3 0
11 0 12 0 0 12
Baris 1
12 11 0 12 11 0
0 3 2 0 3 2 = B
3 12 0 3 12 0
11 0 0 11 0 0
Baris 1
12 11 2 10 9 0
R −2
0 3 0 2 0 3 0 =B
R4 − 3
15 3 12 12 0 9
0 0 12 0 0 12
Simpul yang memiliki cost terkecil adalah simpul 4, maka simpul 4 menjadi simpul-E 15
• Simpul-simpul berikutnya yang dibangkitkan adalah simpul 6, 7, dan 8:
IF2211 B&B/NUM-MLK-RN 16
5. Simpul 6; Lintasan di dalam graf: 1, 4, 2
Kolom 2
B
12 11 0 11 0
11 0
0 3 2 0 2 0 2 = C
3 12 0 Baris 4
11 0 0 11 0 11 0
12 11 0 12 0 12 0 1 0
0 3 2 3 2 R3 − 2 1 0 C1 − 11 1 0 = C
3 12 0
Baris 4
11 0 0 11 0 11 0 0 0
𝑐(7)
Ƹ = 𝑐(4)
Ƹ + 𝐵(4,3) + 𝑟 = 25 + 12 + 13 = 508
17
7. Simpul 8; Lintasan di dalam graf: 1, 4, 5
B
12 11 0
0 3 2
3 12 0 Baris 4
11 0 0
cˆ(8) = cˆ(4) + B(4,5) + r = 25 + 0 + 11 = 36
IF2211 B&B/NUM-MLK-RN 18
• Pohon ruang status yang terbentuk hingga saat ini:
1
25
x1=2 x1=5
x1=3 x1=4
2 3 4 5
25
35 53 31
x2=2 x2=5
x2=3
6 7 8
28 50
50 36
• Simpul hidup saat ini adalah 2, 3, 5, 6, 7, dan 8. Simpul hidup yang memiliki nilai
cost terkecil adalah simpul 6.
• Simpul 6 menjadi simpul-E dan akan diekspansi sebagai berikut di bawah ini.
IF2211 B&B/NUM-MLK-RN 19
B&B-TSP dgn Reduced Cost Matrix
C = 0
11 0
2
1
11 0
8. Simpul 9; Lintasan: 1, 4, 2, 3 25
x1=2 x1=5
x1=3 x1=4
R3 − 2 2 3 4 5
2 =D 25
R5 − 11 35 53 31
x2=2 x2=5
11 x2=3
6 7 8
28
50
50 36
9. Simpul 10; Lintasan: 1, 4, 2, 5 x3=3 x3=5
9 10
52 28
=D
Simpul-simpul hidup: 2, 3, 5, 7, 8, 9, 10
𝑐Ƹ 10 = 𝑐Ƹ 6 + 𝐶 2,5 + 𝑟 = 28 + 0 + 0 = 28 Simpul dengan cost terkecil: simpul 10
Simpul 10 menjadi simpul-E 20
10. Simpul 11; Lintasan: 1, 4, 2, 5, 3 1
25
x1=2 x1=5
x1=3 x1=4
2 3 4 5
25
35 53 31
x2=2 x2=5
x2=3
21
6 7 8
cˆ(11) = cˆ(10) + D(5,3) + r = 28 + 0 + 0 = 28
28
50
50 36
x3=3 x3=5
IF2211 B&B/NUM-MLK-RN 32
Algoritma Branch & Bound
(Bagian 3)
Bahan Kuliah IF2211 Strategi Algoritma
Oleh: Rinaldi Munir, Nur Ulfa Maulidevi, Masayu Leylia Khodra
• Pada persoalan TSP dengan cost dihitung berdasarkan matriks ongkos tereduksi,
jika S adalah anak dari simpul R, maka
cˆ( S ) = cˆ( R ) + A(i, j ) + r
መ
𝑓(𝑅) = 𝑐Ƹ 𝑅 = cost dari orangtua simpul S
𝑔(𝑅)
ො = A(i, j) + r
• Terdapat pendekatan heuristik lain dalam menghitung nilai cost untuk setiap
simpul berdasarkan bobot tur lengkap.
IF2211 B&B/NUM-MLK-RN 2
Bobot Tur Lengkap (tur dimulai dari a)
12
Tour lengkap:
a,c,d,b,a
Solusi: (a,i2,i3,i4,a)
IF2211 B&B/NUM-MLK-RN 3
B&B-TSP dengan Bobot Tur Lengkap
Hasil pengamatan:
IF2211 B&B/NUM-MLK-RN 4
Cost Simpul Akar
12
IF2211 B&B/NUM-MLK-RN 5
B&B-TSP dengan Bobot Tur Lengkap
a b c d
Contoh untuk menghitung cost simpul 2:
Untuk i2=b, sisi (a, b) wajib diambil.
12 a b c d
32
a b c d
32 32 a b c d
32
a b c d
Cost 1/2 [(10 + 5) + (8 + 9) + (10 + 9) + (5 + 8) = 32
IF2211 B&B/NUM-MLK-RN 8
12
a b c d
IF2211 B&B/NUM-MLK-RN 9
a b c d
IF2211 B&B/NUM-MLK-RN 10
BERSAMBUNG
IF2211 B&B/NUM-MLK-RN 11
Algoritma Branch & Bound
(Bagian 4)
Bahan Kuliah IF2211 Strategi Algoritma
Oleh: Rinaldi Munir
8
Penyelesaian:
• Cost (lower bound) setiap simpul hidup di dalam pohon ruang status dapat dihitung
dengan berbagai cara, misalnya menggunakan matriks ongkos tereduksi.
• Cara lain yang lebih sederhana menghitung lower bound adalah dengan
menjumlahkan nilai minimum pada setiap baris matriks. Dasar pemikirannya adalah
bahwa sembarang solusi, termasuk solusi optimal, total ongkos penugasannya tidak
lebih kecil dari jumlah semua nilai terkecil pada setiap baris.
• Untuk sembarang solusi yang legitimate (tidak ada job yang sama di-assign ke 2
orang atau lebih) jika sebuah job di-assign dengan orang, maka ongkos peng-
assign-an tersebut dihitung sebagai salah satu komponen nilai terkecil di dalam
penjumlahan tersebut.
3
1. Cost untuk simpul akar:
𝑐Ƹ 0 = 2 + 3 + 1 + 4 = 10
8
2. Bangkitkan anak-anak dari simpul akar:
𝑐(0)
Ƹ
𝑐(1)
Ƹ 𝑐(2)
Ƹ 𝑐(3)
Ƹ 𝑐(4)
Ƹ
𝑐(5)
Ƹ = 2 + 6 + 1 + 4 = 13 𝑐(7)
Ƹ = 2 + 7 + 1 + 7 = 17
5
B B B
B B
Job 1 Job 2 Job 3 Job 4 Semua simpul hidup yang cost-nya lebih besar
9 8 Orang a
2 7 Goal node B dari 13 dibunuh karena tidak mungkin
C= 6 4 3 7 Orang b (solusi optimal) menghasilkan cost lebih kecil dari 13.
5 8 1 4 Orang c (simpul 1, 3, 4, 7. dan 9 dibunuh → B)
7 6 9 4 Orang d
Solusi optimal: X = (a→2, b→1, c→3, d→4)
𝑐(8)
Ƹ = 2 + 6 + 1 + 4 = 13 6
Cost = 13
Integer Knapsack Problem
• Persoalan: Diberikan n buah objek dan sebuah knapsack dengan
kapasitas bobot K. Setiap objek memiliki properti bobot (weigth)
wi dan keuntungan(profit) pi. Bagaimana cara memilih objek-
objek yang dimasukkan ke dalam knapsack sedemikian sehingga
diperoleh total keuntungan yang maksimal dengan syarat tidak
boleh melebihi kapasitas knapsack.
• Formulasi matematis:
n
Maksimasi F = p x i i
i =1
w x K
i =1
i i
• Oleh karena itu, cost setiap simpul pada pohon ruang status menyatakan batas
atas (upper bound) dari solusi optimum.
• Pada persoalan maksimasi, simpul berikutnya yang diekspansi adalah simpul hidup
yang memiliki cost paling besar.
8
• Pohon ruang statusnya berbentuk pohon biner. Cabang kiri menyatakan objek i
dipilih (xi = 1), cabang kanan menyatakan objek i tidak dipilih (xi = 0).
• Tiap simpul diisi dengan total bobot knapsack yang sudah terpakai (W) dan total
keuntungan yang sudah dicapai (F).
• Cost atau batas atas (upper bound) simpul i dihitung sebagai penjumlahan total
keuntungan yang sudah dicapai (F) ditambah dengan perkalian sisa kapasitas
knapsack (K – W) dengan rasio keuntungan per bobot objek yang tersisa
berikutnya (pi + 1/wi + 1), atau dengan rumus:
𝑐Ƹ 𝑖 = 𝐹 + (𝐾 − 𝑊)𝑝𝑖+1 /𝑤𝑖+1
9
Contoh: Misalkan n = 4, K = 10
(w1, w1, w3, w4) = (4, 7, 5, 3),
(p1, p1, p3, p4) = (40, 42, 25, 12),
Langkah-Langkah penyelesaian:
1. Hitung pi/wi → (p1/w1, p2/w2, p3/w3, p4/w4 ) = (10, 6, 5, 4)
2. Urutkan objek-objek berdasarkan pi/wi yang menurun → kebetulan sudah terurut
3. Bangkitkan simpul akar (simpul 0), W = 0, F = 0,(belum ada objek dipilih) dan
𝑐Ƹ 0 = 𝐹 + (𝐾 − 𝑊)𝑝1 /𝑤1 = 0 + (10 − 0)(10) = 100
W=0
F =0
𝑐Ƹ 0 =100
(Sumber: Levitin, 2003)
10
4. Bangkitkan simpul anak kiri (simpul 2) dan simpul anak kanan (simpul 3) dari simpul
akar
• Simpul 1 (objek 1 diambil): W = 0 + 4 = 4; F = 0 + 40 = 40
𝑐Ƹ 1 = 𝐹 + (𝐾 − 𝑊)𝑝2 /𝑤2 = 40 + (10 − 4)(6) = 76
• Simpul 2 (objek 1 tidak diambil): W = 0 + 0 = 0; F = 0 + 0 = 0
𝑐Ƹ 2 = 𝐹 + (𝐾 − 𝑊)𝑝2 /𝑤2 = 0 + (10 − 0)(6) = 60
Pohon ruang status yang terbentuk: 0
W=0
F =0
1 2
Simpul hidup: 2 dan 4 W=4 W=0
Karena simpul 4 memiliki F =40 F =0
cost paling besar, maka x2 = 1 76 x2 = 0 60
3 4
simpul 4 selanjutnya yang
W=11 W=4
diekpansi F = 40
B 70 12
0
W=0
Simpul 5 (objek 3 diambil): W = 4 + 5 = 9; F = 40 + 25 = 65
F =0
𝑐Ƹ 5 = 𝐹 + (𝐾 − 𝑊)𝑝4 /𝑤4 = 65 + (10 − 9)(4) = 69
x1 = 1 100 x1 = 0
Simpul 6 (objek 3 tidak diambil): W = 4 + 0 = 4; F = 40 + 0 = 40 1 2
𝑐Ƹ 6 = 𝐹 + (𝐾 − 𝑊)𝑝4 /𝑤4 = 40 + (10 − 4)(4) = 64 W=4 W=0
F =40 F =0
x2 = 1 76 x2 = 0 60
3 4
Simpul hidup: 2, 5, dan 6
W=11 W=4
Karena simpul 5 memiliki cost paling F = 40
besar, maka simpul 5 selanjutnya yang B
x3 = 1 70 x3 = 0
diekspansi 5 6
W=9 W=4
F = 65 F = 40
69 64
13
0
W=0
Simpul 7 (w4 diambil): W = 9 + 3 = 12 > kapasitas knapsack (K = 10) F =0
Simpul 7 langsung dimatikan. 100
x1 = 1 x1 = 0
Simpul 8 (w4 tidak diambil): W = 9 + 0 = 9; F = 65 + 0 = 65 1 2
𝑐Ƹ 8 = 𝐹 + (𝐾 − 𝑊)𝑝5 /𝑤5 = 65 + (10 − 9)(0) = 65 W=4 W=0
F =40 F =0
x2 = 1 76 x2 = 0 60 B
3 4
Simpul 8 adalah simpul solusi (goal node) W=11 W=4
dan merupakan solusi optimal F = 40
B 70
x3 = 1 x3 = 0
Semua simpul hidup yang cost-nya lebih 5 6
W=9 W=4
kecil dari 65 dibunuh F = 65 F = 40
B
(simpul 2 dan simpul 6 dibunuh) 69
x4 = 0 64
x4 = 1
7 8
Solusi optimal: X = (1, 0, 1, 0), F = 65 W=12 W=9
F = 65 65
B 14
Goal node (solusi optimal)
TAMAT
15
Algoritma Divide and Conquer
Bahan Kuliah IF2211 Strategi Algoritma
Oleh: Rinaldi Munir
2
3
Definisi
Q
U
C
R
E
sekaligus
• Obyek persoalan yang dibagi : masukan (input) atau
instances persoalan yang berukuran n seperti:
- tabel (larik),
- matriks,
- eksponen,
- dll, bergantung persoalannya.
7
Jika pembagian selalu menghasilkan dua upa-masalah yang
berukuran sama:
procedure DIVIDE_and_CONQUER(input n : integer)
{ Menyelesaikan masalah dengan algoritma D-and-C.
Masukan: masukan yang berukuran n
Keluaran: solusi dari masalah semula
}
Deklarasi
r, k : integer
Algoritma
if n n0 then {ukuran masalah sudah cukup kecil }
SOLVE upa-masalah yang berukuran n ini
else
Bagi menjadi 2 upa-masalah, masing-masing berukuran n/2
DIVIDE_and_CONQUER(upa-masalah pertama yang berukuran n/2)
DIVIDE_and_CONQUER(upa-masalah kedua yang berukuran n/2)
COMBINE solusi dari 2 upa-masalah
endif
g (n) , n n0
T (n)
2T ( n / 2) f ( n ) , n n0 8
Mencari Nilai Minimum dan
Maksimum (MinMaks)
9
Penyelesaian dengan Algoritma Brute Force
procedure MinMaks1(input A : TabelInt, n : integer,
output min, maks : integer)
{ Mencari nilai minimum dan maksimum di dalam tabel A yang berukuran n
elemen, secara brute force.
Masukan: tabel A yang sudah terdefinisi elemen-elemennya
Keluaran: nilai maksimum dan nilai minimum tabel
}
Deklarasi
i : integer
Algoritma:
min A1 { inisialisasi nilai minimum}
maksA1 { inisialisasi nilai maksimum }
for i2 to n do
endfor
T(n) = (n – 1) + (n – 1) = 2n – 2 = O(n) 10
Ide penyelesaian dengan Divide and Conquer
Contoh 4.1. Misalkan tabel A berisi elemen-elemen sebagai berikut:
4 12 23 9 21 1 35 2 24
4 12 23 9 21 1 35 2 24
DIVIDE
4 12 23 9 21 1 35 2 24
4 12 23 9 21 1 35 2 24
min = 4 min = 1
maks = 23 maks = 35
COMBINE
4 12 23 9 21 1 35 2 24
min = 1
11
maks = 35
• Ukuran tabel hasil pembagian dapat dibuat
cukup kecil sehingga mencari minimum dan
maksimum dapat diselesaikan (SOLVE) secara
trivial.
12
MinMaks(A, n, min, maks)
Algoritma:
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.
(b) CONQUER:
MinMaks(A1, n/2, min1, maks1)
MInMaks(A2, n/2, min2, maks2)
(c) COMBINE:
if min1 < min2 then min min1 else min min2
if maks1 < maks2 then maks maks2 else maks maks1
13
Contoh 4.2. Tinjau kembali Contoh 4.1 di atas.
4 12 23 9 21 1 35 2 24
4 12 23 9 21 1 35 2 24
4 12 23 9 21 1 35 2 24
4 12 23 9 21 1 35 2 24
min = 4 min = 9 min = 21 min = 1 min = 2
maks = 12 maks = 23 maks = 21 maks =35 maks = 24
4 12 23 9 21 1 35 2 24
min = 4 min = 9 min = 1
maks = 12 maks = 23 maks = 35
4 12 23 9 21 1 35 2 24
min = 4 min = 1
maks = 23 maks = 35
4 12 23 9 21 1 5 2 24 14
min = 1
maks = 35
procedure MinMaks2(input A : TabelInt, i, j : integer,
output min, maks : integer)
{ Mencari nilai maksimum dan minimum di dalam tabel A yang berukuran n
elemen secara Divide and Conquer.
Masukan: tabel A yang sudah terdefinisi elemen-elemennya
Keluaran: nilai maksimum dan nilai minimum tabel
}
Deklarasi
min1, min2, maks1, maks2 : integer
Algoritma:
if i=j then { 1 elemen }
minAi
maksAi
else
if (i = j-1) then { 2 elemen }
if Ai < Aj then
maksAj
minAi
else
maksAi
minAj
endif
else { lebih dari 2 elemen }
k(i+j) div 2 { bagidua tabel pada posisi k }
MinMaks2(A, i, k, min1, maks1)
MinMaks2(A, k+1, j, min2, maks2)
if min1 < min2 then
minmin1
else
minmin2
endif
if maks1<maks2 then
maksmaks2
else
maksmaks1
endif 15
Kompleksitas waktu asimptotik:
0 ,n 1
T (n) 1 ,n 2
2T ( n / 2) 2 , n 2
Penyelesaian:
T(n) = 2T(n/2) + 2
= 2(2T(n/4) + 2) + 2 = 4T(n/4) + 4 + 2
= 4T(2T(n/8) + 2) + 4 + 2 = 8T(n/8) + 8 + 4 + 2
= ...
k 1
k–1
=2 T(2) + 2 i
i 1
= 2k – 1 1 + 2k – 2
= n/2 + n – 2
= 3n/2 – 2
= O(n) 16
Bandingkan:
• MinMaks1 secara brute force : T(n) = 2n – 2
• MinMaks2 secara divide and conquer: T(n) = 3n/2 – 2
17
Algoritma Pengurutan Secara
Divide and Conquer
procedure Sort(input/output A : TabelInt, input n : integer)
18
Contoh:
A 4 12 3 9 1 21 5 2
Divide: A1 4 12 3 9 A2 1 21 5 2
Sort: A1 3 4 9 12 A2 1 2 5 21
Combine: A1 1 2 3 4 5 9 12 21
A 4 12 3 9 1 21 5 2
Divide: A1 4 2 3 1 A2 9 21 5 12
Sort: A1 1 2 3 4 A2 5 9 12 21
Combine: A 1 2 3 4 5 9 12 21
20
(a) Merge Sort
• Ide merge sort:
21
Merge Sort
Algoritma:
1. Untuk kasus n = 1, maka tabel A sudah terurut
dengan sendirinya (langkah SOLVE).
22
Contoh Merge:
A1 A2 B
1 13 24 2 15 27 1 < 2 1 1
1 13 24 2 15 27 2 <13 2 1 2
1 13 24 2 15 27 13<1513 1 2 13
1 13 24 2 15 27 15<2415 1 2 13 15
1 13 24 2 15 27 24<2724 1 2 13 15 24
1 13 24 2 15 27 27 1 2 13 15 24 27
23
Proses merge:
24
Contoh 4.3. Misalkan tabel A berisi elemen-elemen berikut:
4 12 23 9 21 1 5 2
4 12 23 9 21 1 5 2
4 12 23 9 21 1 5 2
4 12 23 9 21 1 5 2
4 12 23 9 21 1 5 2
MERGE: 4 12 9 23 1 21 2 5
4 9 12 23 1 2 5 21
1 2 4 5 9 12 21 23
25
26
procedure MergeSort(input/output A : TabelInt, input i, j : integer)
Algoritma:
if i < j then { Ukuran(A)> 1}
k(i+j) div 2
MergeSort(A, i, k)
MergeSort(A, k+1, j)
Merge(A, i, k, j)
endif
27
Prosedur Merge:
Algoritma:
kidal1kiri { A[kiri .. tengah] }
kidal2tengah + 1 { A[tengah+1 .. kanan] }
ikiri
while (kidal1 tengah) and (kidal2 kanan) do
if Akidal1 Akidal2 then
BiAkidal1
kidal1kidal1 + 1
else
BiAkidal2
kidal2kidal2 + 1
endif
ii + 1
endwhile
{ kidal1 > tengah or kidal2 > kanan }
Asumsi: n = 2k
a ,n 1
T (n)
2T (n / 2) cn , n 1
29
Penyelesaian:
T(n) = 2T(n/2) + cn
= 2(2T(n/4) + cn/2) + cn = 4T(n/4) + 2cn
= 4(2T(n/8) + cn/4) + 2cn = 8T(n/8) + 3cn
= ...
= 2k T(n/2k) +kcn
n/2k = 1 k = 2log n
sehingga
Algoritma:
if i < j then { Ukuran(A)> 1}
ki
InsertionSort(A, i, k)
InsertionSort(A, k+1, j)
Merge(A, i, k, j)
endif
31
Perbaikan:
Algoritma:
if i < j then { Ukuran(A)> 1}
ki
InsertionSort(A, k+1, j)
Merge(A, i, k, j)
endif
4 12 3 9 1 21 5 2
4 12 3 9 1 21 5 2
4 12 3 9 1 21 5 2
4 12 3 9 1 21 5 2
4 12 3 9 1 21 5 2
4 12 3 9 1 21 5 2
4 12 3 9 1 21 5 2
4 12 3 9 1 21 5 2
33
MERGE: 4 12 3 9 1 21 2 5
4 12 3 9 1 2 5 21
4 12 3 9 1 2 5 21
4 12 3 1 2 5 9 21
4 12 1 2 3 5 9 21
4 1 2 3 5 9 12 21
1 2 3 4 5 9 12 21
34
Kompleksitas waktu algoritma Insertion Sort:
a ,n 1
T (n)
T (n 1) cn , n 1
Penyelesaian:
T(n) = cn + T(n – 1)
= cn + { c (n – 1) + T(n – 2) }
= cn + c(n – 1) + { c (n – 2) + T(n – 3) }
= cn + c (n – 1) + c (n – 2) + {c(n – 3) + T(n – 4) }
= ...
= cn + c (n – 1) + c(n – 2) + c(n – 3) + ... + c2 + T(1)
= c{ n + (n – 1) + (n – 2) + (n – 3) + ... + 2 } + a
= c{ (n – 1)(n + 2)/2 } + a
= cn2/2 + cn/2 + (a – c )
= O(n2)
35
(c) Quick Sort
• Ditemukan oleh Tony Hoare tahun 1959 dan
dipublikasikan tahun 1962.
Sort: A1 1 2 3 4 A2 5 9 12 21
Combine: A 1 2 3 4 5 9 12 21
37
• Terdapat beberapa varian Algoritma Quicksort. Versi orisinal
adalah dari Hoare seperti di bawah ini:
8 1 4 6 9 3 5 7
Langkah-langkah partisi:
(i): 8 1 4 6 9 3 5 7
pivot
(ii) & (iii): 8 1 4 6 9 3 5 7
p q
(iv): 5 1 4 6 9 3 8 7
39
(ii) & (iii): 5 1 4 6 9 3 8 7
p q
(iv): 5 1 4 3 9 6 8 7
(ii) & (iii): 5 1 4 3 9 6 8 7
q p (q < p, berhenti)
kiri: 5 1 4 3 ( < 6)
kanan: 9 6 8 7 ( 6)
40
5 1 4 3 9 6 8 7
p q p q
1 5 4 3 6 9 8 7
1 5 4 3 6 9 8 7
q p q p
(q > p , berhenti) (q > p , berhenti)
1 5 4 3 6 9 8 7
p q p q
41
1 3 4 5 6 7 8 9
1 3 4 5 6 7 8 9
q p q p
p>q, berhenti p>q, berhenti
1 3 4 5 6 7 8 9
q p q p
p>q p>q
1 3 4 5 6 7 8 9 (terurut)
42
Pseudo-code Quick Sort:
Algoritma:
if i < j then { Ukuran(A) > 1 }
Partisi(A, i, j, k) { Dipartisi pada indeks k }
QuickSort(A, i, k) { Urut A[i..k] dengan Quick Sort }
QuickSort(A, k+1, j) { Urut A[k+1..j] dengan Quick Sort }
endif
43
procedure Partisi(input/output A : TabelInt, input i, j : integer,
output q : integer)
Algoritma:
pivotA[(i + j) div 2] { pivot = elemen tengah}
p i
q j
repeat
while A[p] < pivot do
p p + 1
endwhile
{ A[p] >= pivot}
if p < q then
{pertukarkan A[p] dengan A[q] }
swap(A[p], A[q])
44
Versi kedua: Partisi sedemikian rupa sehingga
elemen-elemen larik kiri pivot dan elemen-elemen
larik kanan dari pivot. Pivot = elemen pertama.
pivot
Contoh:
5, 3, 1, 9, 8, 2, 4, 7
pivot
Partisi 2, 3, 1, 4, 5, 8, 9, 7
Semua pivot Semua pivot
45
Pseudo-code Quick Sort versi 2:
Algoritma:
if i < j then { Ukuran(A) > 1 }
Partisi2(A, i, j, k) { Dipartisi pada indeks k }
QuickSort2(A, i, k-1) { Urut A[i..k-1] dengan Quick Sort }
QuickSort2(A, k+1, j) { Urut A[k+1..j] dengan Quick Sort }
endif
46
procedure Partisi2(input/output A : TabelInt, input i, j : integer,
output q : integer)
repeat
q q – 1
until A[q] pivot
5 3 1 4 8 2 9 7
5 3 1 4 8 2 9 7
p q
5 3 1 4 2 8 9 7
5 3 1 4 2 8 9 7
q p stop sebab p > q
2 3 1 4 5 8 9 7
5 5 48
2 3 1 4 8 9 7
p q p q
2 1 3 4 8 7 9
2 1 3 4 8 7 9
q p q p
1 2 3 4 7 8 9
1 3 4 7 9
q p
4
Terurut:
1 2 3 4 5 7 8 9
49
Cara pemilihan pivot (khusus pada Versi 1):
1. Pivot = elemen pertama/elemen terakhir/elemen
tengah tabel
50
Kompleksitas Algoritma Quicksort:
51
n
n/2 n/2
52
a ,n 1
T (n)
2T (n / 2) cn , n 1
53
2. Kasus terburuk (worst case)
54
n
1 n–1
1 n–2
1 n–3
...
1 1
55
Kompleksitas waktu pengurutan:
a ,n 1
T (n)
T (n 1) cn , n 1
56
3. Kasus rata-rata (average case)
57
(d) Selection Sort
Algoritma:
if i < j then { Ukuran(A) > 1 }
Bagi(A, i, j)
SelectionSort(A, i+1, j)
endif
58
procedure Bagi(input/output A : TabInt, input i,j: integer)
Masukan: A[i..j]
Keluaran: A[i..j] dengan Ai adalah elemen terkecil.
}
Deklarasi
idxmin, k, temp : integer
Algoritma:
idxmini
for ki+1 to jdo
if Ak < Aidxmin then
idxmink
endif
endfor
59
Contoh 4.5. Misalkan tabel A berisi elemen-elemen berikut:
4 12 3 9 1 21 5 2
4 12 3 9 1 21 5 2
1 12 3 9 4 21 5 2
1 2 3 9 4 21 5 12
1 2 3 9 4 21 5 12
1 2 3 4 9 21 5 12
1 2 3 4 5 21 9 12
1 2 3 4 5 9 12 21
1 2 3 4 5 9 12 21
1 2 3 4 5 9 12 21 60
Kompleksitas waktu algoritma:
a ,n 1
T (n)
T (n 1) cn , n 1
61
Teorema Master
Misalkan T(n) adalah fungsi menaik yang memenuhi
relasi rekurens:
63
Persoalan Pemasangan Ubin
Persoalan: Diberikan sebuah papan yang berukuran
2k × 2k. Tersedia sebuah ubin dan 22k – 1 buah ubin
yang terdiri dari kelompok 3-ubin berbentuk huruf L.
Pasanglah semua ubin pada papan tersebut.
64
Algoritma D & C:
• Bagi papan menjadi 4 bagian
• Ubin tunggal dapat ditaruh di mana saja.
• Tempatkan kelompok 3-ubin berbentuk L
pada bagian tengah yang tidak ada ubin
tunggal
65
66
Latihan
• (Soal UTS 2011) Misalkan anda mempunyai array A[1..n] yang
telah berisi n elemen integer. Elemen mayoritas di dalam A
adalah elemen yang terdapat pada lebih dari n/2 posisi (jadi, jika
n = 6 atau n = 7, elemen mayoritas terdapat pada paling sedikit 4
posisi). Rancanglah algoritma divide and conquer (tidak dalam
bentuk pseudo-code, tapi dalam bentuk uraian deskriptif) untuk
menemukan elemen mayoritas di dalam A (atau menentukan
tidak terdapat elemen mayoritas). Jelaskan algoritma anda
dengan contoh sebuah array berukuran 8 elemen. Selanjutnya,
perkirakan kompleksitas algoritmanya dalam hubungan rekursif
(misalnya T(n) = bT(n/p) + h(n)), lalu selesaikan T(n) tersebut.
67
Solusi:
1. Jika n = 1, maka elemen tunggal tersebut adalah
mayoritasnya sendiri.
2. Jika n > 1, maka bagi array menjadi dua bagian (kiri dan
kanan) yang masing-masing berukuran sama (n/2).
3. Tahap combine. Ada empat kemungkinan kasus:
Kasus 1: tidak ada mayoritas pada setiap bagian, sehingga
array gabungan keduanya tidak memiliki mayoritas.
Return: “no majority”
Contoh: 4 3 4 2 7 5 2 1
4 3 4 2 7 5 2 1
Ingat definisi
no majority no majority
mayoritas!
4 3 4 2 7 5 2 1 68
“no majority”
Kasus 2: bagian kanan memiliki mayoritas, bagian kiri
tidak. Pada array gabungan, hitung jumlah elemen yang
sama dengan elemen mayoritas bagian kanan tersebut;
Jika elemen tersebut mayoritas, return elemen tersebut,
kalau tidak return “no majority”
Contoh: 4 3 4 2 7 4 4 4
Ingat definisi
mayoritas! 4 3 4 2 7 4 4 4
no majority majority = 4
Ingat definisi
4 3 4 2 7 4 4 4 mayoritas!
“majority = 4” 69
Contoh lain (tidak ada mayoritas):
4 3 5 2 7 4 4 4
4 3 5 2 7 4 4 4
no majority majority = 4
4 3 5 2 7 4 4 4
Jumlah elemen 4 = 4 buah bukan mayoritas
“no majority”
70
Kasus 3: bagian kiri memiliki mayoritas, bagian kanan
tidak. Pada array gabungan, hitung jumlah elemen yang
sama dengan elemen mayoritas bagian kiri tersebut.
Jika elemen tersebut mayoritas, return elemen tersebut,
kalau tidak return “no majority”
Contoh: 3 3 4 3 7 3 3 4
3 3 4 3 7 3 3 4
majority = 3 no majority
3 3 4 3 7 3 3 4
Jumlah elemen 3 = 5 buah mayoritas
“majority = 3” 71
Kasus 4: bagian kiri dan bagian kanan memiliki mayoritas,
Pada array gabungan, hitung jumlah elemen yang sama
dengan kedua elemen kandidat mayoritas tersebut.
Jika salah satu kandidat adalah elemen mayoritas, return
elemen tersebut, kalau tidak return “no majority”
Contoh: 3 3 4 3 4 4 4 4
3 3 4 3 4 4 4 4
majority = 3 majority = 4
3 3 4 3 4 4 4 4
Jumlah elemen 3 = 3 buah
Jumlah elemen 4 = 5 buah mayoritas
72
“majority = 4”
Contoh keseluruhan:
4 3 4 4 4 5 4 3
4 3 4 4 4 5 4 3
divide
4 3 4 4 4 5 4 3
4 3 4 4 4 5 4 3
4 3 4 4 4 5 4 3
solve
m=4 m=3 m=4 m=4 m=4 m=5 m=4 m=3
73
4 3 4 4 4 5 4 3
m=4 m=3 m=4 m=4 m=4 m=5 m=4 m=3
4 3 4 4 4 5 4 3
nm m =4 nm nm
4 3 4 4 4 5 4 3
combine
m=4 nm
4 3 4 4 4 5 4 3
m=4
74
Kompleksitas waktu algoritma mayoritas:
T(n) adalah jumlah operasi perbandingan yang terjadi
(pada saat menghitung jumlah elemen yang sama dengan
kandidat mayoritas)
75
Jadi,
a ,n 1
T (n)
2T (n / 2) cn , n 1
76
Mencari Pasangan Titik yang
Jaraknya Terdekat (Closest Pair)
77
p5
p2
p4
p3 p6
p8
p1
p7
d ( x1 x2 ) ( y1 y2 )
2 2
78
Penyelesaian secara Brute Force
• Hitung jarak setiap pasang titik. Ada
sebanyak C(n, 2) = n(n – 1)/2 pasangan titik
79
Penyelesaian secara Divide and Conquer
• Asumsi: n = 2k dan titik-titik sudah diurut
berdasarkan absis (x).
sub-himpunan, masing-
p8
masin n/2 titik. p1
p7
S1 S2 x
Garis L dapat dihampiri sebagai
L
y = xn/2 dengan asumsi titik-titik
diurut menaik berdasarkan absis.
81
3. CONQUER: Secara rekursif, terapkan algoritma D-
and-C pada masing-masing bagian.
Deklarasi:
d1, d2 : real
Algoritma:
if n = 2 then
d jarak kedua titik dengan rumus Euclidean
else
S1 {p1, p2 ,..., pn/2 }
S2 {pn/2+1, pn/2+2 ,..., pn }
FindClosestPair2(S1, n/2, d1)
FindClosestPair2(S2, n/2, d2)
d MIN(d1,d2)
{--***********************************************--}
Tentukan apakah terdapat titik pl di S1 dan pr di
S2 dengan jarak(pl, pr) < d. Jika ada, set
d dengan jarak terkecil tersebut.
{--***********************************************--}
endif
83
• Jika terdapat pasangan titik pl and pr yang jaraknya
lebih kecil dari d, maka kasusnya adalah:
84
• Ini berarti pl and pr adalah sepasang titik yang berada
di daerah sekitar garis vertikal L:
d
d d
P
d
d d
d
89
• Pengurutan titik-titik dalam absis x dan ordinat y
dilakukan sebelum menerapkan algoritma Divide
and Conquer.
• Pemrosesan titik-titk di dalam Sstrip memerlukan
waktu t(n) = cn = O(n).
• Kompleksitas algoritma:
2T ( n / 2) cn ,n 2
T (n)
a ,n 2
91
Penyelesaian dengan Algoritma Brute Force
Algoritma:
hasil1
for k1 to n do
hasilhasil * a
endfor
return hasil
T(n) = n = O(n)
92
Penyelesaian dengan Divide and Conquer
Algoritma menghitung an:
1. Untuk kasus n = 0, maka an = 1.
93
Contoh 4.6. Menghitung 316 dengan metode Divide and Conquer:
316 = 38 38 = (38)2
= ((34)2)2
= (((32)2)2)2
= ((((31)2))2)2)2
= ((((30)2 3)2)2)2)2
= ((((1)2 3)2)2)2)2
= ((((3)2))2)2)2
= (((9)2)2)2
= (81) 2)2
= (6561)2
= 43046721
94
function Exp2(input a :real, n : integer) real
{ mengembalikan nilai a^n, dihitung dengan metode Divide and
Conquer }
Algoritma:
if n = 0 then
return 1
else
if odd(n) then { fungsi ganjil }
return Exp2(a, n div 2)* Exp2(a, n div 2) * a
else
return Exp2(a, n div 2)* Exp2(a, n div 2)
endif
endif
Algoritma:
if n = 0 then
return 1
else
xExp3(a, n div 2)
if odd(n) then { fungsi n ganjil }
return x * x * a
else
return x * x
endif
endif
96
Kompleksitas algoritma:
0 ,n 0
T (n)
1 T ( n / 2) , n 0
Penyelesaian:
T(n) = 1 + T( n/2 )
= 1 + (1 + T( n/4 ) = 2 + T( n/4 )
= 2 + (1 + T( n/8 ) = 3 + T( n/8 )
= ...
= k + T(n/2k )
97
Persamaan terakhir diselesaikan dengan membuat n/2k =1,
98
Perkalian Matriks
• Misalkan A dan B dua buah matrik berukuran n
n.
• Perkalian matriks: C = A × B
n
Elemen-elemen hasilnya: cij ai1b1 j ai 2 b2 j ainbnj aik bkj
k 1
99
Penyelesaian dengan Algoritma Brute Force
Deklarasi
i, j, k : integer
C : Matriks
Algoritma:
for i1 to n do
for j1 to n do
Ci,j0 { inisialisasi penjumlah }
for k 1 to n do
Ci,j Ci,j + Ai,k * Bk,j
endfor
endfor
endfor
return C
101
Contoh 4.7. Misalkan matriks A adalah sebagai berikut:
3 4 8 16
21 5 12 10
A=
5 1 2 3
45 9 0 1
3 4 8 16 5 1 2 3
A11 = A12 = 12 10 A21 = 45 9 A22 = 0 1
21 5
102
function KaliMatriks2(input A,B: Matriks, input n : integer) Matriks
{ Memberikan hasil kali matriks A dan B yang berukuran n × n.
Masukan: matriks integer A dan B, ukuran matriks (n)
Keluaran: matriks C = A B.
}
Deklarasi
i, j, k : integer
A11, A12, A21, A22,
B11, B12, B21, B22,
C11, C12, C21, C22 : Matriks
Algoritma:
if n = 1 then
return A B { perkalian biasa }
else
Bagi A menjadi A11, A12, A21, dan A22 yang masing-masing
berukuran n/2 n/2
Bagi B menjadi B11, B12, B21, dan B22 yang masing-masing
berukuran n/2 n/2
C11 KaliMatriks2(A11, B11, n/2) + KaliMatriks2(A12, B21, n/2)
C12 KaliMatriks2(A11, B12, n/2) + KaliMatriks2(A12, B22, n/2)
C21 KaliMatriks2(A21, B11, n/2) + KaliMatriks2(A22, B21, n/2)
C22 KaliMatriks2(A21, B12, n/2) + KaliMatriks2(A22, B22, n/2)
return C { C adalah gabungan C11, C12, C13, C14 }
endif
103
Pseudo-code algoritma penjumlahan (+), C = A + B:
Algoritma:
for i1 to n do
for j1 to n do
C i,j A i,j + B i,j
endfor
endfor
return C
104
Kompleksitas waktu perkalian matriks seluruhnya adalah:
a ,n 1
T (n)
8T ( n / 2 ) cn 2
,n 1
T(n) = O(n3)
105
Algoritma Perkalian Matriks Strassen
Hitung matriks antara:
M1 = (A12 – A22)(B21 + B22)
M2 = (A11 + A22)(B11 + B22)
M3 = (A11 – A21)(B11 + B12)
M4 = (A11 + A12)B22
M5 = A11 (B12 – B22)
M6 = A22 (B21 – B11)
M7 = (A21 + A22)B11
maka,
C11 = M1 + M2 – M4 + M6
C12 = M4 + M5
C21 = M6 + M7
C22 = M2 – M3 + M5 – M7 106
• Volker Strassen (born April
29, 1936) is a German
mathematician, a professor
emeritus in the department of
mathematics and statistics at
the University of Konstanz.
a ,n 1
T (n)
7T ( n / 2 ) cn 2
,n 1
log 7 2.81
T(n) = O(n ) = O(n )
108
Perkalian Dua Buah Bilangan
Bulat yang Besar
Persoalan: Misalkan bilangan bulat X dan Y
yang panjangnya n angka
X = x1x2x3 … xn
Y = y1y2y3… yn
X = 1234 (n = 4)
Y = 5678 (n = 4)
X Y = 1234
5678
9872
8368
7404
6170 +
7006652 ( 7 angka)
110
Pseudo-code algoritma perkalian matriks:
Algoritma:
for setiap angka yi dari yn, yn-1, …, y1 do
AngkaPuluhan 0
for setiap angka xj dari xn, xn-1, …, x1 do
temp xj * yi
temp temp + AngkaPuluhan
AngkaSatuan temp mod 10
AngkaPuluhan temp div 10
tuliskan AngkaSatuan
endfor
endfor
Z Jumlahkan semua hasil perkalian dari atas ke bawah
return Z
X a b
Y c d
n/2 n/2
s = n div 2
a = X div 10s
b = X mod 10s
c = Y div 10s
d = Y mod 10s
X = a 10s + b
Y = c 10s + d 112
Contoh,
X Y = (a 10s + b) (c 10s + d)
= ac 102s + ad 10s + bc 10s + bd
= ac 102s + (ad + bc) 10s + bd
113
Pseudo-code perkalian X dan Y:
Algoritma:
if n = 1 then
return X * Y { perkalian biasa }
else
sn div 2 { bagidua pada posisi s }
aX div 10s
bX mod 10s
c Y div 10s
d Y mod 10s
return Kali2(a, c, s)*102s + Kali2(b, c, s)*10s +
Kali2(a, d, s)*10s + Kali2(b, d, s)
endif
a ,n 1
T (n)
4T (n / 2) cn , n 1
114
• Penyelesaian:
T(n) = O(n2).
115
Perbaikan (A.A Karatsuba, 1962):
Misalkan
maka,
ac
102s
{( a b)( c d ) ac
bd } 10s
bd
p
p q q
r
116
Anatolii Alexevich Karatsuba
Algoritma:
if n = 1 then
return X * Y { perkalian biasa }
else
sn div 2 { bagidua pada posisi s }
aX div 10s
bX mod 10s
c Y div 10s
d Y mod 10s
pKali3(a, c, s)
qKali3(b, d, s)
rKali3(a + b, c + d, s)
return p*102s + (r – p – q)*10s + q
endif
118
Kompleksitas waktu algoritmanya:
a ,n 1
T (n)
3T (n / 2) cn , n 1
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
Aplikasi Divide and Conquer pada:
1. Grafika Komputer
2. Evaluasi expression tree
• Titik kontrol pertama dan terakhir selalu titik akhir dari kurva,
namun, titik kontrol antara (jika ada) umumnya tidak terletak
pada kurva.
Kurva Linier
• Diberikan titik P0 dan P1, kurva Bézier linear adalah sebuah
garis lurus antara dua titik. Kurva diberikan oleh:
• Penyederhanaan:
• Untuk kurva Bézier kuadratik perlu dibangun titik antara (Q0
dan Q1 sebagaimana t bervariasi dari 0 sampai 1:
Orde 3:
Orde 4:
Aplikasi Divide and Conquer
• Ada banyak cara membentuk kurva Bezier.
• Hitung titik tengah setiap garis yang terletak di antara tiga titik
awal. Titik-titik pertengahan baru dihitung ditampilkan dalam
warna hijau.
2. http://en.wikipedia.org/wiki/Bezier_curve
Expression Tree
• Di dalam compiler bahasa pemrograman, ekspresi aritmetika
direpresentasikan dalam pohon biner yaitu expression tree
• Contoh: (5 + z) / -8) * (4 ^ 2)
IF2211 B&B/NUM-MLK-RN
Algoritma Global Branch & Bound
1. Masukkan simpul akar ke dalam antrian Q. Jika simpul akar adalah
simpul solusi (goal node), maka solusi telah ditemukan. Stop.
2. Jika Q kosong, tidak ada solusi. Stop.
3. Jika Q tidak kosong, pilih dari antrian Q simpul i yang mempunyai
nilai ‘cost’ ĉ(i) paling kecil. Jika terdapat beberapa simpul i yang
memenuhi, pilih satu secara sembarang.
4. Jika simpul i adalah simpul solusi, berarti solusi sudah ditemukan,
stop. Jika simpul i bukan simpul solusi, maka bangkitkan semua
anak-anaknya. Jika i tidak mempunyai anak, kembali ke langkah
2.
5. Untuk setiap anak j dari simpul i, hitung ĉ(j), dan masukkan
semua anak-anak tersebut ke dalam Q.
6. Kembali ke langkah 2.
IF2211 B&B/NUM-MLK-RN
Permainan 15-Puzzle
IF2211 B&B/NUM-MLK-RN
Pohon Ruang Status untuk 15-Puzzle
IF2211 B&B/NUM-MLK-RN
Cost dari Simpul Hidup 15-Puzzle
Target
IF2211 B&B/NUM-MLK-RN
Pembentukan Pohon Ruang Status
15-Puzzle dengan Branch & Bound
IF2211 B&B/NUM-MLK-RN
Pohon Ruang Status TSP 4 Simpul
IF2211 B&B/NUM-MLK-RN
TSP dengan B & B
Contoh lain TSP 5 simpul (matriks bobot/cost matrix):
Brute Force:
- 4!=24 sirkuit hamilton
- Solusi: 1-4-2-5-3-1
- Bobot: 10+6+2+7+3=28
Greedy:
- Solusi: 1-4-5-2-3-1 B&B-TSP dgn Reduced Cost Matrix
- Bobot: 10+3+4+16+3=36 X0=X5=1
IF2211 B&B/NUM-MLK-RN
Cost dari Simpul Hidup TSP
1. Matriks ongkos-tereduksi (reduced cost
matrix) dari graf
– Sebuah matriks dikatakan tereduksi jika setiap
kolom dan barisnya mengandung paling sedikit
satu buah nol dan semua elemen lainnya non-
negatif.
– Batas (bound): Jumlah total elemen pengurang
dari semua baris dan kolom merupakan batas
bawah dari total bobot minimum tur. (hal 159)
2. Bobot minimum tur lengkap
IF2211 B&B/NUM-MLK-RN
Reduced Cost Matrix: Contoh
R A
Reduksi baris
dan kolom
IF2211 B&B/NUM-MLK-RN
Reduced Cost Matrix
ĉ(S):
(a) bobot perjalanan dari akar ke S
(jika S daun)
(b) Bobot perjalanan minimum
yang melalui simpul S (jika S
bukan daun)
ĉ(akar)=r
ĉ(1)=25
IF2211 B&B/NUM-MLK-RN
R=1
A S=4
Sisi (1,4) yang sedang diperiksa, maka:
cˆ(4) = cˆ(1) + A(1,4) + r = 25 + 0 + 0 = 25
IF2211 B&B/NUM-MLK-RN
B&B-TSP dgn Reduced Cost Matrix
R A
X1=5
X1=2 X1=3 X1=4
X1=5
X1=2 X1=3 X1=4
ĉ(10)=28
ĉ(11)=28
IF2211 B&B/NUM-MLK-RN
B&B-TSP dgn Reduced Cost Matrix
Simpul-E Simpul Hidup
1 4,5,2,3
4 6,5,2,8,7,3
6 10,5,2,8,7,9,3
10 11,5,2,8,7,9,3
11 daun
IF2211 B&B/NUM-MLK-RN
SELAMAT BELAJAR
IF2211 B&B/NUM-MLK-RN
Algoritma Branch & Bound
(Bagian 2)
Bahan Kuliah IF2211 Strategi Algoritma
Tour lengkap:
a,c,d,b,a
Solusi: (a,i2,i3,i4,a)
IF2211 B&B/NUM-MLK-RN
B&B-TSP dengan Bobot Tur Lengkap
Hasil pengamatan:
IF2211 B&B/NUM-MLK-RN
Cost Simpul Akar
12
IF2211 B&B/NUM-MLK-RN
B&B-TSP dengan Bobot Tur Lengkap
a b c d
Contoh untuk menghitung cost simpul 2:
Untuk i2=b, sisi (a, b) wajib diambil.
12 a b c d
32
a b c d
32 32 a b c d
32
IF2211 B&B/NUM-MLK-RN
12
IF2211 B&B/NUM-MLK-RN
IF2211 B&B/NUM-MLK-RN
Latihan 1
• (TSP) Diberikan sebuah graf lengkap dengan 4
simpul yang dinyatakan dengan matriks berbobot
sebagai berikut:
2 7 8
6 3 7
• Simpul diberi nomor 1, 2, 3, dan 4. Jika tur dimulai C =
dari simpul 3 , tentukan tur TSP dengan bobot 5 8 4
minimum (dari 3 kembali ke 3 melalui simpul yang
lain tepat sekali). Selesaikan persoalan ini dengan
7 6 9
algoritma branch and bound. Bound atau cost
dihitung dengan matriks ongkos tereduksi
(reduced cost matices). Tuliskan jawaban anda
dengan menggambarkan pohon ruang status
beserta nilai bound untuk setiap simpul, solusi
dalam bentuk vektor X dan total bobot.
Penyelesaian:
Pohon ruang status yang terbentuk:
Latihan 2:
• (Assignment Problem) Misalkan terdapat 4 orang
orang dan 4 buah pekerjaan (job). Setiap orang
akan di-assign dengan sebuah job. Ongkos (cost)
untuk meng-assign setiap orang dengan sebuah
job dinyatakan dengan sebuah matriks di Job 1 Job 2 Job 3 Job 4
9 8 Orang a
samping ini. 2 7
C= 6 7 Orang b
• Bagaimana meng-assign job dengan orang
4 3
sehingga total ongkos assignment seminimal 5 8 1 4 Orang c
mungkin? Selesaikan persoalan ini dengan 7 6 9 4 Orang d
algoritma branch and bound. Bound dihitung
dengan matriks ongkos tereduksi (reduced cost
matices). Gambarkan juga proses pembentukan
pohon ruang statusnya sampai menemukan
solusi.
Latihan 3:
• Persoalan 1/0 Knapsack
• Kapasitas knapsack : 10
• Dengan B&B:
• Bagaimana pencabangan pohon?
Petunjuk: setiap item → diikutsertakan atau tidak?
• Bagaimana pengurutan item pada aras pohon?
Petunjuk: ingat Greedy, bagaimana pengurutan yang memberikan
keuntungan optimal?
• Perlu batas bawah, atau batas atas?
Petunjuk: tujuan meminimalkan atau memaksimalkan?
Nilai apa yang dioptimasi?
• Fungsi batas (bounding function) setiap simpul ?
IF2211 B&B/NUM-MLK-RN
Selamat Belajar
IF2211 B&B/NUM-MLK-RN
Program Dinamis
(Dynamic Programming)
Bagian 1
3
Tinjau graf di bawah ini. Kita ingin menemukan lintasan terpendek dari 1
ke 10.
7
2 5
1
2 4 3 4
6 8 3
6
4
1 3 2 6 3 10
3 9 4
4
3 1
4
3
4 7
5
Greedy: dari setiap simpul, ambil sisi dengan bobot terkecil ke simpul berikutnya
Solusi greedy: 1 – 2 – 6 – 9 – 10 dengan cost = 2 + 4 + 3 + 4 = 13 → tidak optimal!
4
Prinsip Optimalitas
• Pada program dinamis, rangkaian keputusan yang optimal dibuat
dengan menggunakan Prinsip Optimalitas.
5
• Ongkos pada tahap k +1 = (ongkos yang dihasilkan pada tahap k ) +
(ongkos dari tahap k ke tahap k + 1, atau ck ,k +1 )
ck , k +1
……
1 2 k k +1 …… n
Ongkos sampai tahak k
6
Karakteristik Persoalan dengan Program Dinamis
7
Graf multitahap (multistage graph). Tiap simpul di dalam graf tersebut
menyatakan status, sedangkan V1, V2, … menyatakan tahap.
V1 V2 V3 V4 V5
9
6
7 10 12
1
4
8
11
8
3. Hasil dari keputusan yang diambil pada setiap tahap ditransformasikan
dari status yang bersangkutan ke status berikutnya pada tahap
berikutnya.
10
Misalkan x1, x2, …, xn menyatakan peubah (variable) keputusan yang
harus ditentukan masing-masing untuk tahap 1, 2, …, n. Maka,
1. Program dinamis maju. Program dinamis bergerak mulai dari
tahap 1, terus maju ke tahap 2, 3, dan seterusnya sampai tahap n.
Rangkaian peubah keputusan adalah x1, x2, …, xn.
11
Langkah-langkah Pengembangan Algoritma
Program Dinamis
1. Karakteristikkan struktur solusi optimal.
- tahap, variable keputusan, status (state), dsb
2. Definisikan secara rekursif nilai solusi optimal.
- hubungan nilai optimal suatu tahap dengan tahap sebelumnya
3. Hitung nilai solusi optimal secara maju atau mundur.
- menggunakan tabel
4. Rekonstruksi solusi optimal (opsional).
- rekonstruksi solusi secara mundur
12
Persoalan 1: Lintasan Terpendek (Shortest Path)
7
2 5
1
2 4 3 4
6 8 3
6
4
1 3 2 6 3 10
3 9 4
4
3 1
4
3
4 7
5
13
How to find the shortest path? 14
(a) Karakteristikkan struktur solusi optimal
• Misalkan x1, x2, x3, x4 adalah simpul-simpul yang dikunjungi pada tahap k
(k = 1, 2, 3, 4). Tahap 5 tidak ada karena x5=10
• Misalkan digunakan pendekatan program dinamis maju
• Maka rute yang dilalui adalah x1→x2→x3→x4 → x5=10
3 9 4
4
3 1
4
3
4 7
5
x1 x2 x3 x4 x5=10
(b) Definisikan hubungan rekursif solusi optimal
Relasi rekurens berikut menyatakan lintasan terpendek pada setiap tahap:
Keterangan:
a. xk : peubah keputusan pada tahap k (k = 2, 3, 4).
b. s : status pada setiap tahap
c. cxk,s : bobot (cost) sisi dari ke xk ke s
d. fk(s) : nilai minimum dari fk(xk, s)
e. fk – 1(xk) : nilai minimum tahap sebelumnya dari xk ke s
(c )Hitung nilai solusi optimal
Tahap 1:
f1 (s) = cx1s
Solusi Optimum
s f1(s) x1*
2 2 1
3 4 1 f1(s) = cx1,s
4 3 1
18
Tahap sebelumnya (Tahap 1)
Tahap 2:
𝑓2 (𝑠) = 𝑚𝑖𝑛{𝑓1 (𝑥2 ) + }
𝑥2
20
f (s) = min {f (x ) + c }
Tahap sebelumnya (Tahap 3)
Tahap 4:
𝑓4 (𝑠) = 𝑚𝑖𝑛{𝑓3 (𝑥4 ) + }
𝑥4
Solusi optimum dapat dibaca pada tabel di bawah ini: x2 f2(s) = f1(x2) + cx2,s Solusi Optimum
s 2 3 4 f2(s) x2*
x4 x3 x2 x1 Panjang Lintasan Terpendek 5 9 7 7 7 3 atau 4
6 6 6 4 4 4
8 5 3 1 11 7 8 8 8 8 2, 3, 4
4
10
9 6 4 1 11
2. Carilah lintasan terpendek dari 1 ke 6 pada graf (a) dan dari d ke k pada graf (b):
(a) (b)
Persoalan 2: Integer Knapsack
Diberikan sebuah knapsack dengan
kapasitas M. Terdapat n buah objek, setiap
objek memiliki bobot wi dan keuntungan pi.
Bagaimana cara memilih objek-objek yang
dimasukkan ke dalam knapsack sehingga
total keuntungan yang diperoleh maksimal.
24
Contoh: n = 3
M=5
Barang ke-i wi pi
1 2 65
2 3 80
3 1 30
• Pada persoalan ini,
1. Tahap (k) adalah proses memasukkan objek ke dalam knapsack
(knapsack) (pada contoh di atas ada 3 tahap).
• Dari tahap ke-1, kita masukkan objek ke-1 ke dalam knapsack untuk
setiap satuan kapasitas knapsack sampai batas kapasitas maksimumnya.
27
• Selanjutnya, kita bandingkan:
nilai keuntungan pengisian pada tahap k (yaitu pk) + nilai fk-1(y – wk)
dengan
• Jika pk + fk-1(y – wk) lebih kecil dari fk-1(y), maka objek yang ke-k tidak
dimasukkan ke dalam knapsack,
tetapi jika pk + fk-1(y – wk) lebih besar dari fk-1(y), maka objek yang ke-k
dimasukkan.
28
• Relasi rekurens untuk persoalan ini adalah
f0(y) = 0, y = 0, 1, 2, …, M (basis)
fk(y) = -, y < 0 (basis)
• f0(y) = 0 adalah nilai persoalan knapsack kosong (tidak ada persoalan knapsack)
dengan kapasitas y)
Solusi Optimum
y f0(y) 65 + f0(y – 2) f1(y) (x1*, x2*, x3*)
0 0 - 0 (0, 0, 0)
1 0 - 0 (0, 0, 0)
2 0 65 65 (1, 0, 0)
3 0 65 65 (1, 0, 0)
4 0 65 65 (1, 0, 0)
5 0 65 65 (1, 0, 0)
30
Tahap 2:
f2(y) = max{f1(y), p2 + f1(y – w2)}
= max{f1(y), 80 + f1(y – 3)}
Solusi Optimum
y f1(y) 80 + f1(y – 3) f2(y) (x1*, x2*, x3*)
0 0 80 + (-) = - 0 (0, 0, 0)
1 0 80 + (-) = - 0 (0, 0, 0)
2 65 80 + (-) = - 65 (1, 0, 0)
3 65 80 + 0 = 80 80 (0, 1, 0)
4 65 80 + 0 = 80 80 (0, 1, 0)
5 65 80 + 65 = 145 145 (1, 1, 0)
31
Tahap 3:
f3(y) = max{f2(y), p3 + f2(y – w3)}
= max{f2(y), 30 + f2(y – 1)}
Solusi Optimum
y f2(y) 30 + f2(y – 1) f3(y) (x1*, x2*, x3*)
0 0 30 + (-) = - 0 (0, 0, 0)
1 0 30 + (-) = - 0 (0, 0, 0)
2 65 30 + 0 = 30 65 (1, 0, 0)
3 80 30 + 65 = 95 95 (1, 0, 1)
4 80 30 + 80 = 110 110 (0, 1, 1)
5 145 30 + 80 = 110 145 (1, 1, 0)
32
SELAMAT BELAJAR
Program Dinamis
(Dynamic Programming)
Bagian 2.1: Capital Budgeting
x3
x2
x1
7
Relasi rekurens keuntungan optimal:
f ( x ) = max {R1(p1)}
1 1 feasible
(basis)
proposal _ p1
k = 2, 3
Catatan:
1. xk – 1 = xk – ck(pk)
8
Relasi rekurens keuntungan optimal menjadi
f ( x ) = max {R1(p1)}
1 1 c1 ( p1 ) x1
(basis)
k = 2, 3
9
Tahap 1
f ( x ) = max {R1(p1)}
1 1 c1 ( p1 ) x1
p1 =1 , 2 , 3
10
Tahap 2
11
Tahap 3
12
Rekonstruksi Solusi
Rekonstruksi solusi:
x3 p3* x2 p2* x1 p1 * (p1*, p2*, p3*)
1 (5 – 0 = 5) 4 (5 – 4 = 1) 2 (2, 4, 1)
1
2 (4 – 2 = 2) 3 (3, 2, 2)
2 (5 – 1 = 4)
3 (4 – 3 = 1) 3 (2, 3, 2)
13
SELAMAT BELAJAR
Program Dinamis
(Dynamic Programming)
Bagian 2.2: Travelling Salesperson Problem
2
• Misalkan G = (V, E) adalah graf lengkap berarah
dengan sisi-sisi yang diberi harga cij > 0.
Travelling
• Misalkan V = n dan n > 1. Simpul diberi nomor
1,2,…,n. Salesperson
• Asumsikan perjalanan (tur) dimulai/berakhir pd Problem
simpul 1.
(TSP)
• Setiap tur pasti terdiri dari sisi (1, k) dgn kV – {1}
dan sebuah lintasan dari simpul k ke simpul 1.
• Lintasan dari simpul k ke simpul 1 tersebut
melalui setiap simpul di dalam V – {1, k} tepat
hanya sekali.
3
TSP
4
• Misalkan f(i, S) adalah bobot lintasan terpendek yang berawal dari simpul i,
yang melalui semua simpul di dalam S dan berakhir pada simpul 1.
• Nilai f(1, V – {1}) adalah bobot tur terpendek.
Hubungan rekursif:
f (i , ) = c , 2 i n
i ,1
(basis)
f (i, S ) = min{c + f ( j, S − { j})} (rekurens) (2)
jS ij
0 10 15 20
5 0 9 10
6 13 0 12
8 8 9 0
Tahap 1: f (i, ) = ci ,1
, 2in
Diperoleh:
f(2, ) = c21 = 5;
f(3, ) = c31 = 6;
f(4, ) = c41 = 8;
6
Tahap 2:
f (i, S ) = min{c + f ( j, S − { j})} untuk S = 1
jS ij
Diperoleh:
f(2, {3}) = min{c23 + f(3, )} = min{9 + 6} = min{15} = 15
f(2, {4}) = min{c24 + f(4, )} = min{10 + 8} = min{18} = 18
f(3, {2}) = min{c32 + f(2, )} = min{13 + 5} = min{18} = 18
f(3, {4}) = min{c34 + f(4, )} = min{12 + 8} = min{20} = 20
f(4, {2}) = min{c42 + f(2, )} = min{8 + 5} = min{13} = 13
f(4, {3}) = min{c43 + f(3, )} = min{9 + 6} = min{15} = 15
7
Tahap 3:
f (i, S ) = min{c + f ( j, S − { j})}
jS ij
Diperoleh:
f(2, {3, 4}) = min{c23 + f(3, {4}), c24 + f(4, {3})}
= min{9 + 20, 10 + 15}
= min{29, 25} = 25
f(1, {2, 3, 4}) = min{c12 + f(2, {3, 4}), c13 + f(3, {2, 4}),
c14 + f(4, {2, 3})}
= min{10 + 25, 15 + 25, 20 + 23}
= min{35, 40, 43} = 35
9
Konstruksi Solusi
• Misalkan J(i, S) adalah nilai yang meminimumkan untuk mencapai simpul akhir.
Maka, J(1, {2, 3, 4}) = 2. Jadi, tur mulai dari simpul 1 selanjutnya ke simpul 2.
f(1, {2, 3, 4}) = min{c12 + f(2, {3, 4}), c13 + f(3, {2, 4}),
c14 + f(4, {2, 3})}
= min{10 + 25, 15 + 25, 20 + 23}
= min{35, 40, 43} = 35
• Simpul berikutnya dapat diperoleh dari f(2, {3, 4}), yang mana J(2, {3, 4}) = 4. Jadi,
simpul berikutnya adalah simpul 4.
f(2, {3, 4}) = min{c23 + f(3, {4}), c24 + f(4, {3})}
= min{9 + 20, 10 + 15}
= min{29, 25} = 25
• Simpul terakhir dapat diperoleh dari f(4, {3}), yang mana J(4, {3}) = 3.
f(4, {3}) = min{c43 + f(3, )} = min{9 + 6} = min{15} = 15
10
SELAMAT BELAJAR
1 pesan baru https://v-class.gunadarma.ac.id/mod/quiz/review.php?attempt=5017235&cmid=789640
Dashboard / My courses / PTA 2021/2022 | 3IA03 | Peranc. & Analisis Algoritma */** | DIMAS NUGEROHO / Soal UTS Pilihan Ganda
/ Soal UTS Pilihan Ganda
Question 1
Correct
Select one:
a. Pesan atau ucapan ekspresi yang terdiri dari order sekuens dari simbol, atau makna yang dapat di tafsirkan dari pesan atau
kumpulan pesan Correct
c. Urutan langkah-langkah untuk memecahkan masalah yang disusun secara sistematis dan logis
d. Algoritma dibutuhkan untuk memerintahkan komputer mengambil langkah-langkah tertentu dalam menyelesaikan
masalah
The correct answer is: Pesan atau ucapan ekspresi yang terdiri dari order sekuens dari simbol, atau makna yang dapat di tafsirkan
dari pesan atau kumpulan pesan
Question 2
Correct
Select one:
a. Notasi algoritma dapat diterjemahkan ke dalam berbagai bahasa pemrograman
b. Pembuatan atau penulisan algoritma tidak tergantung pada bahasa pemrograman manapun
c. Pembuatan atau penulisan algoritma tergantung pada bahasa pemrograman manapun Correct
d. Apapun bahasa pemrogramannya, output yang akan dikeluarkan sama karena algoritmanya
The correct answer is: Pembuatan atau penulisan algoritma tergantung pada bahasa pemrograman manapun
1
Online
Question 3
Correct
Select one:
a. Algoritma dengan struktur bahasa Indonesia, Enkrip, dan Flowchart
The correct answer is: Algoritma dengan struktur bahasa Indonesia, Pseudocode, dan Flowchart
Question 4
Correct
Penggambaran secara grafik dari langkah-langkah dan urutan-urutan prosedur dari suatu program yaitu
Select one:
a. Data
b. Algoritma
c. Flowchart Correct
d. Sistem
Question 5
Correct
Mengapa harus menggunakan Flowchart, maka terdapat pengungkapan yang jelas dalam model atau chart, maka para pembaca
dapat dengan mudah melihat permasalahan atau memfokuskan perhatian pada area-area tertentu sistem informasi. Pernyataan
berikut termasuk bentuk fungsi flowchart..?
Select one:
a. Communication
b. Simbol Flow
c. Analisis Correct
d. Relationship
Question 6
Correct
Simbol - simbol yang dipakai dalam flowchart dibagi menjadi 3 kelompok yaitu kecuali
Select one:
a. Direction Symbols Correct
b. Processing symbols
Question 7
Correct
Select one:
a. Menyatakan pemulaan atau akhir suatu program
b. Menyatakan penyediaan tempat penyimpanan suatu pengolahan untuk memberikan harga awal Correct
c. Menunjukan suatu kondisi tertentu yang akan menghasilkan dua kemungkinan jawaban
The correct answer is: Menyatakan penyediaan tempat penyimpanan suatu pengolahan untuk memberikan harga awal
Question 8
Correct
Select one:
a. Menyatakan input berasal dari disk atau output yang disimpan ke disk
c. Menyatakan penyediaan tempat penyimpanan suatu pengolahan untuk memberikan harga awal
d. Menyatakan input berasal dari kartu atau output yang ditulis ke kartu Correct
The correct answer is: Menyatakan input berasal dari kartu atau output yang ditulis ke kartu
Question 9
Correct
Algoritma yang mempunyai sifat straight dan lurus. Algoritma yang sangat kompleks, karena untuk dapat menyelesaikan masalah
dengan teknik straight forward dibutuhkan masukan dan juga pertimbangan secara logis, sehingga dapat diperoleh sebuah
keputusan pemecahan masalah yang langsung mengacu atau menuju kepada hasil yang diinginkan. Pernyataan tersebut
menggambarkan algoritma ..?
Select one:
a. Greedy
b. DFS
d. BFS
Question 10
Correct
Algoritma yang mempunyai pemilihan salah satu pemecahaan masalah terbaik, algoritma ini juga langsung melakukan
pemecahan masalah saat itu juga tanpa mempertimbangkan konsekuensi dari pemecahaan masalah yang dimaksud. Prinsip
utamanya lakukan selagi bisa atau lakukan apa yang kamu bisa sekarang. Penyataan tersebut menggambarkan algoritma..?
Select one:
a. Greedy Correct
b. BFS
c. Brute Force
d. DFS
Question 11
Correct
Select one:
a. Brute Force
b. DFS
c. Greedy Correct
d. BFS
Question 12
Correct
Select one:
a. DFS
b. BFS
c. Brute Force
Question 13
Correct
Select one:
a. Mengambil kebawah dari pahon pencarian
Question 14
Correct
di mana n adalah ukuran data. Notasi tersebut menunjukkan bahwa waktu yang diperlukan untuk transfer data akan bertambah
secara linear mengikuti besar ukuran data. Peryataan diatas bentuk dari transfer …
Select one:
a. Transfer Digital
c. Transfer Data
d. Transfer Fisik
Question 15
Correct
Select one:
a. Jawaban A, B dan C Salah
b. A,B,G,E,D,F,C
c. A,B,G,D,E,F,C Correct
d. A,B,G,C,E,F,D
Question 16
Correct
Select one:
a. A,B,E,G,F,C,D
b. A,B,G,C,E,F,D
c. A,B,G,C,E,F,D
d. A,B,G,D,E,F,C
Question 17
Correct
Select one:
a. A,B,C,E,F,D,G Correct
b. A,B,G,D,E,F,C
c. A,B,E,G,F,C,D
d. A,B,G,C,E,F,D
Question 18
Correct
Select one:
a. A,B,G,E,D,F,C
c. A,B,G,C,E,F,D
d. A,B,C,E,D,F,G Correct
Question 19
Correct
di mana 1 adalah suatu konstanta. Nilai konstan dalam notasi tersebut menunjukkan bahwa ukuran data tidak memengaruhi
waktu transfer data. Artinya, data akan selalu sampai dalam rentang waktu 3 - 5 jam, tidak peduli seberapa besar data yang
dikirimkan
Select one:
a. Transfer Fisik Correct
b. Transfer Data
c. Transfer Digital
Question 20
Correct
sebuah metrik yang digunakan untuk mengukur kompleksitas suatu algoritma. Kompleksitas dalam konteks ini berkaitan dengan
efisiensi kode. Semakin rendah kompleksitasnya, semakin efisien pula kode tersebut
Select one:
a. DFS
b. BFS
d. BIG O Correct
Question 21
Correct
Algoritma yang berbasis pada DFS untuk mencari solusi persoalan secara lebih mangkus
Select one:
a. BFS
b. DFS
c. BIG O
Question 22
Correct
Select one:
a. Solusi Persoalan
b. Pembatas
d. Pembangkit Nilai
Question 23
Correct
Pada algoritma runut balik terdapat ruang solusi jika knapsack 0/1 untuk N=3 maka bentuk ruang solusi yang ada adalah
Select one:
a. {(0, 0, 0), (0, 1, 0), (0, 0, 1), (1, 0, 0), (1, 1, 0), (1, 0, 1), (0, 1, 1), (1, 1, 1)} Correct
b. {(0, 0, 0), (0, 1, 0), (0, 0, 1), (1, 0, 0), (1, 1, 0), (1, 1, 1) , (1, 0, 1), (0, 1, 1)}
c. {(0, 0, 0), (0, 1, 0), (0, 0, 1), (1, 0, 0) , (0, 1, 1), (1, 1, 0), (1, 0, 1), (1, 1, 1)}
d. {(0, 0, 0), (0, 0, 1), (0, 1, 0), (1, 0, 0), (1, 1, 0), (1, 0, 1), (0, 1, 1), (1, 1, 1)}
The correct answer is: {(0, 0, 0), (0, 1, 0), (0, 0, 1), (1, 0, 0), (1, 1, 0), (1, 0, 1), (0, 1, 1), (1, 1, 1)}
Question 24
Correct
Simpul hidup yang sedang diperluas dalam metode runut balik yaitu
Select one:
a. Simpul Dead
b. Simpul E
Soal untuk NO 25 - 28
Pohon dinamis yang dibentuk selama pencarian untuk persoalan Knapsack 0/1 dengan n = 3,
M = 6, w = (2, 4, 8) dan p = (50, 35, 20)
c. Simpul C
d. Simpul Hidup
Question 25
Correct
Soal untuk NO 25 - 28
"Pohon dinamis yang dibentuk selama pencarian untuk persoalan Knapsack 0/1 dengan n = 3,
M = 6, w = (2, 4, 8) dan p = (50, 35, 20)"
Select one:
a. 1
b. 2
c. 4 Correct
d. 3
Question 26
Correct
Select one:
a. (0,0,1)
b. (0,1,1)
c. (1,1,1)
d. (1,1,0) Correct
Question 27
Correct
Select one:
a. 85 Correct
b. 90
c. 80
d. 50
Question 28
Correct
Select one:
a. 85
b. 80
c. 0 Correct
d. 50
Question 29
Correct
Membagi masalah menjadi beberapa masalah yang memiliki kemiripan dengan masalah semula namun berukuran lebih kecil
(idealnya berukuran hampir sama) disebut
Select one:
a. Combine
b. Conquer
d. Divide Correct
Question 30
Correct
Select one:
a. Combine
b. Divide
d. Conquer Correct
Question 31
Correct
mengabungkan solusi masing-masing upa-masalah sehingga membentuk solusi masalah semula disebut
Select one:
a. Divide & Conquer
b. Combine
Soal untuk NO 32 - 35
Table A
4 20 18 10 2 6 8 12 14 16
Bentuk Diatas masih dalam kategori Divide dan Conquer yang belum dilakukan yaitu dalam melakukan merge sort
c. Divide
d. Conquer
Question 32
Correct
"Bentuk Diatas masih dalam kategori Divide dan Conquer yang belum dilakukan yaitu dalam melakukan merge sort"
Tahap 1 posisi dalam melakukan merge sort, tentukan isian yang harus ada pada table berikut
Select one:
a. 4,20,18,2,6,10,8,12,14,16
b. 4,20,18,2,10,6,8,12,14,16 Correct
c. 4,20,18,2,10,6,8,12,16,14
d. 4,18,20,2,10,6,8,12,14,16
Question 33
Correct
Tahap 2 posisi dalam melakukan merge sort, tentukan isian yang harus ada pada table berikut
Select one:
a. 4,20,18,2,6,10,8,12,14,16
b. 4,20,2,10,18,6,8,12,14,16 Correct
c. 4,18,20,2,10,6,8,12,14,16
d. 4,20,18,2,10,6,8,12,16,14
Question 34
Correct
Tahap 3 posisi dalam melakukan merge sort, tentukan isian yang harus ada pada table berikut
Select one:
a. 2,4,10,18 ,6, 20,8,12,14,16
b. 2,4,18,10,20,6,8,12,14,16
c. 2,4,10,18,20,6,8,12,14,16 Correct
d. 2,4,10,18,20,8,6,12,14,16
Question 35
Correct
Tahap terakhir posisi dalam melakukan merge sort, tentukan isian yang harus ada pada table berikut
Select one:
a. 2,4,6,8,10,14,12,16,18,20
b. 2,4,6,8,10,12,14,16,18,20 Correct
c. 2,4,6,8,10,12,14,18,16,20
d. 2,4,6,8,10,12,16,14,18,20
Jump to...