Professional Documents
Culture Documents
Sungai Pregel
di Kalilingrad (Uni
Soviet)
C D
Dalam masalah di atas, daratan (tepian A dan B, serta pulau C dan D) disajikan
sebagai titik dan jembatan disajikan sebagai ruas garis. Euler mengemukakan
teoremanya yang mengatakan bahwa perjalanan yang diinginkan di atas (yang
kemudian dikenal sebagai perjalanan Euler) akan ada apabila graf terhubung dan
banyaknya garis yang datang pada setiap titik (derajat simpul) adalah genap.
1 2
7
11
8 12 9
11 5 9
11 10
* waktu dalam menit
4 8 3 1 = Kantor
B E
F
A
A B F B
A C B C D C F C
A E B E D E F E
Untuk menyelesaikan masalah di atas dapat dipakai Algoritma Pewarnaan Graf (juga
dikenal sebagai Graph Coloring, yakni menggunakan Metode Greedy)
Contoh :
G ( V, E )
V = { A, B, C, D }
E = { ( A, B ), ( B, C ), ( C, D ), ( D, A ), ( B, D ) }
Secara Geometri :
A e2 Tidak ada
B
ketentuan
e1 e3 khusus
e5
D C
e4 A
→ terdiri A
dari 4 simpul dan 5 ruas
A
B B
D B D D
A
C C
C
dalam penyajian graf secara geometri, seperti dimana dan bagaimana menyajikan
simpul dan ruas. Berikut contoh penyajian Graf yang sama, tetapi disajikan berbeda.
Sebuah graf dikatakan multigraf bila graf tersebut mengandung ruas sejajar atau
gelung. Sedangkan graf yang tidak mengandung ruas sejajar atau gelung dikenal
sebagai graf sederhana, atau yang disebut graf. Adapun contoh multigraf adalah
sebagai berikut.
e2
w
12
e3 A
A
e4 Multigraf
e1
e5
A A
e6
Subgraf
G‘(V‘, E‘) adalah Subgraf dari G (V, E) bila : V‘ ⊂ V dan E‘ ⊂ E
Apabila E‘ mengandung semua ruas di E yang kedua ujungnya di V‘ , maka
G‘ adalah Subgraf yang dibentuk oleh V‘ (Spanning Subgraph)
Contoh :
e1 e3
e5
D C
e4
G’ :
G’ :
A e2 B
A B
e1 e1 e5
e5
D
D
G’ spanning subgrapf dari G
G’ subgraf dari G
Graf berlabel
Graf berlabel/ berbobot adalah graf yang setiap ruasnya mempunyai nilai/bobot berupa
bilangan non negatif.
Contoh :
B 3 D 12 F
3 8
A 2 2 6
2 3 H
4 19
13 3
C E G
Homomorfis
Jika G* dan G** diperoleh dari G dengan membagi beberapa ruas dari G oleh
penambahan beberapa simpul pada ruas tersebut, maka kedua graf G* dan G**
disebut homomorfis
Contoh :
G1 G2
A e1 B A e1 B
e5 e6
e4 e2 e4 e2
e8 e7
E
D e3 C D e3 C
e10 e9
F
G1 ∪ G2
G1 ∩ G2
A e1 B
A e1 B
e5 e6
e4 e2
e8 e7 e4 e2
E
D e3 C D e3 C
e10 e9
G1 ⊕ G2
A B
e5 e6
e8 e7
E
D C
e10 e9
G1 - G2 G2 – G1
A B
e5 e6 D C
e8 e7 e10 e9
E
D C
G:
V ≠ ∅ dan
V1 E=∅
V2
V3
A
B
K
A B
C
D
A B
D C
L
G
C
Penghapusan / Deletion
Penghapusan dapat dilakukan pada simpul ataupun ruas.
1) Penghapusan Simpul .
V1 V2 V5 V1 V5
V4 V3 V7 V6 V4 V3 V7 V6
Penghapusan Simpul V2
2) Penghapusan Ruas .
Notasinya : G – {e}
Contoh :
e1
e1
e2 e3 e4 e2 e4
e5 e5
Penghapusan Ruas e3
Pemendekan / Shorting
Pemendekan/Shorting adalah menghapus simpul yang dihubungkan oleh 2 ruas
(simpul berderajat 2), lalu menghubungkan titik-titik ujung yang lain dari kedua ruas
tersebut.
Contoh :
D C
D
Derajat Graf
Derajat graf adalah jumlah dari derajat simpul-simpulnya. Sedangkan derajat simpul
adalah banyaknya ruas yang incidence (terhubung) ke simpul tersebut.
Contoh :
A B
F
E
C D
d (A) = 2
d (B) = 5
d (C) = 3
d (D) = 3
d (E) = 1
d (F) = 0
+
Σ = 14 = 2 x Size
Keterhubungan
Dalam keterhubungan sebuah graf, akan dikenal beberapa istilah-istilah berikut :
1. Walk : barisan simpul dan ruas
2. Trail : Walk dengan ruas yang berbeda
3. Path / Jalur : Walk dengan simpul yang berbeda
4. Cycle / Sirkuit : Trail tertutup dengan derajat setiap simpul = 2
Contoh :
B b D h E
a d c k
g
A e f
C F
1) A, B, C, D, E, F, C, A, B, D, C → Walk
2) A, B, C, D, E, F, C, A → Trail
3) A, B, C, A → Cycle
4) A, B, D, C, B, D, E → Walk
5) A, B, C, D, E, C, F → Trail
6) A, B, D, C, E, D → Trail
7) A, B, D, E, F, C, A → Cycle
Suatu graf G disebut terhubung jika untuk setiap 2 simpul dari graf terdapat jalur yang
menghubungkan kedua simpul tersebut.
Subgraf terhubung suatu graf disebut komponen dari G bila subgraf tersebut tidak
terkandung dalam subgraf terhubung lain yang lebih besar.
Jarak antara 2 simpul dalam graf G adalah panjang jalur terpendek antara ke-2 simpul
tersebut.
Diameter suatu graf terhubung G adalah maksimum jarak antara simpul-simpul G.
Ada Subgraf S dari graf terhubung G, yang bila kita ambil / pindahkan dari G, akan
menyebabkan G tidak terhubung .
Kalau tidak ada Subgraf sejati R dari S, yang pemindahannya juga menyebabkan G
tidak terhubung, maka S disebut Cut-Set dari G.
e5 Maka,
e4 V4 e8 Matriks
V1 V5
Ruas :
e1 e6
e7
e2
Atau :
2xn
V2 e3 V3 1 1 1 1 2 3 3 4
2 3 4 5 3 4 5 5
Matriks Adjacency :
V1 V2 V3 V4 V5
nx2
V1 0 1 1 1 1
1 V2 2 1 0 1 0 0
1 V3 3 1 1 0 1 1
1 V4 4 1 0 1 0 1
1 V5 5 1 0 1 1 0
2 3
3 4
3 5
4 5
Graf Planar
Sebuah graf dikatakan graf planar bila graf tersebut dapat disajikan (secara geometri)
tanpa adanya ruas yang berpotongan. Sebuah graf yang disajikan tanpa adanya ruas
yang berpotongan disebut dengan penyajian planar/map/peta.
Contoh :
K4
Bidang
Empat
Bidang
Delapan
Beraturan
D
r4
B
A r2 E F
r1
r3
C
r5
d ( r1 ) = 3
d ( r2 ) = 3
d ( r3 ) = 5
d ( r4 ) = 4
d ( r5 ) = 3
+
Σ = 18 = 2 x SIZE
K3,3
Utility Graph K5 = Bintang
Pewarnaan Graf
Pewarnaan graf adalah pemberian warna terhadap simpul-simpul graf dimana 2 buah
simpul yang berdampingan tidak boleh mempunyai warna yang sama.
G berwarna n artinya graf tersebut menggunakan n warna.
Bilangan kromatis dari G = K(G) adalah jumlah minimum warna yang dibutuhkan.
Algoritma yang dapat digunakan untuk mendapatkan bilangan kromatis dari sebuah
graf adalah Algoritma Welch-Powell.
Adapun langkah-langkahnya adalah :
1. Urutkan simpul-simpul berdasarkan derajatnya.
Dari besar ke kecil.
2. Warnai.
Langkah 1 :
urutan simpulnya dari besar ke kecil adalah : E, C, G, A, B, D, F, H
Langkah 2 :
mewarnai :
warna Merah : E, A
warna Putih : C, D, H
warna Biru : G, B, F
Teorema :
Pernyataan berikut adalah ekivalen :
(1) G berwarna 2
(2) G adalah bipartisi
(3) Setiap sirkuit dalam G mempunyai panjang genap
Pewarnaan Region
Pewarnaan region dapat dilakukan (seperti pemberian warna pada wilayah-wilayah di
peta) dengan cara membuat dual dari map tersebut. Gambarkan sebuah simpul baru
pada masing-masing region suatu map M, kemudian buat sebuah ruas yang
menghubungkan simpul pada 2 buah region yang berdampingan bila terdapat ruas
sebagai batas / persekutuan kedua region tersebut. Buatlah tanpa adanya ruas baru
yang berpotongan, maka akan terbentuk suatu map M*, yang disebut dual dari map M.
Setelah Dualnya terbentuk, dapar dilakukan pewarnaan terhadap simpul-simpulnya.
Simpul-simpul tersebut mewakili region sebelumnya, sehingga warna yang digunakan
untuk suatu simpul berarti warna yang dapat digunakan untuk pewarnaan region yang
diwakilinya.
Pohon
Tree atau pohon adalah graf terhubung yang tidak mengandung sirkuit.
Untuk itu perlu diingat kebali bahwa :
• Suatu Graf G disebut terhubung apabila untuk setiap dua simpul dari graf G
selalu terdapat jalur yang menghubungkan kedua simpul tersebut.
• Sirkuit atau cycle adalah suatu lintasan tertutup dengan derajat setiap simpul
dua.
Contoh :
Sifat :
Suatu Graf
G adalah
Pohon jika
dan hanya
jika
terdapat
satu dan
hanya satu
jalur
diantara
setiap
pasang
simpul dari
Graf G.
Pohon Rentangan
Suatu spanning tree atau pohon rentangan adalah suatu subgraf dari graf G yang
mengandung semua simpul dari G, dan merupakan suatu pohon.
Contoh :
m – ( n – 1) CHORD
Keterangan
Branch
Chord
Contoh :
Contoh :
. 8
. 17
.
19
12 13
. 11
. 10
.
15 16
14
. 18
. 9
.
Untuk mendapatkan pohon rentangan minimal dapat digunakan Algoritma berikut :
• Solin
• Kruskal
• Prim’s
SOLIN
Urutkan ruas dari G menurut bobotnya; dari besar ke kecil.
Lakukan penghapusan ruas berdasarkan urutan yang sudah dilakukan; dengan
ketentuan bahwa penghapusan ruas tersebut tidak menyebabkan graf menjadi
tidak terhubung.
PRIM’S
= Kruskal + menjaga graf tetap terhubung
Untuk mencari pohon rentangan maksimal, dapat dilakukan dengan dengan cara
merubah bobot tiap ruas menjadi – (bobot yang lama)
Definisi :
Hutan atau foresi adalah graf yang tidak mengandung sirkuit.
Contoh :
Pohon Berakar
Suatu pohon berakar R adalah suatu pohon bersama dengan suatu simpul r yang
dirancang/ditunjuk sebagai akar (root) dari R. Seperti diketahui bahwa hanya terdapat
satu jalur antara r dengan simpul lain v pada pohon pohon tersebut. Panjang jalur
antara r dengan simpul v disebut level atau kedalaman simpul v. Simpul bukan akar,
yang berderajat satu disebut daun. Jalur antara suatu simpul dengan suatu daun
disebut cabang (branch).
Berikut ini contoh pohon berakar.
Contoh :
a
b c
d e f g
h j
i
Suatu pohon dapat dijadikan suatu pohon berakar cukup dengan mengangkat salah
satu simpul sebagai akar. Dengan adanya akar, setiap ruas dari pohon seolah-olah
mempunyai arah, yang bermula dari akar tersebut. Simpul u dikatakan mendahului
simpul v jika jalur dari akar r ke v melalui u. Dikatakan u mendahului langsung v bila u
mendahului v serta simpul u dan v berdampingan. Pada contoh di atas, a mendahului d,
mendahului e, dan mendahului h.
Pohon Binar
Dalam struktur data, pohon memegang peranan yang cukup penting. Struktur ini
biasanya digunakan terutama untuk menyajikan data yang mengandung hubungan
hirarkikal antara elemen-elemen mereka.
Bentuk pohon khusus yang lebih mudah dikelola dalam komputer adalah pohon binary.
Bentuk ini merupakan bentuk pohon yang umum. Sebuah pohon binar T didefinisikan
terdiri dari sebuah himpunan hingga elemen yang disebut simpul (node), sedemikian
sehingga :
a. T adalah hampa (disebut pohon null) atau
b. T mengandung simpul R yang dipilih (dibedakan dari yang lain),
disebut akar (root) dari T, dan simpul sisanya membentuk 2 pohon binar
(subpohon kiri dan subpohon kanan dari R) T1 dan T2 yang saling lepas.
Perhatikan bahwa pendefinisian pohon binar di atas adalah rekursif. Jika T1 tidak
hampa, maka simpul akarnya disebut suksesor kiri dari R. Hal serupa untuk akar dari
T2 (tidak hampa) disebut suksesor kanan dari R.
Untuk menyajikan pohon binar, simpul akar adalah simpul yang digambar pada bagian
paling atas. Sedangkan suksesor kiri digambarkan sebagai garis ke kiri bawah dan
suksesor kanan sebagai garis ke kanan bawah.
Contoh :
B
C
D E F G
H I
J K
Pohon Sintaks
Untuk menjelaskan mengenai bahasa secara teoritis dan formal, kita lihat terlebih
dahulu sebuah kalimat sehari-hari dalam bahasa Indonesia, yaitu :
SI KUCING KECIL MENENDANG BOLA BESAR
Gambar penguraian kalimat di atas membentuk struktur pohon, yang disebut pohon
sintaks dari kalimat. Disini kalimat dibagi-bagi berdasar jenis dan fungsi kata. Dari
pelajaran bahasa Indonesia kita tahu bahwa kalimat di atas telah benar susunannya,
atau telah benar tata bahasanya.
Pohon sintaks dari kalimat di atas dapat dilihat sebagai berikut :
Subyek Predikat
Obyek
Graf Berarah
Di dalam situasi yang dinamis, seperti pada komputer digital ataupun pada sistem aliran
(flow system), konsep graf berarah lebih sering digunakan dibandingkan dengan
konsep graf tak berarah.
Suatu graf berarah (Directed Graph, yang dikenal sebagai Digraf) D terdiri dari 2
himpunan :
(1). Himp. V, yang elemennya disebut simpul
→ Vertex / point / titik / node
(2). Himp. A, yang merupakan pasangan terurut dari simpul-simpul, disebut ruas
berarah
→ Arc / arkus
Sehingga sebuah digraf dinotasikan sebagai D ( V, A )
Contoh :
Sebuah graf berarah D(V,A), dengan :
1. V = { 1, 2, 3, 4 }
2. A = { (1,4), (2,1), (2,1), (4,2), (4,3), (2,3), (2,2) }
1 4
2
3
Arc (2,2) disebut gelung (self-loop), sedangkan arc (2,2) muncul 2 kali, disebut arc
sejajar atau arc berganda.
Contoh :
C C C
Misalkan D(V,A) suatu graf berarah dengan simpul v1, v2, … , vm. Matriks M berukuran
(mxm) merupakan matriks (matriks adjacency) dari D, dengan mendefinisikan sebagai
berikut :
M = (Mij), dengan mij banyaknya arc yang mulai di vi dan berakhir di vj
Bila D tidak mengandung arc berganda, maka elemen M adalah 0 dan 1. Kalau Graf
berarah mengandung arc berganda, elemen M merupakan bilangan bulat non negatif.
Jadi suatu matriks berukuran (mxm) yang elemennya bilangan bulat non negatif
menyatakan secara tunggal suatu graf berarah dengan m simpul.
Contoh :
V1 V4 1 0 0 0
1 0 0 0
0 2 0 1
V2 0 0 1 0
V3
Matriks M
Teorema :
M adalah Matriks dari sutau graf berarah D, maka elemen baris ke i kolom ke j dari
Matriks Mn menyatakan banyaknya walk dengan panjang n dari simpul vi ke simpul vj.
• Kita mulai dengan simpul u sebagai simpul awal. Beri harga = 0. Ambil simpul
u x y z a b c v
uz = 2 xy = 3 yc = 1 zy = 2 ab = 2 bv = 3 cv = 3
ux = 4 xa = 4 yb = 2 zc = 5 av = 3
uy = 6
dengan jarak terdekat dari u, dalam hal ini z (uz =2), kemudian tandai uz. Semua
arc lain, yang berakhir di z kita hapus. Beri harga = 2 pada kolom z. Kemudian
pada judul kolom yang telah diberi harga, kita tandai *. Hasil langkah tersebut
dapat dilihat pada tabel berikut ini :
• Dari simpul u dan z (yang telah ditandai *), dicari simpul lain yang jaraknya
terdekat dihitung dari u. Jadi harus diperhitungkan harga yang tertulis di judul
kolom. Disini ux =4 merupakan nilai terkecil, sehingga kita beri harga pada kolom
Dari tabel terakhir, data yang kita gunakan adalah data yang ditandai kotak. Terlihat
dari judul kolom masing-masing simpul, harga yang merupakan jarak terpendek dari
simpul awal (dalam hal ini simpul u) ke simpul tersebut. Sebagai contoh, jarak
terpendek dari u ke v adalah 8. Sedangkan dari u ke c adalah 5, dan seterusnya.
Jalur terpendek dari u ke v dapat ditentukan dengan cara mundur, yakni dari data yang
ada yang berakhir dengan v adalah cv, kemudian yang berakhir dengan c adalah yc,
yang berakhir dengan y adalah zy dan yang berakhir dengan z adalah u. Sehingga jalur
yang dimaksud adalah : u → z → y → c → v
Penggambaran dari solusi tersebut adalah sebagai berikut :
Contoh :
Untuk menyelesaikan problema aliran maksimal ini dapat digunakan beberapa cara,
8 0
10 0 b 4 4 d
sumber a muara
7 5 0
5
Logika & Algoritma 0 10 Halaman 42 dari 97 halaman
RAT c
Logika & Algoritma Halaman 43 dari 97 halaman
RAT
Pertemuan ke-6
Graf Berarah (Lanjutan)
INPUT : Untai
⇒ M ( A, S, Z, f, g) OUTPUT : Untai
⇒ M (A, S, Z, q0, f, g)
Contoh : M ( A, S, Z, f, g) dengan :
(1) A = (a,b)
(2) S = (q0, q1, q2)
(3) Z = ( x, y, z)
(4) f : S x A → S, yang didefinisikan sebagai :
f (qo, a) = q1 f (q0, b) = q2
f (q1, a) = q2 f (q1, b) = q1
f (q2, a) = qo f (q2, b) = q1
f a b
q0 q0 q1
q1 q0 q2
q2 q2 q2
Algoritma
Istilah algoritma pertama kali diperkenalkan oleh seorang ahli matematika yaitu Abu
Ja’far Muhammad Ibnu Musa Al Khawarizmi.
Yang dimaksud dengan algoritma adalah :
Urutan dari barisan instruksi untuk menyelesaikan suatu masalah
Adapun algoritma dapat dinyatakan dalam bentuk : flow chart, diagram alur,
bahasa semu
Sedangkan secara bahasa, algoritma berarti suatu metode khusus untuk
menyelesaikan suatu masalah yang nyata (dari Webster Dictionary).
Dari suatu permasalahan yang akan diselesaikan, bisa terjadi terdapat lebih dari satu
algoritma. Dalam memilih algoritma yang terbaik yang dapat digunakan, harus
diperhatikan beberapa kriteria. Kriteria tersebut antara lain :
• Efektif dan efisien
• Jumlah langkahnya berhingga
• Berakhir
• Ada output
• Terstruktur
MODEL
ALGORITMA
DATA
PROGRAM
EKSEKUSI
HASIL / SOLUSI
Merencanakan algoritma : Merupakan suatu studi tentang teknik variasi design (model)
Menyatakan algoritma : Menyatakannya dengan singkat, dibuat dalam bahasa
pemrograman yang terstruktur, misalnya Pascal, C
Analisis Algoritma
Sebagaimana studi tentang algoritma, maka faktor yang sangat diperhitungkan adalah
faktor efisiensi, yang meliputi :
a. Waktu tempuh (running time)
• banyaknya langkah
• besar dan jenis input data
• jenis operasi
• jenis komputer dan kompilator
b. Jumlah memori yang dipakai
f(n) ≤ cg(n) ∀ n ≥ n0
Teorema :
Sebagai contoh :
(ii) for i ← 1 to n do
c ←a + b
repeat
(iii) for i ← 1 to n do
for j ← 1 to n do
c ←a + b
repeat
repeat
Analisisnya :
banyaknya f(n) Big Oh
operasi +
(i) 1 kali f(n) = 1 Ο (1)
(ii) n kali f(n) = n Ο (n)
(iii) n2 kali f(n) = n2 Ο (n2)
Contoh 2 :
Penjumlahan 2 buah matriks berorde (m X n) dan elemennya real
Contoh 3 :
Menentukan lokasi suatu elemen pada array data secara linier
Bila elemen (item) yang dicari merupakan elemen terakhir dari array tersebut atau tidak
terdapat dalam array :
→ WORST CASE
⇒ F(n) = Ο (n)
Bila elemen (item) yang dicari berada diantara elemen pertama dan elemen terakhir
dari array tersebut :
→ AVERAGE CASE
Banyaknya elemen dalam array tersebut adalah n, maka probabilitas masing-masing
elemen adalah 1/n
⇒ F(n) = 1 . 1/n + 2 . 1/n + 3 . 1/n + . . . + n . 1/n
= ( 1 + 2 + 3 + . . . + n ) . 1/n
= (n + 1) . n/2 . 1/n
= (n + 1)/2
= 1/2 n + 1/2
= Ο (n)
Teknik Iteratif
Teknik Iteratif merupakan suatu teknik pembuatan algoritma dengan pemanggilan
procedure beberapa kali atau hingga suatu kondisi tertentu terpenuhi
Contoh :
Teknik Iteratif pada algoritma untuk menghitung faktorial dari bilangan bulat positif n,
adalah sebagai berikut :
1. Set x, y, n, i, f : integer
2. x ←1 ; y ←1
3. If n 〉 2 then
begin
4. for i ← 3 to n do
begin
5. F ←x + y
6. x ←y
7. y ←F
end
else
8. F ←x
9. Write(F)
End
Teknik Rekursif
Teknik Rekursif merupakan salah satu cara pembuatan algoritma dengan pemanggilan
procedure atau function yang sama
FAK(4) = 4 * FAK(3)
FAK(3) = 3 * FAK(2)
FAK(2) = 2 * FAK(1)
FAK(1) = 1 * FAK(0)
1
Contoh :
BARISAN BILANGAN FIBBONACI
1, 1, 2, 3, 5, 8, 13, 21, . . .
F(5)
F(4) F(3)
F(2) F(1)
1 1 1
1 1
ITERATIF REKURSIF
piringan, pada saat itu juga dunia kiamat. Ini menurut legenda, yang mungkin juga
benar. Secara umum, untuk menyelesaikan n buah piringan diperlukan pemindahan
sebanyak 2n –1 kali. Bayangkan jika untuk setiap pemindahan memerlukan waktu 1
detik, maka berapa waktu yang diperlukan untuk menyelesaikan 64 buah piringan.
Teknik Backtracking merupakan salah satu teknik dalam penyelesaian masalah secara
umum (General Problem Solving). Adapun dasar dari teknik ini adalah suatu teknik
pencarian (Teknik Searching). Teknik pencarian ini digunakan dalam rangka
mendapatkan himpunan penyelesaian yang mungkin. Dari himpunan penyelesaian
yang mungkin ini akan diperoleh solusi optimal atau memuaskan.
Teknik Backtracking ini diperkenalkan pertama kali oleh : D.H. Lehmer (1950),
Penulisan algoritmanya oleh : R.J. Walker (1960), dan
Variasi aplikasinya dikembangkan oleh : Golomb & Baumert (1960)
Berikut ini disajikan algoritma backtracking secara umum, yang menggunakan teknik
iteratif :
PROCEDURE BACKTRACK(n)
INTEGER k,n; LOCAL x(1:n)
k ←1
WHILE k > 0 DO
IF ada x(k) yang belum dicoba sedemikian sehingga
x(k) ∈ T(x(1), … , x(k-1)) AND Bk(x(1), … , x(k)) = TRUE
THEN
IF (x(1), … , x(k)) adalah sebuah jalur (path) yang merupakan solusi
THEN PRINT (x(1), … , x(k)) ENDIF
k ←k + 1
ELSE k ← k – 1
ENDIF
REPEAT
PROCEDURE RBACKTRACK(k)
GLOBAL n, x(1:n)
FOR setiap x(k) sedemikian sehingga
x(k) ∈ T(x(1), … , x(k-1)) AND Bk(x(1), … , x(k)) = TRUE
IF (x(1), … , x(k)) adalah sebuah jalur (path) yang merupakan solusi
THEN PRINT (x(1), … , x(k)) ENDIF
CALL RBACKTRACK(k + 1)
END RBACKTRACK
Sum of Subsets
Masalah utama dari Sum of Subsets adalah jika terdapat n bilangan real dan ingin
dihitung semua kombinasi yang mungkin dari himpunan bilangan tersebut. Kombinasi
yang diinginkan yaitu kombinasi yang jumlah seluruh elemennya sama dengan M
(tertentu).
2 3 4 5
6 7 8 9 10 11
12 13 14 15
2 3
18 19 4 5
26 27 20 21 12 13 6 7
30 31 28 29 24 25 22 23 16 17 14 15 10 11 8 9
Kedua bentuk penyajian pohon dari persoalan sum of subsets, merupakan tahapan
pertama dalam proses mendapatkan solusi sesungguhnya (solusi optimal). Untuk
mendapatkan solusi yang optimal dari ruang penyelesaian digunakan suatu algoritma
lain. Algoritma tersebut menggunakan teknik backtracking, yang selanjutnya disebut
dengan algoritma SUMOFSUB.
PROCEDURE SUMOFSUB(s,k,r)
GLOBAL INTEGER M,n
GLOBAL REAL W(1:n)
GLOBAL BOOLEAN X(1:n)
REAL r,s; INTEGER k,j
X(k) = 1
IF s + W(k) = M THEN PRINT (X(j), j ← 1 TO k)
ELSE
IF s + W(k) + W(k+1) ≤ M THEN
Contoh :
Suatu himpunan terdiri dari 6 bilangan, yakni {5, 10, 12, 13, 15, 18} yang disusun
secara tidak turun. Akan ditentukan himpunan-himpunan bagiannya, yang jumlah
seluruh elemennya adalah 30.
Perhatikan simpul A, B dan C yang merupakan outputnya dalam bentuk tuple
0,1,73
5,2,68 0,2,68
Di dalam metode ini, kita mempunyai suatu fungsi untuk menghitung input. Kemudian n
input tersebut dipartisi menjadi k subset input yang berbeda (1< k ≤ n) → k subproblem
k subproblem → k subsolusi → solusi
n input
Solusi Optimal
Jika subproblem masih relatif cukup besar, maka metode DANDC dapat digunakan lagi
untuk keadaan tersebut. Pemakaian ulang DANDC dinyatakan dengan teknik rekursif.
Pemecahan menjadi k subproblem ini menunjukkan bahwa ia mempunyai sifat yang
sama dengan problem aslinya (awalnya).
SMALL(p,q) adlah fungsi yang bernilai boole yang menentukan apakah input q-p+1
berukuran cukup kecil ∋ solusi dapat dihitung tanpa pemecahan. Jika demikian halnya,
maka fungsi G(p,q) yang dipanggil.
Pada keadaan lain fungsi DIVIDE(p,q) yang dipanggil.
Fungsi DIVIDE(p,q) menghasilkan integer yang menguraikan input menjadi 2 bagian.
Misal m = DIVIDE(p,q), maka input dipecah ∋ A(p:m) dan A(m+1,q)
Searching
Menentukan Bilangan Max dan Min
Sebelum kita lihat penggunaan metode DANDC-nya, maka kita lihat terlebih dahulu
algoritmanya secara iteratif sebagai berikut :
PROCEDURE STRAITMAXMIN
INTEGER i,n
max ← min ← A(1)
For i ← 2 TO n DO
IF A(i) > max THEN max ← A(i) ………bagian perbandingan
PROCEDURE MAXMIN(i,j,fmax,fmin)
INTEGER i,j; GLOBAL n,A(1:n)
CASE
: i=j ; fmax ← fmin ← A(i)
: i=j-1 ; IF A(i) < A(j) THEN fmax ← A(j); fmin ← A(i)
ELSE fmax ← A(i); fmin ← A(j)
ENDIF
: ELSE
mid ← (i+j)/2
CALL MAXMIN(i,mid,gmax,gmin)
Contoh :
A = { 22, 13, -5, -8, 15, 60, 17, 31, 47 }
Maka simulasi dari procedure MAXMIN tersebut adalah :
9
1 9 60 -8
5 8
1 5 22 -8 6 9 60 17
3 4 6 7
1 3 22 -5 4 5 15 -8 6 7 60 17 8 9 47 31
1 2
1 2 22 13 3 3 -5 -5
Sorting
Untuk mengurutkan barisan n input elemen yang ditempatkan dalam suatu array.
Urutan yang diinginkan adalah urutan yang tidak turun (non decreasing).
Dari Metode Sorting yang ada, akan dibahas metode merge sort dan quick sort.
Merge Sort
Algoritma dari Merge Sort terdiri dari dua prosedur, yakni prosedur MERGESORT dan
prosedur MERGE. Kedua prosedur tersebut tidak dapat dipisahkan satu dengan yang
lainnya (terintegrasi).
PROCEDURE MERGESORT(low,high)
INTEGER low,high
IF low < high THEN
mid ← (low + high) / 2
CALL MERGESORT(low,mid)
CALL MERGESORT(mid+1,high)
CALL MERGE(low,mid,high)
ENDIF
END MERGESORT
Contoh :
A(1:10) yakni :
A = { 310, 285, 179, 652, 351, 423, 861, 254, 450, 520 }
1,10
1,5 6,10
1,1,2 6,6,7
1,3,5 6,8,10
1,5,10
T(n) = Ο (n 2log n)
PROCEDURE QUICKSORT(p,q)
IF p < q THEN
j ← q+1
CALL PARTITION(p,j)
CALL QUICKSORT(p,j-1)
CALL QUICKSORT(j+1,q)
ENDIF
END QUICKSORT
PROCEDURE PARTITION(m,p)
INTEGER m,p,i; GLOBAL A(m-1,p)
V ← A(m); i ← m
LOOP
LOOP i ← i+1 UNTIL A(i) ≥ V REPEAT
LOOP p ← p-1 UNTIL A(p) ≤ V REPEAT
IF i < p THEN CALL INTERCHANGE(A(i),A(p))
ELSE EXIT
REPEAT
A(m) ← A(p); A(p) ← V
END PARTITION
Contoh :
Suatu array A berisi elemen-elemen :
65 70 75 80 85 60 55 50 45
1 2 3 4 5 6 7 8 9
i p 1 2 3 4 5 6 7 8 9 10
65 70 75 80 85 60 55 50 45 +∞
2 9 65 45 75 80 85 60 55 50 70 +∞
3 8 65 45 50 80 85 60 55 75 70 +∞
4 7 65 45 50 55 85 60 80 75 70 +∞
5 6 65 45 50 55 60 85 80 75 70 +∞
6 5 60 45 50 55 65 85 80 75 70 +∞
5 4 55 45 50 60 65 85 80 75 70 +∞
4 3 50 45 55 60 65 85 80 75 70 +∞
3 2 45 50 55 60 65 85 80 75 70 +∞
10 9 55 45 50 60 65 70 80 75 85 +∞
9 8 50 45 55 60 65 70 75 80 85 +∞
8 7 45 50 55 60 65 70 75 80 85 +∞
Analisisnya :
Worst Case = Ο (n2)
Average Case = Ο (n log n)
Masalah Knapsack
Kita diberikan sebuah knapsack (ransel) yang dapat menampung berat
maksimum M dan sehimpunan benda A = {a0,a1,...,an-1} yang berbobot W =
{w0,w1,...,wn-1}. Setiap benda tersebut diberikan nilai profit yang dinotasikan dengan P
keadaan di atas dengan tujuan mendapatkan total profit yang maksimal, dan
dengan kendala bahwa total bobot dari benda-benda yang dimasukkan ke dalam
knapsack tidak melebihi M.
Secara matematis, masalah knapsack tersebut dapat ditulis sebagai berikut :
n-1
maksimumkan Q = ∑z p i i
i=0
n −1
dengan kendala ∑z w i i ≤W
i =0
dan 0 ≤ zi ≤ 1 , pi 〉 0 , wi 〉 0 , 0 ≤ i ≤ n-1
procedure GREEDY_KNAPSACK(P,W,M,Z,n)
real P(0:n-1),W(0:n-1),Z(0:n-1),cu; {n = banyak benda}
integer i,n;
Z ←0 { Z(0), Z(1), . . . , Z(n-1) = 0}
cu ← M
for i ← 0 to n-1 do
if W(i) 〉 cu then exit endif
Z(i) ← 1
cu ← cu - W(i)
repeat
Jika algoritma ini digunakan untuk menyelesaikan masalah seperti pada contoh yang
lalu, dimana n = 4; M = 15; W = { 5,9,2,4 }; P = { 100,135,26,20 }, maka akan terlihat
hasil tracenya sebagai berikut :
Z ←0
cu ← 15
i=0
karena W(0) 〈 cu yaitu : 5 〈 15 berarti : Z(0) ← 1
cu ← 15 - 5 = 10
i=1
karena W(1) 〈 cu yaitu : 9 〈 10 berarti : Z(1) ← 1
cu ← 10 - 9 = 1
i=2
karena W(2) 〉 cu yaitu : 2 〉 1 berarti : keluar dari loop (exit)
Analisis :
Kompleksitas waktu dari algoritma Greedy_Knapsack ini adalah O(n). Tetapi jika
data yang digunakan belum terurut rasio pi/wi -nya tidak menaik, maka
Latihan :
Diketahui 3 buah benda dan sebuah knapsack dengan kapasitas maksimum 20. Berat
dan profit dari masing-masing benda tersebut adalah (18, 15, 10) dan (25, 24, 15).
Tentukanlah Z agar diperoleh total profit yang maksimal !
Jawab :
Pertama, kita periksa apakah rasio pi/wi -nya tidak menaik.
p0/w0 = 25/18
p1/w1 = 24/15
p2/w2 = 15/10
Terlihat bahwa syarat rasio pi/wi -nya tidak menaik belum terpenuhi. Jadi
susunan (urutan) -nya untuk sementara kita ubah, agar syarat rasio pi/wi -nya
Z ←0
cu ← 20
i=0
karena W(0) 〈 cu yaitu : 15 〈 20 berarti : Z(0) ← 1
cu ← 20 - 15 = 5
i=1
karena W(2) 〉 cu yaitu : 10 〉 5 berarti : keluar dari loop
(exit)
PROCEDURE PRIM(E,COST,n,T,mincost)
REAL COST(n,n),mincost
INTEGER NEAR(n),n,i,j,k,l,T(1:n-1,2)
(k,l) ← ruas dengan biaya atau bobot yang minimum
mincost ← COST(k,l)
(T(1,1),T(1,2)) ← (k,l)
FOR i ← 1 TO n DO
IF COST (i,l) < COST(i,k) THEN NEAR (i) ←l
Contoh :
Perhatikan graf berikut ini :
Tentukanlah nilai pohon rentangan minimalnya, serta pohon yang membentuk pohon
rentangan minimal tersebut.
10
1 2 50
45
30 40 3
35
4 25 5
20 15
55
6
(k,l) ← (1,2)
mincost ← COST(1,2) = 10
(T(1,1),T(1,2)) ← (1,2)
i=1
COST (1,2) < COST(1,1) … ?
10 < ~ … → TRUE : NEAR (1) ←2
i=2
COST (2,2) < COST(2,1) … ?
~ < 10 … → FALSE : NEAR (2) ←1
i=3
COST (3,2) < COST(3,1) … ?
50 < ~ … → TRUE : NEAR (3) ←2
i=4
COST (4,2) < COST(4,1) … ?
~ < 30 … → FALSE : NEAR (4) ←1
i=5
COST (5,2) < COST(5,1) … ?
40 < 45 … → TRUE : NEAR (5) ←2
i=6
COST (6,2) < COST(6,1) … ?
25 < ~ … → TRUE : NEAR (6) ←2
NEAR(1) ← NEAR(2) ← 0
i=2
Pilih j = 6 karena NEAR(6) ≠ 0 dan COST(6,NEAR(6)) adalah minimum
(T(2,1),T(2,2)) ← (6,2)
mincost ← 10 + COST(6,2) = 10 + 25 = 35
i=3
Pilih j = 3 karena NEAR(3) ≠ 0 dan COST(3,NEAR(3)) adalah minimum
(T(3,1),T(3,2)) ← (3,6)
mincost ← 35 + COST(3,6) = 35 + 15 = 50
NEAR(3) ← 0
k=1
NEAR(1) ≠ 0 dan COST(1,NEAR(1)) > COST(1,3) … ?
0 ≠ 0 dan ~ > ~ … → FALSE dan FALSE → FALSE
k=2
NEAR(2) ≠ 0 dan COST(2,NEAR(2)) > COST(2,3) … ?
i=4
Pilih j = 4 karena NEAR(4) ≠ 0 dan COST(4,NEAR(4)) adalah minimum
(T(4,1),T(4,2)) ← (4,6)
mincost ← 50 + COST(4,6) = 50 + 20 = 70
NEAR(4) ← 0
k=1
NEAR(1) ≠ 0 dan COST(1,NEAR(1)) > COST(1,4) … ?
0 ≠ 0 dan ~ > 30 … → FALSE dan TRUE → FALSE
k=2
NEAR(2) ≠ 0 dan COST(2,NEAR(2)) > COST(2,4) … ?
0 ≠ 0 dan ~ > ~ … → FALSE dan FALSE → FALSE
k=3
NEAR(3) ≠ 0 dan COST(3,NEAR(3)) > COST(3,4) … ?
0 ≠ 0 dan ~ > ~ … → FALSE dan FALSE → FALSE
k=4
NEAR(4) ≠ 0 dan COST(4,NEAR(4)) > COST(4,4) … ?
i=5
Pilih j = 5 karena NEAR(5) ≠ 0 dan COST(5,NEAR(5)) adalah minimum
(T(5,1),T(5,2)) ← (5,3)
mincost ← 70 + COST(5,3) = 70 + 35 = 105
NEAR(5) ← 0
k=1
NEAR(1) ≠ 0 dan COST(1,NEAR(1)) > COST(1,5) … ?
0 ≠ 0 dan ~ > 45 … → FALSE dan TRUE → FALSE
k=2
NEAR(2) ≠ 0 dan COST(2,NEAR(2)) > COST(2,5) … ?
0 ≠ 0 dan ~ > 40 … → FALSE dan TRUE → FALSE
k=3
NEAR(3) ≠ 0 dan COST(3,NEAR(3)) > COST(3,5) … ?
0 ≠ 0 dan ~ > 35 … → FALSE dan TRUE → FALSE
k=4
NEAR(4) ≠ 0 dan COST(4,NEAR(4)) > COST(4,5) … ?
0 ≠ 0 dan ~ > ~ … → FALSE dan FALSE → FALSE
k=5
NEAR(5) ≠ 0 dan COST(5,NEAR(5)) > COST(5,5) … ?
0 ≠ 0 dan ~ > ~ … → FALSE dan FALSE → FALSE
k=6
NEAR(6) ≠ 0 dan COST(6,NEAR(6)) > COST(6,5) … ?
mincost ≥ ~ … ?
105 ≥ ~ … → FALSE
10
1 2
3
35
4 25 5
20 15
6
Metode Umum
Pemrograman Dinamis adalah metode rancangan algoritma yang dapat dipakai bila
pemecahan masalah yang mungkin dipandang sebagai hasil dari rangkaian keputusan-
keputusan.
Untuk beberapa masalah dari masalah-masalah ynag dapat dipandang dengan cara ini,
rangkaian optimal dari keputusan-keputusan mungkin dapat ditemukan dengan
membuat satu dari keputusan-keputusan pada satu waktu dan jangan pernah membuat
keputusan yang keliru.
Satu cara untuk memecahkan masalah-masalah yang mana ini tidak mungkin untuk
membuat sebuah rangkaian dari langkah-langkah keputusan yang dapat dilakukan
mengacu (mengarah) kepada rangkaian keputusan optimal adalah untuk mencoba
semua kemungkinan rangkaian-rangkaian keputusan.
Pemrograman Dinamis seringkali secara drastic (spontan) mengurangi jumlah
pembilangan dengan menghindari pembilangan dari beberapa rangkaian keputusan
yang tidak memungkinkan menjadi optimal.
Dalam merumuskan hubungan-hubungan kembali pemrograman dinamis yang harus
dipecahkan, seseorang dapat menggunakan 1 dari 2 pendekatan yang berbeda yaitu
forward atau backward.
Multistage Graf
Sebuah multistage graf adalah sebuah graf berarah dimana bentuk tersebut dibagi
dalam k ≥ 2 disjoint set V1.
3 4 5 4
7 2
7
s 1 7 3 10 2 12 t
3 11
4 5 5
1
2 11
8 6 11
8
5
V1 V2 V3 V4 V5
1. Orang yang dikenal sebagai bapak dari lahirnya (awal) teori graf adalah :
A. Solin dan Kruskal C. Welch-Powell
B. Hamilton D. Leonhard Euler
2. Bila size dari suatu graf adalah n, maka jumlah derajat grafnya adalah :
A. 2n-1 2n
B. 2 (n-1) C. 2n+1
3. Pada pohon, simpul yang bukan merupakan akar dan berderajat simpul 1 adalah :
A. Cabang Brother
Daun Level
4. Suatu bentuk graf yang terbentuk karena penambahan sejumlah vertex baru
terhadap graf asal disebut :
A. Isomorfis Homomorfis
Isograf Isographic
6. Graf yang tidak memiliki self loop atau ruas sejajar disebut :
A. multigraf graf null
graf sederhana graf lengkap
A
L B
K
C
J D
I E
H F
G
Graf G1
13. Pada pewarnaan graf G1, simpul yang boleh menggunakan warna yang sama adalah
:
A. A dan L C dan H
A dan B B dan H
A D G J
B E
H
C K
F I
Graf G2
A. 2 3
18. Pembuatan jadwal kuliah pada suatu Perguruan Tinggi dapat diselesaikan dengan
membawanya ke masalah graf, yakni masalah :
A. jalur terpendek pewarnaan graf
minimal spanning tree travelling salesman
20. Pada graf berarah, simpul yang mempunyai derajat kedalam = 0 disebut :
A. muara terpencil
sumber artikulasi
21. Pada graf berarah, simpul yang mempunyai derajat keluar = 0 disebut :
A. muara terpencil
sumber artikulasi
22. Formula Euler untuk graf planar; dimana V adalah banyaknya simpul, E banyaknya
ruas dan R banyaknya region, adalah :
A. V - R + E = 2 V-E+2=R
V-E+R=2 V + E - R = -2
26. Suatu urutan dari barisan langkah-langkah guna menyelesaikan masalah disebut :
A. algoritma instruksi
semi algoritma semi instruksi
27. Suatu prosedur yang hanya akan berhenti jika menghasilkan penyelesaian yang
diharapkan disebut :
A. algoritma instruksi
semi algoritma semi instruksi
28. Diagram alur dari proses penyelesaian masalah, yang paling benar adalah :
masalah → semi algoritma → model → program → eksekusi → hasil
masalah → model → algoritma → program → eksekusi → hasil
masalah → algoritma → model → program → eksekusi → hasil
masalah → program → algoritma → model → eksekusi → hasil
30. Yang bukan termasuk kriteria dari suatu algoritma yang terbaik adalah :
A. efisiensi berakhir
terstruktur prosesnya cepat
32. Bila terdapat 4 algoritma sorting (kita sebut algoritma A, B, C dan D), dimana
algoritma A memiliki kompleksitas O(n2), algoritma B memiliki kompleksitas O(n3),
algoritma C memiliki kompleksitas O(log n), dan algoritma D memiliki kompleksitas
O(n), maka algoritma manakah dari keempat algoritma tersebut yang lebih baik ?
A. algoritma A algoritma C
algoritma B algoritma D
36. Bila Algoritma pada soal nomor 35 berinput n = 5, maka outputnya adalah :
A. 120 7
720 5040
37. Bila Algoritma pada soal nomor 35 berinput n = 5, maka pemanggilan ulang
function RAT adalah :
A. 1 kali 5 kali
4 kali n kali
40. Bila Algoritma pada soal nomor 39 berinput n = 13, maka outputnya adalah :
A. 55 89
233 144
43. Pencarian ruang solusi dengan menggunakan stack disebut juga dengan istilah :
A. Depth First Search Binary Search
Breadth First Search B. Mergesort
45. Solusi yang diperoleh dengan cara Depth First Search berupa tupel yang :
A. berbeda secara teratur C. sembarang
B. seragam atau sama D. berbeda dan tidak teratur
46. Teknik Divide AND Conquer adalah teknik yang digunakan untuk merancang
sebuah algoritma dengan cara :
A. memecah n input menjadi 2 subset input
B. memecah n input sebanyak k input, k < n
C. memecah n input sebanyak 2 input
D. memecah n input menjadi k subset input, 1 < k ≤ n
49. Pada permainan menara HANOI, algoritma yang paling baik adalah digunakannya
teknik/metode :
A. Backtracking Greedy
Iteratif Rekursif
50. Pada permainan menara HANOI, bila banyaknya piringan adalah 5 buah, maka
banyaknya pemindahan adalah sebanyak :
A. 15 kali 31 kali
16 kali 32 kali