1. Pembuktian suatu teorema memegang peranan yang penting dalam matematika. Di dalam
matematika, secara umum ada dua untuk membuktikan suatu teorema, yaitu secara induktif dan
secara deduktif. Secara deduktif pembuktian didasarkan pada aksioma, definisi, ataupun dalil-dalil
yang telah ada. Pembuktian secara induktif dapat dipergunakan untuk dalil-dalil yang berlaku dalam
domai bilangan cacah. Pembuktian ini didasarkan pada prinsip induksi, yaitu dimulai dengan
beberapa kasus, diasumsikan berlaku untuk kasus tertentu, n=k, dan dari asumsi ini dibuktikan juga
berlaku untuk n=k+1.
10.1 Representasi Aritmetika Dengan Tree
Operasi aritmetika dapat direpresentasikan dengan menggunakan binary tree. Internal vertek untuk
menyatakan operator, sedangkan leaf sebagai operand. Root pada setiap subtree akan sebagai operator. Oleh
karena itu operator yang paling luar (paling akhir dilakukan) sebagai root. Sebagai ilustrasi perhatikan beberapa
contoh berikut :
a. a + b dapat dinyatakan sebagai : •+
•a •b
b. (a+b)*(d/c) dapat dinyatakan sebagai :
•*
•+ •/
•a •b •d •c
( a − b) c + d
c.
(b * c) + d
•/
•+ •+
•^ •d •* •d
•-
•c
•b •c
•a •b
Topik10 Penelusuran dan Optimisasi Pada Graph
10-1
2. Di dalam operasi matematika yang biasa kita pelajari adalah operasiu infik, yaitu operator diletakkan di
antara operand, seperti a+b, a-B, a*b, dan sebagainya. Sebenarnya ada tiga jenis operasi, yaitu : infiks, prefiks,
dan postfiks. Untuk membandingkan ketiganya, perhatikan contoh berikut :
infiks prefiks postfiks
a+b +ab ab+
(a+b)-c -+abc ab+c-
[a*(c-b)]/d /*a-cbd acb-*d/
10.2 Penelusuran Vertek
Bagi komputer operasi prefiks maupun postfiks lebih mudah disbanding infiks. Hal ini berlaku
sebaliknya untuk manusia. Pada bagian ini akan diuraikan bagaimana menelusuri tree sehingga terjadi
pembacaan infiks, prefiks, maupun postfiks.
a. Penelusuran Infiks (Inorder Traversal).
1. Lakukan inorder traversal pada subtree kiri
2. Baca root
3. Lakukan inorder traversal pada subtree kanan
b. Penelusuran Prefiks (Preorder Traversal)
1. Baca root
2. Lakukan inorder traversal pada subtree kiri
3. Lakukan inorder traversal pada subtree kanan
c. Penelusuran Postfiks (Postorder Traversal)
1. Lakukan inorder traversal pada subtree kiri
2. Lakukan inorder traversal pada subtree kanan
3. Baca root
Sebagai ilustrasi perhatikan tree berikut :
•/
•+ •+
Inorder : a-b^c+d/b*c+d
Preorder •^
: /+^-abcd+*bcd •d •* •d
Postorder :•ab-c^d+bc*d+/
-
•c
•b •c
•a •b
5.3. DFS DAN BFS
DFS (Depth-First Search Algorithm) merupakan algoritma untuk menelusuri vertek-vertek suatu
graph, sehingga akan terbentuk suatu spanning tree dari graph tersebut. Algoritma DFS ini adalah :
Topik10 Penelusuran dan Optimisasi Pada Graph
10-2
3. 1. Pilih satu vertek (r) sebagai root, dan masukkan vertek r ke dalam T. Beri v sebagai r.
2. Pilih nilai i terkecil, 2≤i≤n, sedemikian sehingga {v,vi}∈V dan vi belum pernah dikunjungi.
Jika tidak ada i, maka langsung ke langkah 3. Untuk hal lainnya, lakukan :
a. ambil edge {v,vi}ke dalam T,
b. beri v sebagai vi,
c. kembali ke langkah 2.
3. Jika v=r, maka T adalah spanning tree dari graph G, dan selesai.
4. Untuk v≠r, lakukan backtrack dari v. Jika u adalah parent dari vertek v, maka beri nilai v
sebagai u, dan kembali ke langkah 2.
Sebagai ilustrasi dari algoritma di atas, maka akan diterapkan untuk graph berikut :
•g a
• •b •f
•c
•j
•i •e
Misalkan vertek-vertek diurut sesuai dengan : a, b, c, d, …..,h, i, j, maka hasilnya adalah :
1. •d
Pertama ambil vertek a sebagai root, dan T={a}, serta v=a.
2. Vertek yang adjacent dengan a adalah : b, c, d. Ambil b, masukkan edge {a,b} ke dalam T.
v=b, dan looping •h
Vertek yang adjacent dengan b adalah a, d dan e. (a tidak diambil, sebab sudah dikunjungi)
Ambil d, masukkan edge {b,d} ke dalam T. v=d, dan looping
Vertek yang adjacent dengan d adalah a dan b (keduanya telah dikunjungi, maka ke langkah
3.
3. v=d≠a, maka ke langkah 4
4. backtrack dari d dan v=b, dan kembali ke langkah 2.
2. Vertek yang adjacent dengan b adalah a, d, dan e. (a dan d sudah dikunjungi) Ambil e, v=e dan
masukkan edge {b,e} ke dalam T, lalu looping.
Vertek yang adjacent dengan e adalah b, f, h. Ambil f, v=f dan masukkan edge {e,f} ke
dalam T, looping
Vertek yang adjacent dengan f adalah e (sudah dikunjungi), maka ke langkah 3.
3. v=f≠a, maka ke langkah 4
4. backtrack dari f dan v=e, dan kembali ke langkah 2.
2. Vertek yang adjacent dengan e adalah b, f, dan h. Ambil h, v=h dan masukkan edge {e,h} ke
dalam T, lalu looping
Vertek yang adjacent dengan h adalah e (sudah dikunjungi), maka ke langkah 3.
3. v=h≠a, maka ke langkah 4
4. backtrack dari h dan v=e, dan kembali ke langkah 2.
2. Vertek yang adjacent dengan vertek e adalah b, f, h (sudah dikunjungi semua), maka ke langkah 3.
3. v=h≠a, maka ke langkah 4
4. backtrack dari h dan v=e, dan kembali ke langkah 2.
2. Vertek yang adjacent dengan vertek e adalah b, h, dan f (semua suadh dikunjungi), maka ke
langkah 3.
Topik10 Penelusuran dan Optimisasi Pada Graph
10-3
4. 3. v=e≠a, maka ke langkah 4
4. backtrack dari e dan v=b, dan kembali ke langkah 2.
2. Vertek yang adjacent dengan vertek b adalah a, d, dan e (semua suadh dikunjungi), maka ke
langkah 3.
3. v=b≠a, maka ke langkah 4
4. backtrack dari b dan v=a, dan kembali ke langkah 2.
2. Vertek yang adjacent dengan vertek a adalah b, c dan d. Ambil c, dan v=c, ambil edge {a,e} ke
dalam T, lalu looping.
Vertek yang adjacent dengan c adalah a dan g. Ambil g, v=g dan ambil edge {e,g} ke dalam T,
lalu looping
Vertek yang adjacent dengan g adalah c, i dan j. Ambil i, v=i dan ambil edge {g,i} ke dalam T,
lalu looping.
Vertek yang adjacent dengan i adalah g (sudah dikunjungi), maka ke langkah 3.
3. v=i≠a, maka ke langkah 4
4. backtrack dari i dan v=g, dan kembali ke langkah 2.
2. Vertek yang adjacent dengan vertek g adalah c, i, j. Ambil j, v=j dan ambil edge {g,j} ke dalam T,
lalu looping.
Vertek yang adjacent dengan vertek j adalah g (sudah dikunjungi), maka ke langkah 3.
3. v=j≠a, maka ke langkah 4
4. backtrack dari j dan v=g, dan kembali ke langkah 2.
2. Vertek yang adjacent dengan vertek g adalah c, i, j (sudah dikunjungi), maka ke langkah 3.
3. v=c≠a, maka ke langkah 4
4. backtrack dari c dan v=c, dan kembali ke langkah 2.
2. Vertek yang adjacent dengan vertek c adalah a dan g (sudah dikunjungi), maka ke langkah 3.
3. v=c≠a, maka ke langkah 4
4. backtrack dari c dan v=a, dan kembali ke langkah 2.
2. Vertek yang adjacent dengan vertek a adalah b, c, dan d (sudah dikunjungi), maka ke langkah 3.
3. v=a, maka selesai.
Hasilnya adalah :
•g a
• •b •f
•c
•j
•i •e
•d
BFS (Breadth-First Search Algorithm) merupakan algoritma untuk menelusuri vertek-vertek suatu
graph, sehingga akan terbentuk suatu spanning tree dari graph tersebut. Perbedaan dengan DFS adalah
•h
bahwa pada BFS, pembacaan dilakukan pada seluruh level.yang sama. Oleh karena itu tree yang akan
terbentuk cenderung melebar. Algoritma DFS ini adalah :
1. Pilih satu vertek (r) sebagai root, dan masukkan vertek r ke dalam antraian Q. Serta
insialisasi tree T dengan T={r}.
Topik10 Penelusuran dan Optimisasi Pada Graph
10-4
5. 2. Hapuskan vertek terdepan dari Q. Untuk setiap i terkecil, 2≤i≤n, sedemikian sehingga
{v,vi}∈E dan vi belum pernah dikunjungi, masukkan edge {v,vi}ke dalam T.
3. Masukkan vertek yang adjacent dengan vertek v yang dihapus pada langkah (2) tersebut ke
dalam Q dengan urutan yang disesuaikan, dan kembali ke langkah 2.
Sebagai ilustrasi dari algoritma di atas, maka akan diterapkan untuk graph berikut :
•g a
• •b •f
•c
•j
•i •e
Misalkan vertek-vertek diurut sesuai dengan : • db, c, d, …..,h, i, j, maka hasilnya adalah :
a,
•h
a
•g
• •b •f
•c
•j
•i •e
•d
LATIHAN 5
•h
1. Untuk graph berikut lakukan :
a
b c
g
d e f
h
i ja
k l o
p
r q
s t
u v
a. Penelusuran secara inorder
b. w
Penelusuran secara preorder
c. Penelusuran secara postorder
2. Perhatikan operasi aritmetika berikut :
a +b
k
(b.c − ) r
l
a. Buatlah binary tree untuk operasi aritmetika tersebut !
b. Tentukan notasi infiksnya
Topik10 Penelusuran dan Optimisasi Pada Graph
10-5
6. c. Tentukan notasi prefiksnya
d. Tentukan notasi postfiksnya
3. Suatu complete binary T=(V,E) dengan V={a, b, c, …, i, j, k} dan a sebagai root. Jika hasil
penelusuran postorder adalah : d, e, b, h, i, f, j, k, g, c, a. Gambarkan tree ini.
a. Jika tinggi tree ini adalah 3.
b. Jika tinggi subtree kiri dari tree ini adalah 3.
4. Perhatikan graph berikut :
b
a c
d g
e f
h k
Jika vertek diurut dari a, b, …, j, k, tentukan spanning tree dari graph tersebut dengan menggunakan :
i j
a. Depth-first search algorithm (DFS)
b. Bread-first search algorithm (BFS)
5. Soal seperti nomor (4) untuk graph :
a
b
c
d
e f g
i
h
k
j
6. Soal seperti nomor (4) untuk graph : a
b
f
e g
c
BAB 6. OPTIMISASI d
6.1. PENDAHULUAN
Topik10 Penelusuran dan Optimisasi Pada Graph
10-6
7. Optimisasi berkaitan dengan beberapa operasi yang diterapkan pada graph yang terboboti, yaitu graph
dengan setiap edge mempunyai bobot yang tidak harus sama. Ada beberapa optimisasi di dalam graph
terboboti, yaitu :
1. Algoritma Dijkstra : untuk mencari path terpendek dari satu vertek ke vertek lainnya di
dalam graph tersebut.
2. Algoritma Kruskal : Algoritma ini untuk mencari spanning tree dari suatu graph dengan
panjang path antar vertek minimum. Hasil dari algoritma ini adalah minimum spanning tree.
3. Algoritma Prim : algortima ini bertujuan sama dengan algoritma Kruskal.
4. Algoritma Max-Flow Min-Cut : untuk mencari aliran terbesar dari satu vertek ke satu vertek
lainnya.
Di dalam bagian ini hanya akan dibahas algoritma Dijkstra saja.
6.2. ALGORITMA DIJKSTRA
Algoritma Dikstra (Dikstra’s shortest path algorithm) merupakan algoritma untuk mencari lintasan
(path) terpendek dari suatu vertek ke vertek-vertek lainnya dalam suatu graph G=(V,E). Di dalam hal ini edge-
edge dalam graph G tersebut mempunyai bobot yang berbeda (disebut weighted graph).
Algoritma Dikstra ini adalah sebagai berikut :
1. Inisialisasi : i=0, S0={v0}. Beri label vertek v0 dengan (0,-) dan setiap vertek v≠v0 diberi label
(∝,-).
Jika n=1, V={v0} dan selesai.
Jika n>1, lanjutkan ke langkah 2.
2. Untuk setiap v∈ S i , gantikan (jika mungkin) label pada v dengan (L(v), y), dengan :
L(v) = min {L(v), L(u)+wt(u,v)}
u∈Si
y adalah vertek di dalam Si dengan L(v) minimum.
3. Jika setiap vertek di S i (0≤i≤n-2) berlabel (∝,-) maka selesai. Jika tidak, maka lakukan :
a. Pilih vertek vi+1 dengan label L( vi+1) minimum, lalu :
b. Si+1=Si∪{ vi+1}
c. i=i+1, jika i=n-1, maka selesai. Jika tidak, maka kembali ke langkah 2.
Sebagai ilustrasi algortima di atas, maka perhatikan contoh dengan graph berikut :
11 7
•c •f
6
11 9
6 4 11 4
9 •g
•b
4
3 7
•a •h 5
5
Topik10 Penelusuran dan Optimisasi Pada Graph
10-7
11
17
8. Hasil dari graph tersebut adalah :
11 7
(0,-) • c • f (6,c)
6
11 9
(22,a)
6 4 11 4
9 • g (14,h)
•b LATIHAN 6 4
3 7
1. • a (17,f)
Perhatikan graph berikut : •h 5
(10,f)
5
a
5
10 4 11
b
c 3 17
20 10
5 d
4 5 8
e f g 30
i
10 h 2
15 6
6 k
j
20
a. Lakukan operasi dengan algoritma Dijkstra untuk memperoleh jarak terpendek dari vertek a ke setiap
vertek lainnya.
2. Soal sama seperti nomor (1) untuk graph berikut :
Diketahui bobot edge : a
{a,c}=10 {a,d}=20
{a,e}=15 {a,g}=5
{b,c}=3 {b,d}=2 b
{b,f}=1 {c,d}=1
{c,g}=1 {d,e}=2 f
e g
{e,f}=3 {f,g}=2
c d
Topik10 Penelusuran dan Optimisasi Pada Graph
10-8
9. Hasil dari graph tersebut adalah :
11 7
(0,-) • c • f (6,c)
6
11 9
(22,a)
6 4 11 4
9 • g (14,h)
•b LATIHAN 6 4
3 7
1. • a (17,f)
Perhatikan graph berikut : •h 5
(10,f)
5
a
5
10 4 11
b
c 3 17
20 10
5 d
4 5 8
e f g 30
i
10 h 2
15 6
6 k
j
20
a. Lakukan operasi dengan algoritma Dijkstra untuk memperoleh jarak terpendek dari vertek a ke setiap
vertek lainnya.
2. Soal sama seperti nomor (1) untuk graph berikut :
Diketahui bobot edge : a
{a,c}=10 {a,d}=20
{a,e}=15 {a,g}=5
{b,c}=3 {b,d}=2 b
{b,f}=1 {c,d}=1
{c,g}=1 {d,e}=2 f
e g
{e,f}=3 {f,g}=2
c d
Topik10 Penelusuran dan Optimisasi Pada Graph
10-8
10. Hasil dari graph tersebut adalah :
11 7
(0,-) • c • f (6,c)
6
11 9
(22,a)
6 4 11 4
9 • g (14,h)
•b LATIHAN 6 4
3 7
1. • a (17,f)
Perhatikan graph berikut : •h 5
(10,f)
5
a
5
10 4 11
b
c 3 17
20 10
5 d
4 5 8
e f g 30
i
10 h 2
15 6
6 k
j
20
a. Lakukan operasi dengan algoritma Dijkstra untuk memperoleh jarak terpendek dari vertek a ke setiap
vertek lainnya.
2. Soal sama seperti nomor (1) untuk graph berikut :
Diketahui bobot edge : a
{a,c}=10 {a,d}=20
{a,e}=15 {a,g}=5
{b,c}=3 {b,d}=2 b
{b,f}=1 {c,d}=1
{c,g}=1 {d,e}=2 f
e g
{e,f}=3 {f,g}=2
c d
Topik10 Penelusuran dan Optimisasi Pada Graph
10-8
11. Hasil dari graph tersebut adalah :
11 7
(0,-) • c • f (6,c)
6
11 9
(22,a)
6 4 11 4
9 • g (14,h)
•b LATIHAN 6 4
3 7
1. • a (17,f)
Perhatikan graph berikut : •h 5
(10,f)
5
a
5
10 4 11
b
c 3 17
20 10
5 d
4 5 8
e f g 30
i
10 h 2
15 6
6 k
j
20
a. Lakukan operasi dengan algoritma Dijkstra untuk memperoleh jarak terpendek dari vertek a ke setiap
vertek lainnya.
2. Soal sama seperti nomor (1) untuk graph berikut :
Diketahui bobot edge : a
{a,c}=10 {a,d}=20
{a,e}=15 {a,g}=5
{b,c}=3 {b,d}=2 b
{b,f}=1 {c,d}=1
{c,g}=1 {d,e}=2 f
e g
{e,f}=3 {f,g}=2
c d
Topik10 Penelusuran dan Optimisasi Pada Graph
10-8