Professional Documents
Culture Documents
Pengantar
Definisi. Suatu graf sederhana G=(V,E) terdiri dari himpunan tak kosong dari simpul (vertex)
V, dan himpunan pasangan tak berurut anggota berlainan dari V yang disebut sebagai garis
hubung (edge) E.
Graf sederhana mirip seperti graf berarah, tetapi arah garis hubungnya tidak ditentukan (tidak
memiliki arah). Kadangkala kita ingin memodelkan berbagai hubungan antar simpul yang
tidak mungkin dilakukan dengan graf sederhana. Pada kasus ini, kita harus memakai
multigraf.
Definisi. Suatu multigraf G=(V,E) terdiri dari himpunan simpul V, himpunan garis hubung E,
dan sebuah fungsi f dari E ke {{u, v} | u, v ∈ V, u ≠ v}.
Garis hubung e1 dan e2 disebut garis hubung ganda atau garis hubung sejajar jika f(e1)=f(e2).
Catatan:
• Garis hubung dalam multigraf tidak perlu didefinisikan sebagai pasangan, tapi bisa
berjenis apapun.
• Loop tidak diperbolehkan di dalam multigraf (u ≠ v).
Contoh 8.1: Suatu multigraf G dengan simpul V={a, b, c, d}, garis hubung {1, 2, 3, 4, 5} dan
fungsi f dengan f(1)={a, b}, f(2) = {a, b}, f(3) = {b, c}, f(4) = {c, d} dan f(5) = {c, d} dapat
digambarkan sebagai berikut.
1 4
b 3 c d
a
2 5
Definisi. Suatu pseudograf G=(V, E) terdiri dari himpunan simpul V, himpunan garis hubung
E, dan fungsi f dari E ke {{u, v} | u, v ∈ V}.
Suatu garis hubung disebut loop jika f(e) = {u, u} untuk suatu u∈V.
Definisi. Suatu graf berarah G=(V, E) terdiri dari himpunan simpul V dan himpunan garis
hubung E yaitu pasangan berurut anggota V.
Definisi. Suatu multigraf berarah G=(V, E) terdiri dari himpunan simpul V, himpunan garis
hubung E, dan fungsi f dari E ke {(u, v) | u, v ∈ V}.
Garis hubung e1 dan e2 disebut sebgai garis hubung ganda jika f(e1) = f(e2).
Contoh 8.2: Suatu multigraf berarah G dengan simpul V={a, b, c, d}, garis hubung {1, 2, 3, 4,
5} dan fungsi f dimana f(1) = (a, b), f(2) = (b, a), f(3) = (c, b), f(4) = (c, d) dan f(5) = (c, d)
digambarkan sebagai berikut.
1 4
b 3 c d
a
2 5
Risalah dari beberapa jenis graf dan sifat-sifatnya diiberikan pada tabel berikut ini.
Cirebon Jakarta
Ponorogo
Bandung
Madiun
Tasikmalaya
Contoh 8.4: Di dalam suatu turnamen sepakbola, setiap tim bertanding dengan tim lain tepat
satu kali. Bagaimana cara merepresentasikan hasil turnamen (suatu tim mengalahkan tim
lain)? Kita harus menggunakan graf berarah dengan garis hubung (a, b) menunjukkan tim a
mengalahkan tim b.
AC Milan Persib
Definisi. Derajat dari suatu simpul pada graf tak berarah adalah banyaknya garis hubung
yang berasal dari- /berakhir ke- simpul tersebut, kecuali loop di dalam simpul yang
menyumbang derajat simpul sebanyak dua.
Dengan kata lain, derajat dari simpul dapat ditentukan secara sederhana, yaitu dengan
menghitung banyaknya garis yang menyentuh simpul tersebut. Derajat dari suatu simpul v
dituliskan sebagai deg(v). Simpul dengan derajat nol disebut sebagai simpul yang terisolasi,
karena tidak terhubung (adjacent) dengan simpul lain manapun.
Catatan: Suatu simpul yang memiliki loop setidaknya akan berderajat 2 dan, perdefinisi,
tidak terisolasi, meski dia tidak terhubung ke simpul yang lain. Simpul berderajat satu disebut
sebagai simpul yang tergelantung (pendant). Simpul ini terhubung dengan tepat satu buah
simpul lainnya.
Contoh 8.5: Diantara graf berikut, manakah simpul yang terisolasi, yang tergelantung, dan
berapakah derajat maksimumnya? Tentukan juga jenis dari graf?
i h
d
a e
g
b c f j
Jawab: Simpul f terisolasi, dan simpul a, d, dan j tergelantung. Derajat maksimum adalah
deg(g)=5. Graf tersebut merupakan pseudograf (tak berarah, loop).
Contoh 8.6: Amati graf yang sama dan tentukan banyaknya garis hubung dan jumlah dari
derajat semua simpulnya.
Teorema Handshaking. Misalkan G = (V, E) suatu graf tak berarah dengan garis hubung e.
Maka
2e = ∑ deg ( v )
v∈V
Catatan: Teorema ini tetap berlaku meskipun pada graf terdapat garis hubung ganda maupun
loop ganda.
Contoh 8.7: Ada berapa garis hubungkah dalam suatu graf yang memiliki 6 simpul, yang
masing-masing simpulnya berderajat 10?
Jawab: Jumlah seluruh derajat simpul adalah 6⋅10=60. Menurut teorema handshaking, maka
2e=60 sehingga e = 30. Jadi akan ada 30 buah garis hubung.
Teorema. Suatu graf yang tak berarah, akan selalu memiliki simpul berderajat ganjil dengan
jumlah genap.
Ide: Ada tiga kemungkinan untuk menambahkan garis hubung untuk menyambung dua
simpul dalam graf, yakni.
Sebelum Sesudah
Satu simpul berderajat ganjil, yang ⇒ Satu simpul berderajat genap, yang
lainnya berderajat genap lainnya berderajat ganjil
Ada dua kemungkinan menambahkan suatu loop ke simpul dalam graf , yakni
Jadi, jika dalam graf ada sejumlah genap simpul berderajat ganjil, hasil penambahan garis
hubung masih saja menghasilkan simpul berjumlah genap. Maka, karena suatu graf tak
berarah tanpa garis hubung memiliki sejumlah genap simpul berderajat ganjil (nol), hal yang
sama berlaku untuk sebarang graf tak berarah. Bukti dapat dipelajari dari buku referensi.
Definisi. Jika (u, v) suatu garis hubung dari graf dengan garis hubung berarah G, u disebut
terhubung ke (adjacent to) v, dan v dikatakan terhubung dari (adjacent from) u.
Simpul u disebut sebagai simpul awal (initial vertex) dari (u,v), dan v disebut sebagai simpul
akhir (terminal vertex) dari (u,v). Simpul awal dan simpul akhir dari suatu loop adalah sama.
Definisi. Dalam graf dengan garis hubung berarah, derajat kedalam (in-degree) dari simpul v,
dituliskan sebagai deg-(v), adalah banyaknya garis hubung dengan v sebagai simpul akhirnya.
Derajat keluar (out-degree) dari v, dituliskan sebagai deg+(v), adalah banyaknya garis hubung
dengan v sebagai simpul awalnya.
Bagaimana perubahan derajat keluar dan kedalam suatu simpul terhadap penambahan suatu
loop ke simpul tsb? Penambahan ini meningkatkan baik derajat keluar maupun kedalam dari
simpul yang bersangkutan sebesar satu.
Contoh 8.8: Berapakah derajat keluar dan kedalam dari simpul a, b, c, d pada graf berikut?
deg-(a) = 1 a deg-(b) = 4
deg+(a) = 2 b deg+(b) = 2
deg-(d) = 2 deg-(c) = 0
deg+(d) = 1 d c deg+(c) = 2
∑ deg ( v ) = ∑ deg ( v ) = E
v∈V
−
v∈V
+
Ini mudah diperiksa, sebab setiap penambahan garis hubung baru akan meningkatkan baik
derajat kedalam maupun derajat keluar sebanyak satu.
Graf-Graf Khusus
Definisi: Graf lengkap (complete graph) pada n buah simpul, dituliskan sebagai Kn, adalah
graf sederhana yang mengandung tepat satu garis hubung antara dua simpul yang berbeda.
K1 K2 K3 K4 K5
Definisi. Siklus (cycle) Cn, n≥3, terdiri atas n buah simpul v1, v21, …, vn dan garis hubung
{v1,v2}, { v1, v3}, …, { vn-1, vn}, { vn, v1}.
C3 C4 C5 C6
Definisi. Pemberian satu simpul tambahan pada suatu siklus Cn, n ≥ 3, dan lalu
menghubungkan simpul tsb ke setiap simpul pada Cn dengan garis hubung baru akan
menghasilkan roda (wheel).
Definisi. Kubus-n (n-cube) dituliskan sebagai Qn adalah graf yang simpulnya merepresen-
tasikan string 2n bit sepanjang n. Dua simpul terhubung jika dan hanya jika bit string yang
direpresentasikannya berbeda tepat satu bit.
110 111
10 11 100 101
010 011
0 1
00 01 000 001
Q1 Q2 Q3
Definisi. Suatu graf sederhana G disebut bipartite jika himpunan simpul V-nya dapat
dipartisi menjadi dua himpunan tak kosong yang tak beririsan V1 dan V2 sedemikian hingga
setiap garis hubung dalam graf menghubungkan suatu simpul di V1 dengan simpul di V2
(sedemikian hingga tak ada garis hubung di dalam G menghubungkan dua simpul di V1
maupun di V2).
Sebagai conoth, tinjau suatu graf yang merepresen-tasikan setiap penduduk di suatu desa
dengan simpul dan setiap pernikahan dengan garis hubung. Graf ini bipartite, karena setiap
garis hubung menghubungkan simpul dalam himpunan bagian penduduk pria dengan simpul
didalam himpunan bagian penduduk wanita (dalam pernikahan tradisional).
v1 v1 v6
v6
Contoh 8.10: Apakah C6
bipartite? v5 v2
v2 v5
v3 v4
v3 v4 Ya, sebab C6 bisa ditampilkan
sebagai berikut:
Definisi. Graf bipartite lengkap Km,n adalah graf yang himpunan simpulnya dipartisi kedalam
dua himpunan bagian, masing-masing dengan m dan n buah simpul. Dua simpul terhubung
jika dan hanya jika mereka berada di himpunan bagian yang berbeda.
K3,2 K3,4
subgraf dari K5
K5
Definisi. Gabungan dari dua graf sederhana G1 = (V1, E1) dan G2 = (V2, E2) adalah graf
sederhana dengan himpunan simpul V1∪V2 dan himpunan garis hubung E1∪E2.
G1 G2 G1 ∪ G2 = K5
Representasi Graf
Perhatikan dua graf berikut ini. Simpula awal, tetangga dan simpul akhir didaftarkan pada
tabel di bawahnya.
a
a
d b
b
d
c c
Definisi: Misalkan G = (V, E) adalah sebuah graf sederhana dengan |V| = n. Anggap simpul
pada G disusun dengan urutan v1, v2 …, vn Matriks kedekatan (Adjacency matrix) dari graf
G, AG, yang berkaitan dengan simpul-simpul, adalah sebuah matriks boolean n×n dengan
elemen ke (i, j) berharga 1 jika vi dan vj bertetangga, dan selainnya itu berharga 0.
Dengan kata lain, untuk sebuah matriks kedekatan A = ⎡⎣ aij ⎤⎦ , maka berlaku
Untuk representasi graf dengan garis hubung ganda (multiple edge), matriks boolean tidak
bisa dipakai dan sebagai gantinya dipergunakan matriks bilangan cacah. Elemen ke (i, j) dari
matriks tersebut sama dengan jumlah garis hubung yang terdapat pada kedua simpul {vi, vj}.
Definisi. Misalkan G = (V, E) sebuah graf tak berarah dengan |V| = n. Anggap simpul dan
garis hubung pada G disusun dengan urutan seperti v1, v2, …, vn dan e1, e2, …, em. Matriks
insiden (Incidence matrix) dari G yang berkaitan dengan simpul dan garis hubung adalah
matriks boolean n×m dengan elemen ke (i, j) =1 jika garis ej terhubung dengan simpul vi, dan
selain itu berharga 0.
Dengan kata lain , untuk sebuah incidence matrix M = [mij], maka berlaku
Catatan : Matriks insiden dari graf tidak berarah, setiap kolomnya akan berisi 2 buah nilai 1
jika garis hubung menghubungkan dua buah simpul dan berisi 1 buah nilai 1 untuk loop.
Graf-Graf yang Isomorfis
Definisi. Graf sederhana G1 = (V1, E1) dan G2 = (V2, E2) disebut isomorfis jika ada sebuah
fungsi bijektif (satu-ke-satu dan onto) dari V1 ke V2 dengan sifat bahwa a bertetangga dengan
Fungsi f seperti itu disebut isomorfisme. Dengan kata lain, G1 dan G2 adalah isomorfis jika
simpul-simpulnya dapat diurutkan dengan suatu cara sedemikian rupa sehingga matriks
kedekatan M G1 dan M G2 adalah identik. Secara visual, dua buah graf, G1 dan G2, isomorfis
jika graf-graf tersebut dapat disusun dengan suatu cara sedemikian rupa sehingga
tampilannya identik (tentu tanpa merubah ketetanggaan).
Menentukan dua buah graf tidak isomorfis lebih mudah dibandingkan dengan menentukan
apakah dua buah graf isomorfis. Untuk dua buah graf sederhana dengan masing-masing
simpulnya berjumlah n buah, maka akan ada n! kemungkinan isomorfisme yang harus
diperiksa. Untuk itu kita dapat memeriksa invarian, yaitu, sifat yang harus dimiliki oleh dua
buah graf sederhana yang isomorfis. Keduanya haruslah
memiliki jumlah simpul yang sama, dan
jumlah garis hubung yang sama , dan
derajat dari simpul-simpulnya sama.
Perhatikan bahwa dua graf yang salah satu dari invarian di atas berbeda pasti menyebabkan
kedua graf tersebut tidak isomorfis, tetapi jika seluruhnya sesuai, belum tentu graf tersebut
isomorfis.
a
a
e
b e
c b
d c d
Jawab : Ya, keduanya isomorfis karena dapat disusun sehingga terlihat identik. Dapat
diamati, jika pada graf sebelah kanan kita gerakkan simpul b kesebelah kiri garis hubung
b a a
e
e
c b
d c d
Jawab : Tidak, karena derajat dari simpul-simpulnya berlainan. Simpul d pada graf dikanan
berderajat satu, tetapi tidak ada satupun simpul pada graf dikiri yang berderajat 1.
Konektivitas Graf
Definisi. Sebuah lintasan (path) dengan panjang n dari u ke v, dimana n adalah bilangan bulat
positif dalam sebuah graf tidak berarah adalah sebuah urutan garis hubung e1, e2, …, en dari
graf sehingga f(e1)={x0, x1}, f(e2) = {x1, x2}, f(en) = {xn-1, xn}, dgn x0= u dan xn = v.
Jika graf tersebut adalah sebuah graf sederhana, kita menuliskan lintasan tersebut dengan
urutan/ deretan simpul x0, x1, …, xn, karena secara unik dapat menentukan lintasan. Lintasan
adalah sebuah sirkit jika dimulai dan diakhiri pada simpul yang sama, yaitu jika u = v.
Definisi (Lanjutan). Lintasan atau sirkit ini disebut melalui (pass through/ traverse) x0, x1,
…, xn-1.
Lintasan atau sirkit disebut sederhana jika tidak mengandung garis yang sama lebih dari
sekali.
Definisi. Graf tak berarah disebut terhubung (connected) jika ada lintasan diantara setiap
pasangan dari simpul yang berbeda dalam graf
a
a b
b
d
d e
c e
c
terhubung f tak terhubung
Sebagai contoh, setiap dua komputer dalam jaringan dapat berkomunikasi jika dan hanya jika
graf dari jaringan tersebut terhubung. [Catatan: sebuah graf yang mengandung hanya satu
simpul selalu terhubung karena tidak berisi suatu pasangan simpul yang berbeda]. Gambar di
atas menunjukkan contoh-contoh graf yang terhubung dan yang tak-terhubung.
Teorema. Selalu ada lintasan sederhana antara setiap pasangan simpul yang berbeda dari
suatu graf-tak-berarah yang terhubung
Definisi. sebuah graf yang tidak terhubung adalah gabungan dari dua atau lebih subgraf yang
terhubung dengan masing-masing pasangan darinya tidak memiliki simpul bersama (disjoint).
Subgraf-subgraf yang terhubung tetapi disjoint ini disebut komponen-komponen terhubung
dari graf.
g
d h
a
e
i
f j
b c
Definisi. Sebuah graf berarah disebut terhubung kuat (strongly connected) jika ada sebuah
lintasan dari a ke b dan dari b ke a untuk semua pasangan simpul a, b pada graf.
Definisi. Sebuah graf berarah disebut terhubung lemah (weakly connected) jika hanya ada
sebuah lintasan diantara dua simpul dalam graf tidak berarahnya. ( Ada lintasan dari a ke b,
tetapi tidak dari b ke a, atau sebaliknya)
Contoh 8.18: Apakah graf berarah berikut ini terhubung kuat atau lemah?
a a
b b
d d
c c
Terhubung lemah, karena (misalnya) Terhubung kuat, karena ada lintasan diantara
tidak ada lintasan dari b ke d. seluruh kemungkinan pasangan simpul.
Jumlah dan ukuran dari komponen dan sirkit terhubung merupakan invarian berkaitan dengan
isomorfisme dari graf sederhana
Bo go r
25
180 Bandung
Jakarta
400
600
Yogyakarta
Pembobotan graf dapat juga dipakai untuk memodelkan jaringan komputer dengan response
time atau biaya sebagai bobotnya. Satu pertanyaan yang sangat penting yang dapat kita
selidiki pada graf seperti ini adalah: “Yang manakah lintasan terpendek antara dua simpul
dalam graf, yaitu, lintasan dengan jumlah bobot minimal sepanjang jalannya?“ Hal ini
misalnya berkaitan dengan koneksi tercepat pada jaringan komputer atau hubungan lintasan
kereta terpendek
Algoritma Dijkstra
Algoritma Dijkstra adalah sebuah prosedur iteratif untuk mencari lintasan terpendek antara
dua simpul, a dan z, di dalam graf dengan pembobot. Prosedur ini dilaksanakan dengan cara
mencari panjang lintasan terpendek dari sebuah simpul pendahulu dan menambahkan simpul-
simpul tersebut ke himpunan simpul S. Algoritma berhenti setelah simpul z tercapai.
Pseudocode dari algoritma Dijkstra dapat dilihat di bawah ini.
Contoh 8.20: Tentukan lintasan terpendek dari graf berikut ini dengan menggunakan
algoritma Dijkstra.
STEP-0 STEP-1
b∞ 5 d b 4(a) 5 d ∞
∞
4 6 4 6
a 8 ∞ a 8 ∞
0 1 2 z 0 1 2 z
2 2
3 3
c∞ 10 e ∞ c 2(a) 10 e ∞
4 6 4 6
a 8 ∞ a ∞
z 8 z
0 1 2 0 1 2
2 2
3 3
c 2(a) 10 e 12 (a, c) c 2(a) 10 e 12 (a, c)
STEP-4 STEP-5
4 6 4 6
a a 8
8 z z
0 1 2 0 1 2
14 (a, c, b, d) 13 (a, c,
2 2 b, d, e)
3 3
c 2(a) 10 e
10(a,ec, b, d) c 2(a) 10 e
10(a, c, b, d)
STEP-6:
b 3 (a, c) 5 d 10 (a, c, b)
4 6
a 8
0 1 2 z
13 (a, c,
2 b, d, e)
3
c 2(a) 10 e
10(a, c, b, d)
Teorema. Algoritma Dijkstra akan mencari panjang lintasan terpendek antara dua simpul
dalam graf yang terhubung, sederhana, tidak berarah, dengan pembobot.
Kita dapat merepresentasikan kota-kota dan jarak nya dengan sebuah graf dengan pembobot,
lengkap, tidak berarah. Masalahnya adalah menentukan sirkit dengan total bobot yang
minimum dan setiap simpul dikunjungi tepat satu kali.
Contoh 8.21: Lintasan mana yang akan diambil oleh traveling salesman untuk mengunjungi
kota-kota berikut? (Jarak dinyatakan dalam kilometer).
Jo r o n g
550
650 700
Jogja
700
Jakarta 200
600 Semarang
Jawab: Lintasan terpendek adalah Jogja, Semarang, Jakarta, Jorong, Jogja (2,000 Km).
Contoh8.22: Diberikan n buah simpul, berapa banyak siklis Cn berbeda, yang dapat kita
bentuk dengan menghubungkan simpul-simpul tersebut dengan garis hubung?
Cn = (n – 1)!/2.
Sampai saat ini belum ada algoritma yang dapat menyelesaikan masalah TSP dengan
kompleksitas polynomial worst-case time complexity .Ini artinya, untuk jumlah simpul yang
banyak, penyelesaian TSP (secara analitik) tidak praktis. Dalam kasus ini, kita dapat
menggunakan algoritma pendekatan yang efisien dalam menentukan sebuah lintasan, dimana
lintasan yang diperoleh mungkin sedikit lebih panjang dibanding lintasan traveling salesman
yang seharusnya tetapi dengan kompleksitas perhitungan polinomial, misalnya dengan
algoritma jaringan syaraf tiruan.
Karena tree tidak mempunyai sirkit sederhana, maka tidak akan ada garis-hubung paralel atau
loop didalam sebuah tree. Oleh karena itu, tree haruslah sebuah graf yang sederhana.
Teorema. Sebuah graf tidak berarah adalah tree jika dan hanya jika ada sebuah lintasan
sederhana yang unik antara simpul-simpulnya.
Gambar berikut ini menunjukkan graf yang berupa tree dan yang bukan tree.
t re e bukan tree
Definisi. Sebuah graf tidak berarah yang tidak berisi sirkit sederhana dan tidak perlu
terhubung disebut sebuah forest.
Franky Jo n i Petra ls
bin spool
⋅
Tree di samping menyatakan ekspresi aritmatika
+ -
(y + z)⋅(x - y)
y z x y
Definisi. Rooted-tree disebut sebuah m-ary tree jika setiap simpul internal tidak memiliki
lebih dari m children. Sebuah tree disebut full m-ary tree jika setiap simpul internal memiliki
tepat m children. Khususnya, m-ary tree dengan m = 2 disebut sebagai binary tree.
computer power
Untuk melakukan pencarian sebuah item x pada BST, kita dapat memulai dari root dan
membandingkan key-nya dengan x. Jika x lebih kecil dari key, kita teruskan ke child kiri dari
simpul tersebut, dan jika x lebih besar dari key, kita teruskan ke sebelah kanan. Prosedur
tersebut diulang terus sampai kita menemukan item yang kita cari atau kita tidak dapat
meneruskannya lebih lanjut lagi. Untuk n item, pencarian dapat dibentuk dengan jumlah
langkah maksimumsebesar ⎡log(n + 1)⎤
Definisi. Misalkan G sebuah graf sederhana. Pohon pembentang (spanning tree) dari G
adalah sebuah sub-graf dari G yang merupakan tree yang berisi setiap simpul dari G.
Catatan: Pohon pembentang dari G=(V, E) adalah graf terhubung pada V dengan jumlah
garis minimum = (|V| - 1).
Contoh 8.23: Ketika musim dingin, suhu di Boston bisa menjadi sangat dingin, sehingga
keenam buah universitas di wilayah ini memutuskan untuk membangun sistem terowongan
yang akan menghubungkan seluruh perpustakaan di universitas yang ada di Boston. Berikut
ini adalah graf lengkap dari rancangan (awal) terowongan tersebut.
MIT
Boston Univ
Tufts Univ
Univ Mass
Akan ada suatu pohon pembentang dari graf ini yang menghubungkan seluruh perpustakaan
dengan jumlah terowongan yang minimum. Sebagai contoh, pohon pembentang berikut ini
yang menyatakan lima buah terowongan sudah cukup untuk menghubungkan ke enam buah
perpustakaan.
MIT
Boston Univ
Tufts Univ
Univ Mass
Masalah berikutnya adalah bagaimana cara menentukan sistem terowongan tersebut dengan
biaya semurah mungkin. Inilah yang disebut sebagai masalah pohon pembentang minimum
(MST-Minimum Spanning Tree). MST pada graf terhubung dan dengan pembobot adalah
sebuah pohon pembentang yang mempunyai jumlah bobot paling kecil. Jika diberikan sebuah
8 4
2
MIT
9 5
3
6
Boston Univ 4
9 4 6 Tufts Univ
5
4
Univ Mass
Dengan melihat graf diatas, diperoleh bahwa biaya termurah adalah 20 Milyar rupiah.
Untuk graf dengan ukuran besar, diperlukan algoritma untuk mencari MST. Dua diantaranya
yang akan kita bahas adalah algoritma Prim dan algoritma Kruskal.
Algoritma Prim
Berikut ini langkah-langkah dalam algoritma Prim :
• Mulai dengan memilih suatu garis dengan bobot terkecil, dan letakkan pada pohon
pembentang,
• Secara berurutan tambahkan pada garis-hubung dengan bobot minimum yang
terhubung pada simpul yang telah ada pada tree dan tidak membentuk sirkit sederhana
dengan garis-garis yang telah ada pada tree
• Berhenti saat (n – 1) buah garis-hubung telah ditambahkan.
Algoritma Kruskal
Algoritma Kruskal identik dengan algoritma Prim, kecuali bahwa algoritma ini tidak
membutuhkan garis-hubung baru untuk dihubungkan ke simpul yang telah ada pada tree.
Idenya: Kita mulai pada root dari pohon keputusan, lalu bergerak turun, yakni, membuat
rangkaian keputusan, sampai tercapai solusi atau sampai pada situasi dimana tidak ada solusi
yang didapatkan. Dalam kasus terakhir, lacak-balik ke parent dari simpul terkini dan ambil
lintasan lain turun darinya. Jika seluruh lintasan dari simpul ini telah dikaji, lacak-balik ke
parent-nya. Teruskan prosedur sampai kita mendapatkan solusi atau tidak terdapat solusi
(tidak ada lagi lintasan yang dapat dicoba).
Contoh 8.24 : [Masalah n-queen] Bagaimana cara menempatkan n buah queen pada papan
catur berukuran n×n sedemikian hingga tidak ada dua queen dapat saling menangkap/
memakan?
Jelaslah bahwa pada suatu solusi dari masalah n-queen, akan ada tepat satu queen pada
masing-masing kolom dari papan. Oleh karena itu, kita dapat menggambarkan solusi dari
masalah ini sebagai rangkaian dari n buah keputusan :
Keputusan 1: Tempatkan queen pada kolom ke-1
Keputusan 2: Tempatkan queen pada kolom ke-2
….
…
Keputusan n: Tempatkan queen pada kolom ke-n
Kita sekarang akan menyelesaikan masalah 4-queens menggunakan metoda backtracking.
Q
Q
Q Q
Q Q
Q
Q
Q
Q
Kita dapat juga menggunakan metoda backtracking untuk menuliskan program “pintar” yang
dapat memainkan suatu game anatara komputer dengan manusia sebagai lawannya.
Contoh 8.25: Pada permulaan permainan, ada 7 buah koin diatas meja. Pemain pertama
mendapat giliran pertama, kemudian pemain ke-2, dst, bergantian. Setiap mendapat giliran,
pemain mengambil 1, 2, atau 3 koin. Pemain yang dapat mengambil seluruh koin tersisa
adalah yang keluar sebagai pemenangnya
Marilah kita asumsikan bahwa komputer (C) merupakan pemain pertama yang harus
melakukan pergerakan pertama. Kemudian permainan dapat gambarkan sebagai rangkaian
dari keputusan, dimana keputusan pertama oleh komputer, ke-2 oleh manusia, ke-3 oleh
komputer , dst. Sampai seluruh koin habis diambil. Komputer ingin membuat keputusan yang
C 1 2 7 3
6 5 4
H 1 2 1 1 2 3
5 4 4 3 2 1
C 1 1 2 3 1 2 3 3 2 1
4 3 2 1 3 2 1 C C C
H 1 2 3 3 2 1 3 2 1
3 2 1 H H H H H H
C 3 2 1
C C C
Komputer harus mulai dengan mengambil 3 buah koin agar terjamin dia akan selalu menang .
Untuk permainan lain yang lebih kompleks dan menarik seperti catur, tidak mungkin
memeriksa setiap kemungkinan urutan pergerakan. Pemain komputer hanya melihat beberapa
jumlah pergerakan tertentu ke depan dan memperkirakan peluang dari kemenangan.
Ada beberapa hal yang harus diperhatikan ketika menggunakan VLC. Misalnya, kita ingin
mengkodekan karakter “e” dengan bit “0”, “a” dengan “1”, dan “t” dengan “01”. Bagaimana
Untuk menghindari kerancuan ini, kita dapat menggunakan kode prefiks (prefix code). Pada
kode prefiks, bit string untuk sebuah karakter tidak pernah akan menjadi prefiks (bagian
pertama) dari bit string karakter lainnya. Sebagai contoh, pengkodean “e” dengan “0”, “a”
dengan “10”, dan “t” dengan “11” adalah kode prefiks. Maka, kata “tea” akan dikodekan
sebagai “11010”. Bit string ini adalah unik karena hanya kata tea dan tidak ada kata lain yang
dapat dikodekan dengan hasil yang sama.
Kode prefiks dapat disusun dengan bantuan pohon biner, dimana karakter adalah label dari
leaf dalam pohon biner tersebut. Garis dari tree dilabeli sedemikian hingga garis ke child kiri
diberi bit “0” dan ke ichild kanan dengan bit “1”. Bit string yang dipakai untuk mengkodekan
karakter adalah rangkaian label dari garis dalam lintasan yang unik dari root ke leaf yang
dilabeli dengan karakter tersebut. Maka, pohon biner untuk contoh pengkodean “tea” yang
telah dibahas adalah sebagai berikut.
0 1
Pada pohon biner ini tidak ada leaf yang dapat menjadi ancestor
e
0 1
dari leaf lainnya. Sehingga, tidak ada kode dari karakter dapat
menjadi prefix dari kode karakter lainnya. Inilah yang dimaksud
a t
dengan kore prefiks.
Untuk menentukan kode yang optimal (terpendek) dari suatu string, pertama kita harus
mencari frekuensi karakter dalam string tersebut. Ambil contoh string
“eeadfeejjeggebeeggddehhhececddeciedee”
Untuk alfabet berisi n huruf, algoritma Huffman mulai dengan n simpul, satu untuk masing-
masing huruf, dilabeli dengan huruf dan frekuensinya. Kita kemudian menentukan 2 buah
simpul yang paling kecil frekuensinya dan gantikan mereka dengan tree dimana root dilabeli
dengan jumlah dari kedua frekuensi tersebut dan yang dua childrennya adalah dua simpul
yang kita gantikan. Pada langkah berikutnya, kita menentukan 2 frekuensi terendah antara
simpul-simpul tunggal dan root-root dari tree-tree yang telah kita buat. Ini diulang sehingga
kita dapatkan tree tunggal.
STEP-1
1 1 1 1 2 3 3 4 6 15
a b f i j c h g d e
STEP-2
2 1 1 2 3 3 4 6 15
f i j c h g d e
1 1
a b
STEP-3
2 2 2 3 3 4 6 15
j c h g d e
1 1 1 1
a b f i
2 4 3 3 4 6 15
c h g d e
1 1 2 2
a b j
1 1
f i
STEP-5
5 4 3 4 6 15
h g d e
2 3 2 2
c j
1 1 1 1
a b f i
STEP-6
5 4 7 6 15
d e
2 3 2 2 3 4
c j h g
1 1 1 1
a b f i
9 7 6 15
d e
5 4 3 4
h g
2 3 2 2
c j
1 1 1 1
a b f i
STEP-8
9 13 15
e
5 4 7 6
d
2 3 2 2 3 4
c j h g
1 1 1 1
a b f i
22 15
e
9 13
5 4 7 6
d
2 3 2 2 3 4
c j h g
1 1 1 1
a b f i
STEP-10
37
22 15
e
9 13
5 4 7 6
d
2 3 2 2 3 4
c j h g
1 1 1 1
a b f i
VLC-nya adalah:
0 1
0 1 e a (freq. 1): 00000
0 1 0 1
b (freq. 1): 00001
c (freq. 3): 0001
0 1 0 1 0 1 d d (freq. 6): 011
0 1 c 0 1 j h g e (freq. 15): 1
f (freq. 1): 00100
a b f i g (freq. 4): 0101
h (freq. 3): 0100
i (freq. 1): 00101
j (freq. 2): 0011
1⋅5 +1⋅5 + 3⋅4 + 6⋅3 + 15⋅1 + 1⋅5 + 4⋅4 + 3⋅4 + 1⋅5 + 2⋅4 = 101 bit.
Dapat diperlihatkan bahwa untuk setiap string yang diberikan, pohon pengkode Huffman
selalu menghasilkan VLC dengan panjang deskripsi yang minimum untuk string tersebut.