Algoritma
Pendahuluan
Penilaian
UTS
Presentase UTS dan Harian : 40 60, 35 65, 30 70
HARIAN
Tugas (Kelompok, individu, vclass,dll)
Kuis
Absensi :
o Mengikuti Video conference
o Atau jika Vclass, wajib melakukan 3 aktivitas :
Mendownload materi, Mengerjakan tugas, dan
Mengerjakan forum diskusi
Keaktifan (point)
TEORI ALGORITMA
Langkah :
1. Menulis surat
2. Surat dimasukkan ke dalam amplop tertutup
3. Amplop dikasih alamat penerima dan pengirim
4. Amplop ditempeli perangko secukupnya.
5. Pergi ke Kantor Pos terdekat untuk mengirimkannya
Studi Tentang Algoritma
1. Teknik tulisan;
Natural Language
Pseudocode
2. Gambar;
Metode structure chart,
Hierarchy plus input-process-output
Flowchart
Natural Languange
Sifat: Umum
Tidak menggunakan simbol atau sintaks dari suatu
bahasa pemrograman.
Notasi algoritmik :
if Syarat then
Aksi {True}
endif {False}
Struktur Pemilihan
Notasi Algoritma,
IF syarat THEN
aksi-1 {true}
ELSE
aksi-2 {false}
ENDIF
Struktur Pemilihan
CONTOH :
Menentukan bilangan terbesar diantara 3 bilangan:
For-Next
While - do
Bentuk umum :
While {kondisi} do
…………..
instruksi-instruksi
…………..
Endwhile
Struktur Pengulangan
Repeat - Until
Bentuk Umum ;
Repeat
………………..
Instruksi
………………...
Until (kondisi)
Struktur Pengulangan
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
Konsep Dasar Pemrograman
• Program merupakan kumpulan instruksi yang dibuat oleh programmer atau suatu
• Bahasa Pemrograman merupakan prosedur atau tata cara penulisan program. Pada
bahasa pemrograman terdapat dua factor penting, yaitu sintaks dan semantik.
• Fungsi Bahasa Pemrograman adalah sebagai media untuk alat komunikasi antara
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
Contoh-contoh masalah
1. Mencari Nilai Minimum dan
Maksimum (MinMaks)
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)
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
maks = 35
• 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
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 = 1 min = 35 min = 2
maks = 12 maks = 23 maks = 21 maks =35 maks = 24
4 12 23 9 21 1 35 2 24
min = 4 min = 1 min = 2
maks = 23 maks = 21 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
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
maksmaks2
endif
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)
• MinMaks1 secara brute force :
T(n) = 2n – 2
p3 p6
p8
p1
p7
x
Jarak dua buah titik p1 = (x1, y1) dan p2 = (x2, y2):
d ( x1 x2 ) ( y1 y2 )
2 2
Penyelesaian dengan Algoritma Brute
Force
y
p5
p2
p4
p3 p6
p8
p1
p7
PLeft PRight x
L
3. CONQUER: Secara rekursif, terapkan algoritma D-
and-C pada masing-masing bagian.
Deklarasi:
DeltaLeft, DeltaRight : real
Algoritma:
if n = 2 then
delta jarak kedua titik dengan rumus Euclidean
else
P-Left {p1, p2 ,..., pn/2 }
P-Right {pn/2+1, pn/2+2 ,..., pn }
FindClosestPair2(P-Left, n/2, DeltaLeft)
FindClosestPair2(P-Right, n/2, DeltaRight)
delta minimum(DeltaLeft, DeltaRight)
{--***********************************************************--}
Tentukan apakah terdapat titik pl di P-Left dan pr di P-Right
Dengan jarak(pl, pr) < delta. Jika ada, set delta dengan jarak
terkecil tersebut.
{--***********************************************************--}
endif
Jika terdapat pasangan titik pl and pr yang
jaraknya lebih kecil dari delta, maka
kasusnya adalah:
y
x
L
Oleh karena itu, implementasi
tahap COMBINE sbb:
for i1 to s do
for ji+1 to s do
exit when (|qi.x – qj.x | > Delta or |qi.y – qj.y | > Delta
if jarak (qi, qj) < Delta then
Delta jarak(qi, qj) { dihitung dengan rumus Euclidean }
endif
endfor
endfor
Kompleksitas algoritma:
2T (n / 2) cn , n 2
T (n)
a ,n 2
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
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
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
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
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
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
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
Perbaikan:
Algoritma:
if i < j then { Ukuran(A)> 1}
ki
Insertion(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
MERGE: 4 12 3 9 1 21 5 2
3 4 12 9 1 21 5 2
3 4 9 12 1 21 5 2
1 3 4 9 12 21 5 2
1 3 4 9 12 21 5 2
1 3 4 5 9 12 21 2
1 2 3 4 5 9 12 21
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)
(c) Quick Sort
Sort: A1 1 2 3 4 A2 5 9 12 21
Combine: A 1 2 3 4 5 9 12 21
Teknik mem-partisi tabel:
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
(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)
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
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)
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
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] }
temp A[p]
A[p] A[q]
A[q] temp
n/2 n/2
1 n–1
1 n–2
1 n–3
...
1 1
Kompleksitas waktu pengurutan:
a ,n 1
T (n)
T (n 1) cn , n 1
Algoritma:
if i < j then { Ukuran(A) > 1 }
Bagi(A, i, j)
SelectionSort(A, i+1, j)
endif
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
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
Kompleksitas waktu algoritma:
a ,n 1
T (n)
T (n 1) cn , n 1
Algoritma:
hasil1
for k1 to n do
hasilhasil * a
endfor
return hasil
T(n) = n = O(n)
Penyelesaian dengan Divide and Conquer
Algoritma menghitung an:
1. Untuk kasus n = 0, maka an = 1.
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
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
xExp2(a, n div 2)
if odd(n) then { fungsi odd memberikan true jika n ganjil }
return x * x * a
else
return x * x
endif
endif
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 )
Persamaan terakhir diselesaikan dengan membuat n/2k =1,
Perkalian matriks: C = A × B
n
Elemen-elemen hasilnya: cij ai1b1 j ai 2 b2 j ain bnj aik bkj
k 1
Penyelesaian dengan Algoritma Brute Force
Deklarasi
i, j, k : integer
C : Matriks
Algoritma:
for i1 to n do
for j1 to n do
C i,j0 { inisialisasi penjumlah }
for k 1 to n do
C i,j C i,j + A i,k * Bk,j
endfor
endfor
endfor
return C
3 4 816
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
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
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
Kompleksitas waktu perkalian matriks seluruhnya adalah:
a ,n 1
T (n)
8T ( n / 2 ) cn 2
,n 1
T(n) = O(n3)
maka,
C11 = M1 + M2 – M4 + M6
C12 = M4 + M5
C21 = M6 + M7
C22 = M2 – M3 + M5 – M7
Kompleksitas waktu algoritma perkalian matriks Strassen:
a ,n 1
T (n)
7T ( n / 2 ) cn 2
,n 1
log 7 2.81
T(n) = O(n ) = O(n )
6. 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)
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
Contoh,
X Y = (a 10s + b) (c 10s + d)
= ac 102s + ad 10s + bc 10s + bd
= ac 102s + (ad + bc) 10s + bd
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
Penyelesaian:
T(n) = O(n2).
Misalkan
maka,
ac
10 2s
{( a b )( c d ) ac
bd } 10 s
bd
p
p q q
r
function Kali3(input X, Y : LongInteger, n : integer) LongInteger
{ Mengalikan X dan Y, masing-masing panjangnya n digit dengan algoritma
Divide and Conquer.
Masukan: X dan Y
Keluaran: hasil perkalian X dan Y
}
Deklarasi
a, b, c, d : LongInteger
s : integer
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
Kompleksitas waktu algoritmanya:
a ,n 1
T (n)
3T (n / 2) cn , n 1
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
Prinsip Optimalitas
• Pada program dinamis, rangkaian
keputusan yang optimal dibuat dengan
menggunakan Prinsip Optimalitas.
9
6
7 10 12
1
4
8
11
5
3. Hasil dari keputusan yang diambil pada setiap
tahap ditransformasikan dari status yang
bersangkutan ke status berikutnya pada tahap
berikutnya.
3 9 4
4
3 1
4
3
4 7
5
Penyelesaian dengan Program Dinamis
Mundur
Keterangan:
a. xk : peubah keputusan pada tahap k (k = 1, 2, 3).
b. c : bobot (cost) sisi dari s ke xk
sxk
Solusi Optimum
s f4(s) x4*
8 3 10
9 4 10
x1 x2 x3 x4 Panjang Lintasan
Terpendek
3 5 8 10 11
1
5 8 10 11
4
6 9 10 11
x3
x2
x1
Misalkan,
Rk(pk) = keuntungan dari alternatif pk pada
tahap k
f ( x ) max {R1(p1)}
1 1 feasible
(basis)
proposal_ p1
f ( x ) max
k k feasible
{Rk(pk) + fk-1(xk-1) } (rekurens)
proposal_ pk
k = 2, 3
Catatan:
1. xk – 1 = xk – ck(pk)
f ( x ) max {R1(p1)}
1 1 c1 ( p1 ) x1
(basis)
k = 2, 3
Tahap 1
f ( x ) max {R1(p1)}
1 1 c1 ( p1 ) x1
p1 1 , 2 , 3
1
2 (4 – 2 = 2) 3 (3, 2, 2)
2 (5 – 1 = 4)
3 (4 – 3 = 1) 3 (2, 3, 2)
Integer (1/0) Knapsack
Pada persoalan ini,
1. Tahap (k) adalah proses memasukkan barang ke
dalam karung (knapsack) (ada 3 tahap).
2. Status (y) menyatakan kapasitas muat karung yang
tersisa setelah memasukkan barang pada tahap
sebelumnya.
f0(y) = 0, y = 0, 1, 2, …, M (basis)
fk(y) = -, y < 0 (basis)
M=5
Barang ke-i wi pi
1 2 65
2 3 80
3 1 30
Tahap 1:
f1(y) = max{f0(y), p1 + f0(y – w1)}
= max{f0(y), 65 + f0(y – 2)}
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)
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)
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)
f (i, ) ci ,1
, 2in (basis)
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;
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(3, {2}) = min{c32 + f(2, )} = min{13 + 5} = min{18} = 18
f(4, {2}) = min{c42 + f(2, )} = min{8 + 5} = min{13} = 13
f(2, {4}) = min{c24 + f(4, )} = min{10 + 8} = min{18} = 18
f(3, {4}) = min{c34 + f(4, )} = min{12 + 8} = min{20} = 20
f(4, {3}) = min{c43 + f(3, )} = min{9 + 6} = min{15} = 15
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
1
Pendahuluan
• Sebuah masalah dapat mempunyai banyak algoritma
penyelesaian. Contoh: masalah pengurutan (sort),
ada puluhan algoritma pengurutan
2
• Algoritma yang mangkus ialah algoritma yang
meminimumkan kebutuhan waktu dan ruang.
3
• Mengapa kita memerlukan algoritma yang
mangkus? Lihat grafik di bawah ini.
10-4 x 2n
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
4
Model Perhitungan Kebutuhan Waktu
• Menghitung kebutuhan waktu algoritma dengan
mengukur waktu sesungguhnya (dalam satuan detik)
ketika algoritma dieksekusi oleh komputer bukan
cara yang tepat.
• Alasan:
1. Setiap komputer dengan arsitektur berbeda mempunyai
bahasa mesin yang berbeda waktu setiap operasi
antara satu komputer dengan komputer lain tidak sama.
5
• Model abstrak pengukuran waktu/ruang
harus independen dari pertimbangan mesin
dan compiler apapun.
7
• Ukuran masukan (n): jumlah data yang diproses oleh
sebuah algoritma.
9
Contoh operasi khas di dalam algoritma
• Algoritma pencarian di dalam larik
Operasi khas: perbandingan elemen larik
• Algoritma pengurutan
Operasi khas: perbandingan elemen, pertukaran
elemen
10
• Contoh 1. Tinjau algoritma menghitung rerata
sebuah larik (array).
sum 0
for i 1 to n do
sum sum + a[i]
endfor
rata_rata sum/n
11
Contoh 2. Algoritma untuk mencari elemen terbesar di dalam
sebuah larik (array) yang berukuran n elemen.
Algoritma
maksa1
k2
while k n do
if ak > maks then
maksak
endif
ii+1
endwhile
{ k > n }
13
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
T(n)=1
O(log n): Kompleksitas
Logaritmik
• Algoritma dengan kompleksitas logaritmik merupakan
algoritma yang menyelesaikan masalah dengan
membagi-bagi masalah tersebut menjadi beberapa
bagian, sehingga masalah dapat diselesaikan tanpa
harus melakukan komputasi atau pengecekan terhadap
seluruh masukan
O(n): Kompleksitas Linear
• Algoritma dengan kompleksitas linear bertumbuh selaras
dengan pertumbuhan ukuran data.
• Maka algoritma ini memerlukan 10 langkah untuk
menyelesaikan kalkulasi data berukuran 10, dan ia akan
memerlukan 100 langkah untuk data berukuran 100
O(n log n)
Algoritma dgn kompleksitas (n log
n) memiliki cara perhitungan yang sangat
mirip dengan algoritma (log n). Pada
dasarnya algoritma kelas ini merupakan
algoritma log n yang dijalankan
sebanyak n kali.
O(nm): Kompleksitas Polinomial
• Algoritma dengan kompleksitas polinomial merupakan
salah satu kelas algoritma yang tidak efisien, karena
memerlukan jumlah langkah penyelesaian yang jauh lebih
besar daripada jumlah data
Perbandingan Pertumbuhan Seluruh Kompleksitas
n
n! 2
n2
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.
Masalah Jalur
Terpendek
Teori Optimasi
Rute Terpendek
Jelas.. Masalah rute terpendek berkaitan
dengan penentuan busur-busur yang
hubungkan dalam sebuah jaringan yang
secara bersama-sama membentuk jarak
terdekat diantara sumber dan tujuan.
Contoh 1 :
Penggantian Peralatan
Sebuah perusahaan penyewaan mobil sedang
mengembangkan sebuah rencana penggantian
armadanya untuk 5 tahun (1996 – 2000). Tiap
awal tahun, keputusan harus diambil, apakah
suatu mobil harus tetap dioperasikan/diganti.
Sebuah mobil harus dioperasikan paling tidak 1
tahun dan harus diganti setelah 3 tahun.
Biaya penggantian adalah sbb :
Biaya ($)
1 2 3
1996 4000 5400 9800
1997 4300 6200 8750
1998 4800 7100 -
1999 4900 - -
• Dinyatakan sebagai
B(x1, x2, …, xk)
1
x1 =1 x1 =0
2 9
x2 =1 x2 =0 x2 =1 x2 =0
3 6 10 13
x3 =1 x3 =0 x3 =1 x3 =0 x3 =1 x3 =0 x3 =1 x3 =0
4 5 7 8 11 12 14 15
Prinsip Pencarian Solusi dengan
Metode Runut-balik
• Fungsi pembatas: wi xi M
i 1
Pohon dinamis yang dibentuk selama pencarian
untuk persoalan Knapsack 0/1 dengan n = 3,
M = 30, w = (35, 32, 25) dan p = (40, 25, 50)
1
x1 =1 x1 =0
2 9
B
x2 =1 x2 =0
10 13
B
x3 =1 x3 =0
14 15
Penomoran ulang simpul-simpul sesuai urutan
pembangkitannya
1
x1 =1 x1 =0
2 3
B
x2 =1 x2 =0
4 5
B
x3 =1 x3 =0
6 7
Algoritma:
k1
while k > 0 do
if (x[k] belum dicoba sedemikian sehingga x[k]T(k)) and
(B(x[1], x[2], ... ,x[k])= true)
then
if (x[1],x[2],...,x[k]) adalah lintasan dari akar ke daun
then
CetakSolusi(x)
endif
kk+1 {indeks anggota tupple berikutnya}
else {x[1], x[2], …, x[k] tidak mengarah ke simpul solusi }
kk-1 {runut-balik ke anggota tupple sebelumnya}
endif
endwhile
{ k = 0 }
• Setiap simpul dalam pohon ruang status
berasosiasi dengan sebuah pemanggilan
rekursif.
Q Q
Q Q
Q Q
Q Q
Q Q
Q Q
Q Q
Q Q
Penyelesaian dengan Algoritma Brute-Force:
a) Brute Force 1
• Mencoba semua kemungkinan solusi
penempatan delapan buah ratu pada
petak-petak papan catur.
2 18 34 50
3 8 13 19 24 29 35 40 45 51 56 61
x3=2 x3=3 x3=3 x3=4 x3=2 x3=4 x3=1 x3=2 x3=1 x3=3
x3=3 x3=4 x3=2 x3=4 x3=3 x3=4 x3=1 x3=3 x3=2 x3=3
x3=1 x3=4 x3=1 x3=2
4 6 9 11 14 16 20 22 25 27 30 32 36 38 41 43 46 48 52 54 57 59 62 64
5 7 10 12 15 17 21 23 26 28 31 33 37 39 42 44 47 49 53 55 58 60 63 65
Contoh solusi runut-balik persoalan 4-Ratu:
1 1 1 1
2 2 2
1 1 1 1
2 2 2
3 3
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
B
Algoritma Runut-balik untuk Persoalan 8-Ratu
(a) Versi iteratif
Deklarasi
k : integer
Algoritma:
k1 {mulai pada baris catur ke-1}
x[1]0 {inisialisasi kolom dengan 0}
while k > 0 do
x[k]x[k]+1 {pindahkan ratu ke kolom berikutnya}
while (x[k] N) and (not TEMPAT(k)) do
{periksa apakah ratu dapat ditempatkan pada kolom x[k]}
x[k]:=x[k] + 1
endwhile
{x[k] > n or TEMPAT(k) }
Deklarasi
i : integer
stop : boolean
Algoritma:
kedudukantrue { asumsikan ratu dapat ditempatkan pada kolom
x[k] }
return kedudukan
(b) Versi rekursif
Algoritma:
• Inisialisasi x[1], x[2], …, x[N] dengan 0
for iN to n do
x[i]0
endfor
Deklarasi
stop : boolean
Algoritma:
stopfalse
while not stop do
x[k]x[k]+1 { pindahkan ratu ke kolom berikutnya }
while (x[k] n) and (not TEMPAT(k)) do
{ periksa apakah ratu dapat ditempatkan pada kolom x[k] }
x[k]x[k]+1
endwhile
{ x[k] > n or TEMPAT(k) }
Deklarasi
arah : integer { up = 1, down, 2, left = 3, right = 4 }
Algoritma:
if solusi sudah ditemukan then
return true
else
for tiap arah gerakan (up, down, left, right) do
move(M, arah) { pindah satu langkah (satu sel) sesuai arah
tersebut }
if SolveMaze(M) then
return true
else
unmove(M, arah) { backtrack }
endif
endfor
return false { semua arah sudah dicoba, tetapi tetap buntu,
maka
kesimpulannya: tidak ada solusi }
endif
in out
4 5
4 5 4 5
2
2 2
1
1 1
6 6 6
3 3 3
Tinjau untuk n = 3 dan m = 3. 1
3 2
x1=1 x1=3
x1=2
2 15 28
3 7 11 16 20 24 29 33 37
x3=3 x3=3
x3=1 x2=3 x3=1 x3=1 x3=3 x3=1 x3=3 x3=1 x3=3 x3=1 x3=3 x3=1 x3=3 x3=1 x3=3
x3=1
x3=2 x3=2 x3=2 x2=2 x2=2 x3=2 x3=2 x3=2
x3=2
4 5 6 8 9 10 12 13 14 17 18 19 21 22 23 25 26 27 30 31 32 34 35 36 38 39 40
Misalkan warna dinyatakan dengan angka 1, 2, …, m dan
solusi dinyatakan sebagai vektor X dengan n-tuple:
X = (x1 , x2 , ..., xn ) , xi { 1, 2, …, m}
1
x2=1 x2=3
x2=2
3 7 11
B
x3=3
x3=1 x3=1 x3=3
x3=2 x3=2
8 9 10 12 13 14
B B B B
Algoritma Runut-balik Untuk Pewarnaan Graf
• Masukan:
1. Matriks ketetanggan GRAF[1..n, 1..n]
GRAF[i,j] = true jika ada sisi (i,j)
GRAF[i,j] = false jika tidak ada sisi (i,j)
2. Warna
Dinyatakan dengan integer 1, 2, ...,m
• Keluaran:
1. Tabel X[1..n], yang dalam hal ini, x[i] adalah
warna untuk simpul i.
• Algoritma:
1. Inisialisasi x[1..n] dengan 0
for i1 to n do
x[i]0
endfor
Algoritma:
stopfalse
while not stop do
{tentukan semua nilai untuk x[k] }
WarnaBerikutnya(k) {isi x[k] dengan sebuah warna}
if x[k] = 0 then {tidak ada warna lagi, habis}
stoptrue
else
if k=n then {apakah seluruh simpul sudah diwarnai?}
CetakSolusi(X,n)
else
PewarnaanGraf(k+1) {warnai simpul berikutnya}
endif
endif
endwhile
procedure WarnaBerikutnya(input k:integer)
{ Menentukan warna untuk simpul k
Masukan: k
Keluaran: nilai untuk x[k]
K.Awal: x[1], x[2], ... , x[k-1] telah diisi dengan warna dalam
himpunan {1,2, …, m} sehingga setiap simpul bertetangga mempunyai
warna berbeda-beda.
K.Akhir: x[k] berisi dengan warna berikutnya apabila berbeda dengan
warna simpul-simpul tetangganya. Jika tidak ada warna yang dapat
digunakan, x[k] diisi dengan nol
}
Deklarasi
stop, keluar : boolean
j : integer
Algoritma:
stopfalse
while not stop do
x[k](x[k]+1) mod (m+1) {warna berikutnya}
if x[k]=0 then {semua warna telah terpakai}
stoptrue
else
{periksa warna simpul-simpul tetangganya}
j1
keluarfalse
while (jn) and (not keluar) do
endif
endwhile
Kompleksitas Waktu algoritma PewarnaanGraf
i 0
n n(m 1)
n 1
m n O (nm )
i n
i 1
(m 1)
Algoritma Branch and
Bound
1
Algoritma Branch and Bound
2
Untuk mempercepat pencarian ke simpul
solusi, maka setiap simpul diberi sebuah
nilai ongkos (cost).
3
Nilai ongkos pada setiap simpul i menyatakan
taksiran ongkos termurah lintasan dari simpul i ke
simpul solusi (goal node):
4
Tinjau kembali persoalan 4-ratu yang diselesaikan
dengan skema BFS (murni).
1
2 3 4 5
6 7 8 9 10 11 12 13 14 15 16 17
B B B B B
x3=2 x3=3 x3=2 x3=4 x3=1 x3=3
x3=2 x3=4 x3=1 x3=3 x3=2 x3=3
18 19 20 21 22 23 24 25 26 27 28 29
B B B B B B B B B
x4=3
30
5
Solusi pertama dicapai pada simpul 30, yaitu
X = (2, 4, 1, 3). Dengan skema BFS murni /
FIFO, kita harus memperluas dulu simpul 12,
simpul 15, dan simpul 16 sebelum
memperluas simpul 22 yang melahirkan
simpul solusi, yaitu simpul 30.
6
Setiap simpul hidup diasosiasikan dengan
sebuah ongkos yang menyatakan nilai batas
(bound).
7
Untuk setiap simpul X, nilai batas ini dapat
berupa [HOR78]:
8
1
4
x1=1 x1=2 x1=3 x1=4
2 3 4 5
3
3
B x2=1 x2=4 B
x1=1
9 10 11
2
B B
x3=1 x3=3
22 23
1
x4=3 B
30
simpul solusi
9
Pemberian nilai batas seperti pada persoalan
N-Ratu di atas adalah nilai batas yang ideal,
karena letak simpul solusi diketahui.
10
Fungsi heuristik untuk menghitung taksiran cost:
cˆ(i ) fˆ (i ) gˆ (i )
11
Algoritma B&B:
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 cˆ(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 cˆ( j ) , dan
masukkan semua anak-anak tersebut ke dalam Q.
6. Kembali ke langkah 2. 12
Permainan 15-Puzzle
1 3 4 15 1 2 3 4
2 5 12 5 6 7 8
7 6 11 14 9 10 11 12
8 9 10 13 13 14 15
13
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
14
13 14 15 12 13 14 15 13 14 15 13 14 15 12
Sebelum menelusuri ruang status untuk
mencapai susunan akhir, kita patut
menentukan apakah status tujuan dapat
dicapai atau tidak dari status awal.
15
1 3 4 15 1 2 3 4
2 5 12 5 6 7 8
7 6 11 14 9 10 11 12
8 9 10 13 13 14 15
KURANG(i ) X
i 1
bernilai genap.
16
Pada Gambar 7.2a mempunyai X = 0 dan
16
17
Algoritma B&B:
Nilai ongkos untuk simpul P: cˆ( P) f ( P) gˆ ( P)
18
Salah satu cara menghitung gˆ ( P) :
19
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
5 5 3 5
right down left
10 11 12
1 2 3 4 1 2 3 4 1 2 3 4
5 6 7 8 5 6 7 8 5 6 7 8
9 10 11 9 10 15 11 9 10 11
13 14 15 12 13 14 12 13 14 15 12
3 5 5
down
up
23
22
1 2 3 4 1 2 3 4
5 6 7 5 6 7 8
9 10 11 8 9 10 11 12
13 14 15 12 13 14 15
simpul
solusi 20
Persoalan Pedagang Keliling
(Travelling Salesperson Problem - TSP)
Misalkan
(i) G=(V,E) adalah graf lengkap TSP
(ii) V=n = jumlah simpul dalam graf G.
Simpul- simpul diberi nomor 1, 2, …, n.
(iii) cij = bobot sisi (i, j)
(iv) perjalanan (tur) berawal dan berakhir di simpul 1.
(v) S adalah ruang solusi, yang dalam hal ini
S = { (1, , 1) adalah permutasi (2, 3, ..., n) }
12
1 2 1
5 9
8
x1=2 x1=4
x1=3
4 3
15
2 3 4
5 6 7 8 9 10
11 12 13 14 15 16
22
Ongkos atau nilai batas untuk setiap simpul
dihitung dengan menggunakan matriks
ongkos-tereduksi (reduced cost matrix) dari
graf G.
20 30 10 11
15 16 4 2
3 5 2 4
19 6 18 3
16 4 7 16
24
Lakukan reduksi baris:
20 30 10 11 R 10 10 20 0 1
1
15 16 4 2 R 2 13 14 2 0
2
3 5 2 4 R 2 1 3 0 2
3
19 6 18 3 R 3 16 3 15 0
4
16 4 7 16 R 4 12 0 3 12
5
10 20 0 1 10 17 0 1
13 14 2 0 12 11 2 0
1 3 0 2 C 1 0 3 0 2 = A
1
16 3 15 0 C 3 15 3 12 0
3
12 0 3 12 11 0 0 12
cˆ ( root ) 25
1
25
26
Selanjutnya, misalkan A adalah matriks tereduksi untuk
simpul R.
27
(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;
28
Secara umum, persamaan fungsi pembatas adalah:
cˆ ( S ) cˆ ( R ) A(i , j ) r
1. Simpul 2; Lintasan: 1, 2
11 2 0
0 0 2 = B
15 12 0
11 0 12
30
2. Simpul 3; Lintasan: 1, 3
12 2 0 1 2 0
3 0 2 C 11 0 3 0 2 = B
1
15 3 0 4 3 0
11 0 12 0 0 12
31
3. Simpul 4; Lintasan: 1, 4
12 11 0
0 3 2 = B
3 12 0
11 0 0
32
4. Simpul 5; Lintasan: 1, 5
12 11 2 10 9 0
R 2
0 3 0 0 3 0 = B
2
R 3
15 3 12 12 0 9
4
0 0 12 0 0 12
33
Pohon ruang status yang terbentuk sampai saat ini adalah:
1
25
x 1=2 x1=5
x 1=3 x 1=4
2 3 4 5
35 53 25 31
34
5. Simpul 6; Lintasan: 1, 4, 2
11 0
0 2 = C
11 0
35
6. Simpul 7; Lintasan: 1, 4, 3
12 0 12 0 1 0
3 2 R3 2 1 0 C1 11 1 0 =C
11 0 11 0 0 0
36
7. Simpul 8; Lintasan: 1, 4, 5
12 11 1 0
0 3 2 R2 11 0 3 2 C
0 0 0 0
37
Pohon ruang status yang terbentuk sampai saat ini adalah:
1
25
x 1=2 x1=5
x 1=3 x 1=4
2 3 4 5
25
35 53 31
x 2=2 x 2=5
x2=3
6 7 8
28 50 36
38
8. Simpul 9; Lintasan: 1, 4, 2, 3
R 2
2 0 = D
3
R 11
5
11 0
39
9. Simpul 10; Lintasan: 1, 4, 2, 5
0 = D
0
40
Pohon ruang status yang terbentuk sampai saat ini adalah:
1
25
x 1=2 x1=5
x 1=3 x 1=4
2 3 4 5
25
35 53 31
x 2=2 x 2=5
x2=3
6 7 8
28
50 36
x3 =3 x3 =5
9 10
52 28
41
10. Simpul 11; Lintasan: 1, 4, 2, 5, 3
= E
42
Pohon ruang status yang terbentuk sampai saat ini adalah:
25
x 1=2 x1=5
x 1=3 x 1=4
2 3 4 5
25
35 53 31
x 2=2 x 2=5
x2=3
6 7 8
28
50 36
x3 =3 x3 =5
9 10
28
52
x4=3
11
28
43
1
25
x1=2 x1=5
x1=3 x1=4
2 3 4 5
25
35 53 31
B B x2=5 B
x2=2
x2=3
6 7 8
28
50 36
B B
x3=3 x3=5
9 10
28
52
B
x4=3
11
28
Amati bahwa :
n
c d
15
c d
15
M cost = bobot minimum tur lengkap
1/2 bobot sisi i1 + bobot sisi i2
Yang dalam hal ini, sisi i1 dan sisi i2 adalah sisi yang
bersisian dengan simpul i dengan bobot minimum.
c d
15
Solusi dinyatakan sebagai I = (a, i1, i2, i3, a) , yang
dalam hal ini i1, i2, dan i3 adalah simpul lainnya.
1
32
2 cost 1/2 [ (12+5) + (12+8) + (9+10) + (8+5) ]
i2 = b 34,5
1 32
i2 = b i2 = c i2 = d
2 3 4
34,5 32 32
2
i2 = b 5 cost ½ [ (10+5) + (9+8) + (10+9) + (5+8)] = 32
i3 = b
1 i2 = c 3
i3 = d
i2 = d 6 cost ½ [(10+5) + (9+8) + (10+15) + (15+5)] = 43,5
4
Pohon ruang status yang sudah terbentuk:
1 32
i2 = b i2 = c i2 = d
2 3 4
34,5 32 32
i3=b i3=d
5 6
32 43,5
Pohon ruang status yang terbentuk:
1 32
i2 = b i2 = c i2 = d
2 3 4
34,5 B 32 32
i3=b i3=d
5 6
32 B 43,5
i4=d
7
32
i2 = b i2 = c i2 = d
2 3 4
34,5 B 32 32
5 6 8 9
32 B 43,5 32 38 B
i4=d
7
32
i2 = b i2 = c i2 = d
2 3 4
34,5 B 32 32
5 6 8 9
32 B B 43,5 32 38 B
i4=d i4=c
7 10
32 32
n! = 1 × 2 × 3 × … × n , jika n > 0
=1 , jika n = 0
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
Adakah algoritma perkalian matriks yang lebih mangkus daripada brute force?
4. Menemukan semua faktor dari bilangan
bulat n selain dari 1 dan n itu sendiri.
Algoritma:
k1
ketemu false
for k2 to n - 1 do
if n mod k = 0 then
write(k)
endif
endfor
Algoritma:
maksa1
for k2 to n do
if ak > maks then
maksak
endif
endfor
Algoritma:
k1
while (k < n) and (ak x) do
k k + 1
endwhile
{ k = n or ak = x }
if ak = x then { x ditemukan }
idxk
else
idx 0 { x tidak ditemukan }
endif
Algoritma:
for i 1 to n - 1 do
for k n downto i + 1 do
if L[k] < L[k-1] then
{pertukarkan L[k] dengan L[k-1]}
temp L[k]
L[k] L[k-1]
L[k-1] temp
endif
endfor
endfor
Algoritma:
if x < 2 then { 1 bukan prima }
return false
else
if x = 2 then { 2 adalah prima, kasus khusus }
return true
else
yx
testtrue
while (test) and (y 2) do
if x mod y = 0 then
testfalse
else
yy - 1
endif
endwhile
{ not test or y < 2 }
return test
endif
endif
Algoritma:
p0
for in downto 0 do
pangkat1
for j1 to i do {hitung xi }
pangkatpangkat * x0
endfor
pp + ai * pangkat
endfor
return p
Algoritma:
pa0
pangkat1
for i1 to n do
pangkatpangkat * x0
pp + ai * pangkat
endfor
return p
Persoalan: Diberikan
a. teks (text), yaitu (long) string yang
panjangnya n karakter
b. pattern, yaitu string dengan panjang m
karakter (m < n) yang akan dicari di dalam
teks.
10010101001011110101010001
1 001011
2 001011
3 001011
4 001011
5 001011
6 001011
7 001011
8 001011
9 001011
procedure PencocokanString(input P : string, T : string,
n, m : integer,
output idx : integer)
{ Masukan: pattern P yang panjangnya m dan teks T yang
panjangnya n. Teks T direpresentasika sebagai string
(array of character)
Keluaran: lokasi awal kecocokan (idx)
}
Deklarasi
i : integer
ketemu : boolean
Algoritma:
i0
ketemufalse
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 }
p3 p6
p8
p1
p7
x
Jarak dua buah titik di bidang 2-D, p1 = (x1, y1)
dan p2 = (x2, y2) adalah (rumus Euclidean):
d (x x ) ( y y )
1 2
2
1 2
2
Algoritma:
dmin9999
for i1 to n-1 do
for ji+1 to n do
d((Pi.x-Pj.x)2 + ((Pi.y-Pj.y)2)
if d < dmin then { perbarui jarak terdekat }
dmind
P1Pi
P2Pj
endif
endfor
endfor
(n – 1)!
(4 – 1)! = 3! = 6
5 9 5 9
10 8 10 8
d 15 c d 15 c d c
Dengan demikian, untuk graf dengan n buah
simpul, kita hanya perlu mengevaluasi sirkuit
Hamilton sebanyak
(n – 1)!/2 buah.
n
Maksimasi F = p x i i
i 1
w x K
i 1
i i
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.
Algoritma:
S {} { inisialisasi S dengan kosong }
while (not SOLUSI(S)) and (C {} ) do
x SELEKSI(C) { pilih sebuah kandidat dari C}
C C - {x} { elemen himpunan kandidat berkurang satu }
if LAYAK(S {x}) then
S S {x}
endif
endwhile
{SOLUSI(S) or C = {} }
if SOLUSI(S) then
return S
else
write(’tidak ada solusi’)
endif
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).
Deklarasi
S : himpunan_koin
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
i 1
Deklarasi
S : himpunan_pelanggan
i : pelanggann
Algoritma
S {}
while (C {}) do
i pelanggan yang mempunyai t[i] terkecil
C C - {i}
S S {i}
endwhile
return S
• 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(‘Pelanggan ‘, i, ‘ dilayani!’)
endfor
• Algoritma greedy untuk penjadwalan pelanggan
akan selalu menghasilkan solusi optimum.
T= t
k 1 j 1
ij
n
Maksimasi F = p x i i
i 1
w x K
i 1
i i
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.
n
Maksimasi F = p x i i
i 1
w x K
i 1
i i
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
i 0
TotalBobot 0
MasihMuatUtuh true
while (i n) and (MasihMuatUtuh) do
{ tinjau objek ke-i }
i i + 1
if TotalBobot + C.w[i] K then
{ masukkan objek i ke dalam knapsack }
x[i] 1
TotalBobot TotalBobot + C.w[i]
else
MasihMuatUtuh false
x[i] (K – TotalBobot)/C.w[i]
endif
endwhile
{ i > n or not MasihMuatUtuh }
return x
Persoalan:
- Ada n buah job yang akan dikerjakan oleh
sebuah mesin;
- tiap job diproses oleh mesin selama 1
satuan waktu dan tenggat waktu (deadline)
setiap job i adalah di 0;
- job i akan memberikan keuntungan sebesar pi
jika dan hanya jika job tersebut diselesaikan
tidak melebihi tenggat waktunya;
- Bagaimana memilih job-job yang akan
dikerjakan oleh mesin sehingga keuntungan yang
diperoleh dari pengerjaan itu maksimum?
Maksimasi F = p
iJ
i
Deklarasi
i : integer
J : himpunan_job { solusi }
Algoritma
J {}
while C {} do
i job yang mempunyai p[i] terbesar
C C – {i}
if (semua job di dalam J {i} layak) then
J J {i}
endif
endwhile
{ C = {} }
return J
1 10 2 1 10 2
50
30 45 40 3 45 3
35 35
4 4
25 25
5 5
20 55 20 55
15 15
6 6
1 50 2 10
5
40
15 35
20 10 20
30
3 15 4 3 6
Strategi greedy:
1 50 2 10
5
40
15 35
20 10 20
30
3 15 4 3 6
Inisial - - 0 0 0 0 0 0 0 50 10 40 45
(1,2) (1,3) (1,4) (1,5) (1,6)
1 1 1 1 0 0 0 0 0 50 10 40 45
(1,2) (1,3) (1,4) (1,5) (1,6)
2 3 1, 3 1 0 1 0 0 0 50 10 25 45
(1,2) (1,3) (1,3,4) (1,5) (1,6)
3 4 1, 3, 4 1 0 1 1 0 0 45 10 25 45
(1,3,4,2)(1,3)(1,3,4) (1,5) (1,6)
4 2 1, 3, 4, 2 1 1 1 1 0 0 45 10 25 45
(1,3,4,2)(1,3)(1,3,4) (1,5) (1,6)
5 5 1, 5 1 1 1 1 1 0 45 10 25 45
Aplikasi algoritma Dijkstra:
Routing pada jaringan komputer
(560 km, 56 kbps)
)
ps Router 2 Router 3 (4
50
kb km
0
,1 ,3
km 0
kb
0
04 ps)
(1
)
kbps
(8
, 35
90
(12 25 km
km
,1
0
kb
)
bps
ps
0k
Router 1 m, 2 Router 6
)
k
(340
)
(2
ps
27
kb
5
km
1
,1
,2
km
5
kb
0
ps
21
)
(1
(350 km, 5 kbps)
Router 5
Router 3
Lintasan terpendek (berdasarkan delai):
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
Router Asal Router Tujuan Lintasan Terpendek
5 1 5, 2, 4, 1
2 5, 2
3 5, 3
4 5, 2, 4
5 -
6 5, 3, 6
6 1 6, 4, 1
2 6, 4, 2
3 6, 3
4 6, 4
5 6, 3, 5
6 -
Asal Tujuan Via Asal Tujuan Via
2 1 4 4 1 4
2 2 - 4 2 4
2 3 4 4 3 6
2 4 2 4 4 -
2 5 2 4 5 2
2 6 4 4 6 4
(560 km, 56 kbps)
p s) Router 2 Router 4 (4
kb 50
0 km
,1 ,3
km 0
kb
Asal Tujuan Via 0
04 ps
1 1 - (1 )
s) Asal Tujuan Via
5 kbp
(8
1 2 4 ,3
90
6 1 4
(1225 km
km
1 3 4 6 2 4
,1
0
1 4 4 6 3 6
kb
s)
kbp
ps
1 5 4 Router 1 20 Router 6
km, 6 4 6
)
(3 40
1 6 4 6 5 3
s)
(2 6 6 -
p
27
kb
5
km
1
,1
,2
km
5
kb
10
ps)
2
(1
(350 km, 5 kbps)
Router 5
Router 3
Asal Tujuan Via
Asal Tujuan Via
5 1 2
3 1 6
5 2 5
3 2 6
5 3 5
3 3 -
5 4 2
3 4 6
5 5 -
3 5 3
5 6 3
3 6 3
8. Pemampatan Data dengan Algoritma
Huffman
Karakter a b c d e f
----------------------------------------------------------------
Frekuensi 45% 13% 12% 16% 9% 5%
Kode 000 001 010 011 100 111
Karakter a b c d e f
------------------------------------------------------------------------
Frekuensi 45% 13% 12% 16% 9% 5%
Kode 0 101 100 111 1101 1100
Nisbah pemampatan:
Karakter a b c d e f
-------------------------------------------------------
Frekuensi 45 13 12 16 9 5
1. f:5 e:9 c:12 b:13 d:16 a:45
f:5 e:9
f:5 e:9
5. cbfed:55 a:45
cb:25 fed:30
f:5 e:9
6 acbfed:100
0 1
a:45 cbfed:55
0 1
cb:25 fed:30
0 1 0 1
c:12 b:13 fe:14 d:16
0 1
f:5 e:9
Algoritma Traversal di
dalam Graf
Traversal di dalam graf berarti mengunjungi
simpul-simpul dengan cara yang sistematik.
2 3 2 3 2 3 4
5 6 7
4 5 6 7 4 5 6 7
8 9
1 1
Inisialisasi tabel:
for il to n do
dikunjungi[i] false
endfor
procedure BFS(input v:integer)
{ Traversal graf dengan algoritma pencarian BFS.
Algoritma:
BuatAntrian(q) { buat antrian kosong }
Algoritma:
BuatAntrian(q) { buat antrian kosong }
2 3 2 3 2 3 4
5 6 7
4 5 6 7 4 5 6 7
8 9
1 1
Algoritma:
write(v)
dikunjungi[v]true
for wl to n do
if A[v,w]=l then {simpul v dan simpul w bertetangga }
if not dikunjungi[w] then
DFS(w)
endif
endif
endfor
Aplikasi DFS dan BFS
1. Search Engine (google, yahoo, altavista)
A B C
AB AC BA BC CA CB
up right
down left
2 6 2 1 6 2 1 6 2 1 6
4 1 8 4 5 8 4 8 4 8
7 5 3 7 3 7 5 3 7 5 3
2 6 2 6 2 1 6 2 1 6 2 1 6 1 6 2 1 2 1 6
4 1 8 4 6
1 8 4 5 8 4 5 8 7 4 8 2 4 8 4 8 6 4 8 3
7 5 3 7 5 3 7 3 7 5 5 3 7 5 3 7 5 3 7 5
down
4 2 6
6
1 8 ... dan seterusnya
7 5 3
Metode Pencarian Melebar (BFS)
0 0 0 0
1 2 1 2 1 2
3 4 3 4 5 6
up right
down left
2 6 2 6 2 1 6 2 1 6 2 1 6 1 6 2 1 2 1 6
4 1 8 4 6
1 8 4 5 8 4 5 8 7 4 8 2 4 8 4 8 6 4 8 3
7 5 3 7 5 3 7 3 7 5 5 3 7 5 3 7 5 3 7 5
down
S15:
4 2 6
6
1 8 ... dan seterusnya
7 5 3
S3:
3
S1: S2: 1 1
1 2 3 2 3 2
S8:
S6: 2
S4: S5: S7:
2 2 3 3 1
1 3 1 3 1 2 1 2 3
S9: S10:
3 1
2 2
1 3
Dengan mengikuti lintasan dari simput akar
(S0) ke simpul solusi(S10), kita memperoleh
konfigurasi urutan perpindahan blok dari
status awal sampai ke status akhir.
0 0 0 0 0 0 0
1 1 1 1 4 1 4 1 4
2 2 3 2 3 2 3 5 2 3 5 6
(i) (ii) (iii) (iv) (v) (vi) (vii)
S0: ()
S1 S2 S8 S18 S1 S2 S8 S13
(1,1) (1,2) (1,3) (1,4) (1,1) (1,2) (1,3) (1,4)
S3 S9 S14 S3 S9
(2,2) (1,2) (1,4) (2,2) (1,4)
Gambar 6.12
(a) Pohon ruang status yang mengandung duplikasi simpul
(b) Pohon ruang status yang menghindari pembangkitan simpul
yang sama.
Kompleksitas waktu algoritma DFS pada
kasus terburuk adalah O(bm).
1
Algoritma Minimum Spanning Trees
3
Kruskal's Algorithm:
1. T masih kosong
2. pilih sisi (i,j) dengan bobot minimum
3. pilih sisi (i,j) dengan bobot minimum berikutnya yang
tidak membentuk cycle di T, tambahkan (i,j) ke T
4. Ulangi langkah 3 sebanyak (n-2) kali.
5. Total langkah (n-1) kali
4
Kruskal's Algorithm:
a
10
b
20
c Langkah Sisi bobot
0
13 5
15 12 1 e-c 5
e
21 2 a-b 10
11
d f 3 d-e 11
16 4 c-f 12
5 b-e 13
5
Kruskal's Algorithm:
10 20 10 20 10
a b c a b c 20
a b c
13 5 13 5 13
15 12 15 12 15 5 12
e e e
21 21 21
11 11 11
d f d f d f
16 16 16
10 20 10 20
a b c a b c
13 5 13 5
15 12 15 12
e e
21 21
11 11
d f d 6f
16 16
Contoh algoritma Kruskal
7
Contoh algoritma Kruskal
8
Contoh algoritma Kruskal
0
1 N1,N2 1
2 N7,N8 1
3 N2,N3 2
4 N1,N6 3
5 N3,N4 4
6 N2,N7 5
7 N4,N5 7 9
Contoh algoritma Kruskal
Langkah 2
Langkah 1 Langkah 3
10
Contoh algoritma Kruskal
Langkah 4 Langkah 6
20
Algorithma Prim
21
Algorithma Prim
PROCEDURE Prim
(G: weighted connected undirected graph with n vertices)
BEGIN
T := a minimum-weight edge
FOR i := 1 to n-2 DO
BEGIN
e := a minimum-weight edge one
of whose vertices is in T,
and one is not in T
T := T with e added
END
RETURN T
END
22
Algorithma Prim
23
Algorithm Prim
10 20 10 20 10
a b c a b c 20
a b c
13 5 13 5 13
15 12 15 12 15 5 12
e e e
21 21 21
11 11 11
d f d f d f
16 16 16
10 20 10 20
a b c a b c
13 5 13 5
15 12 15 12
e e
21 21
11 11
d f d 24f
16 16
Algorithm Prim
LANGKAH SISI BOBOT
1 (H,G) 1
8 7
B C D 2 (G,F) 2
4 2 9
3 (F,C) 4
A 11 I 4 14 E 4 (C,I) 2
7 6 5 (C,D) 7
8 10
1 2 6 (C,B) 8
H G F
7 (B,A) 4
8 (D,E) 9
25
Algorithm Prim
Langkah 1 Langkah 3
C
H 1 G
4
H 1 G 2 F
Langkah 2 Langkah 3
C
2
H 1 G 2 F 4
I
H 1 G 2 F
26
Algorithm Prim
Langkah 4 Langkah 6
7
C D 8 7
2 B C D
4 2
I 4
A I 4
H 1 G 2 F
H 1 G 2 F
Langkah 5 Langkah 7
8 7
B C D 8 7
2 B C D
4 2 9
I 4
A I 4
E
H 1 G 2 F
H 1 G 2 F
27
Algorithm Prim
28
Prim's algorithm(basic part)
MST_PRIM(G,w,r)
1. A={}
2. S:={r} (r is an arbitrary node in V)
3. Q=V-{r};
4. while Q is not empty do {
5 take an edge (u, v) such that (1) u S and v Q
(v S ) and
(u, v) is the shortest edge satisfying (1)
6 add (u, v) to A, add v to S and delete v from Q
}
Grow the minimum spanning tree from the
root vertex r.
Q is a priority queue, holding all vertices that
are not in the tree now.
key[v] is the minimum weight of any edge
connecting v to a vertex in the tree.
parent[v] names the parent of v in the tree.
When the algorithm terminates, Q is empty;
the minimum spanning tree A for G is thus
A={(v,parent[v]):v∈V-{r}}.
Running time: O(|E|+|V|lg |V|). (Analysis is
not required)(Fibonacci heap: decreas-key in
O(1) time)
The execution of Prim's algorithm(moderate part)
8 7
the root b c d
4 9
vertex
2
a 11 i 4 14 e
7 6
8 10
h g f
1 2
8 7
b c d
4 9
2
a 11 i 4 14 e
7 6
8 10
h g f
1 2
8 7
b c d
4 9
2
a 11 i 4 14 e
7 6
8 10
h g f
1 2
8 7
b c d
4 9
2
a 11 i 4 14 e
7 6
8 10
h g f
1 2
8 7
b c d
4 9
2
a 11 i 4 14 e
7 6
8 10
h g f
1 2
8 7
b c d
4 9
2
a 11 i 4 14 e
7 6
8 10
h g f
1 2
8 7
b c d
4 9
2
a 11 i 4 14 e
7 6
8 10
h g f
1 2
8 7
b c d
4 9
2
a 11 i 4 14 e
7 6
8 10
h g f
1 2
8 7
b c d
4 9
2
a 11 i 4 14 e
7 6
8 10
h g f
1 2
8
2 5
4 2
1 11 3 7
5 6
9
4 1 6
36
Barůvka‘s Algorithm
37
Barůvka‘s Algorithm
1. For all vertices search the edge with the smallest weight
of this vertex and mark these edges
Baruvka's Algorithm
5
A B
4 6 2
2 D 3
C
3 1 2
E F
4
Baruvka's Algorithm
5
A B
4 6 2
2 D 3
C
3 1 2
E F
4
Baruvka's Algorithm
5
A B
4 6 2 Ci
2 D 3
C
3 1 2
E F
4
Baruvka's Algorithm
5
A B
4 6 2
2 D 3
C
3 1 2
E F
4
Baruvka's Algorithm
A B
2
2 D
C
3 1 2
E F
Baruvka's Algorithm
minimum- spanning tree
A B
2
2 D
C
3 1 2
E F
Baruvka's Algorithm
soal
Tentukan minimum spanning tree dengan
menggunakan algoritma kruskal, baruvka
dan prim
13 11
2 6
12
11 12 22
18
20 17
3 1 4
16 7
24 15
5 15
45
PERANCANGAN DAN ANALISA
ALGORITMA
Oleh :
Dessy Tri Anggraeni
Universitas Gunadarma
Algoritma membantu kita untuk menyelesaikan
permasalahan secara lebih terstruktur.
Contoh algoritma :
Brute Force, Depth First Search (DFS), Breath First Search (BFS),
Backtracking, dll
Algoritma Berbasis Top-Down
Algoritma Berbasis Top-Down adalah algoritma yang menyelesaikan
masalah dengan membagi permasalahan yang kompleks menjadi
beberapa modul yang lebih kecil. Hasil dari perhitungan tiap modul
kemudian digabungkan kembali menjadi kesimpulan.
Contoh penerapan :
Masalah klusterisasi (pengelompokan), masalah sorting, masalah
pencarian, Bahasa pemrograman structural/modular.
Contoh algoritma :
Divide and Conquer
Algoritma Berbasis Bottom-Up
Algoritma Berbasis Bottom-Up adalah algoritma yang menyelesaikan
masalah dengan mengerjakan masalah-masalah tingkat rendah untuk
kemudian diintegrasikan demi memecahkan masalah yang lebih besar.
Contoh penerapan :
pada Bahasa pemrograman berbasis obyek (OOP), pemanfaatan Web
Services, dll.
Contoh algoritma :
Dynamic Programming
Algoritma Penentuan Jalur Terpendek
Algoritma Penentuan Jalur Terpendek (Shortest Path) adalah
algoritma yang biasa digunakan di bidang graph, untuk menentukan
rute terpendek dari suatu titik ke titik lain.
Contoh penerapan :
Menentukan rute jalur distribusi/logistik, menentukan rute terpendek
penarikan kabel, penentuan rute pada aplikasi maps/peta digital.
Contoh algoritma :
Algortima Greedy, Djikstra, Floyd-Warshall, dan lain-lain.
Algoritma Minimum Spanning Tree
Algoritma Minimum Spanning Tree adalah algoritma yang digunakan
untuk menentukan nilai minimum dari suatu permasalahan optimasi.