REPRESENTASI GRAF
MATEMATIKA DISTRIK
Disusun oleh :
(2020010011) Pingki Prahesti
(2021010013P) Iskandar Agung Nugroho
Puji Syukur khadirat Allah Yang Maha Kuasa karena atas Rahmat dan Hidayah-
Nyalah kami dapat menyelesaikan Tugas Tengah Semester ini. Makalah ini merupkan
salah satu bagian dalam Tugas kami yang berjudul “REPRESENTASI GRAPH”.
Terima kasih juga kepada Ibu Noviyanti. M, M.Pd.Mat. selaku dosen Pembimbing Mata
Kuliah Matematika Distrik di kelas kami.
Masih banyak kekurangan dalam makalah ini . Selain itu dalam penyusunan
tugas atau materi ini, tidak sedikit hambatan yang penulis hadapi. Namun penulis
menyadari bahwa kelancaran dalam penyusunan materi ini tidak lain berkat bantuan,
dorongan dan bimbingan orang tua, sehingga kendala-kendala yang penulis hadapi
teratasi
Tim Penyusun
2
DAFTAR ISI
3
I. PENDAHULUAN
Dalam istilah ilmu komputer, sebuah struktur data adalah cara penyimpanan,
pengorganisasian dan pengaturan data di dalam media penyimpanan komputer
sehingga data tersebut dapat digunakan secara efisien. Dalam tehnik pemrograman,
struktur data berarti tata letak data yang berisi kolom-kolom data, baik itu kolom yang
tampak oleh pengguna (user) ataupun kolom yang hanya digunakan untuk keperluan
pemrograman yang tiadak tampak oleh pengguna.
Graph merupakan struktur data yang paling umum. Jika struktur linear
memungkinkan pendefinisian keterhubungan sikuensial antara entitas data, struktur
data tree memungkinkan pendefinisian keterhubungan hirarkis, maka struktur graph
memungkinkan pendefinisian keterhubungan tak terbatas antara entitas data.
Representasi data dengan struktur data linear ataupun hirarkis pada masalah ini
masih bisa digunakan namun akan membutuhkan pencarian-pencarian yang kurang
efisien. Struktur data graph secara eksplisit menyatakan keterhubungan ini sehingga
pencariannya langsung (straightforward) dilakukan pada strukturnya sendiri.
Graf adalah salah satu jenis struktur data yang terdiri dari titik (vertex) dan garis
(edge), dimana dalam graf tersebut, vertex - vertex yang ada dihubungkan oleh edge,
4
hingga menjadi suatu kesatuan yang disebut graf. Sebagai contoh dari pemodelan graf
adalah peta kota kota, dimana kota disini sebagai vertex dan jalur yang
menghubungkannya berlaku sebagai edge.
Dalam gambar tersebut, terdapat beberapa kota yang berada dipulau jawa
dimana kota - kota tersebut dihubungkan oleh beberapa jalur jalur yang ada. Untuk
contoh diatas kita bisa menganggap bawah kota-kota yang ada merupakan vertex, dan
jalur-jalur yang menghubungkan kota-kota tersebut sebagai edge. Sehingga secara
keseluruhan peta diatas dapat dibuat pemodelannya sebagai sebuah graf.
Ada terdapat beberapa jenis graf yang bisa kita gunakan, yaitu beberapa
diantaranya adalah sebagai berikut :
• Graf Berarah : adalah graf yang edge-nya memiliki arah, sebagai contoh edge AB
menghubungkan vertex A ke B, dimana hubungan vertex B ke A, harus diperoleh dari
edge lain, yaitu edge BA, dan jika edge BA tidak ada, maka vertex B ke A tidak memiliki
hubungan, meski vertex A ke B memiliki hubungan
• Graf Tak Berarah : adalah graf yang edge-nya tidak memiliki arah, sehingga jika edge
AB menghubungkan vertex A ke B, maka secara otomatis juga menghubungkan vertex
B ke A.
5
• Graf Berbobot : adalah suatu graf dimana edge dari graf tersebut memiliki bobot atau
nilai tertentu.
• Graf Tidak Berbobot : adalah suatu graf dimana edge dari graf tersebut tidak memiliki
bobot atau nilai. Untuk merepresentasikannya dalam pemrograman komputer, graf
dapat disusun dari LinkedList yang berada dalam LinkedList.
Suatu graph didefinisikan oleh himpunan verteks dan himpunan sisi (edge).
Verteks menyatakan entitas-entitas data dan sisi menyatakan keterhubungan antara
verteks. Biasanya untuk suatu graph G digunakan notasi matematis.
G = (V, E)
Dimana : G = Graph
V = Simpul atau Vertex, atau Node, atau Titik
E = Busur atau Edge, atau arc
Vx = {y | (x,y) -> E}
6
x. Suksesor dari verteks x (ditulis Succ(x)) adalah himpunan semua verteks yang
adjacent dari x, yaitu adjacenct set di atas.
Graf tersebut dapat direpresentasikan dalam sebuah matrik 5x5 , dimana baris
dan kolom di matriks tersebut menunjukan vertex yang ada.
7
b. Graph Berarah
Dalam matrik diatas dapat kita lihat bahwa kotak yang berisi angka satu
menunjukan bahwa dalam dua vertex tersebut terdapat edge yang
menghubungkannya. Dan jika dalam kotak terdapat angka nol, maka hal tersebut
menandakan tidak ada edge yang mengubungkan secara langsung dua vertex tersebut.
8
B. Istilah Dalam Graph
1. Incident
Jika e merupakan busur dengan simpul-simpulnya adalah v dan w yang
ditulis e=(v,w), maka v dan w disebut “terletak” pada e, dan e disebut incident
dengan v dan w.
2. Degree
Didalam Graph ada yang disebut dengan Degree, Degree mempuyai 3
jenis antara lain :
Degree dari suatu verteks x dalam undigraph adalah jumlah busur yang
incident dengan simpul tersebut.
Indegree dari suatu verteks x dalam digraph adalah jumlah busur yang
kepalanya incident dengan simpul tersebut, atau jumlah busur yang
“masuk” atau menuju simpul tersebut..
Outdegree dari suatu verteks x dalam digraph adalah jumlah busur yang
ekornya incident dengan simpul tersebut, atau jumlah busur yang “keluar”
atau berasal dari simpul tersebut.
9
3. Adjacent
Pada graph tidah berarah, 2 buah simpul disebut adjacent bila ada busur
yang menghubungkan kedua simpul tersebut. Simpul v dan w disebut
adjacent.
Pada graph berarah, simpul v disebut adjacent dengan simpul w bila ada
busur dari w ke v.
Pada graph berarah, bila simpul v adjacent dengan simpul w, maka simpul
v adalah successor simpul w, dan simpul w adalah predecessor dari simpul v.
5. Path
10
C. Jenis - Jenis Graph
11
V = {A, B, C, D, E, F, G, H, I,J, K, L, M}
E = { {A,B},{A,C}, {A,D}, {A,F}, {B,C}, {B,H}, {C,E}, {C,G}, {C,H}, {C,I}, {D,E}, {D,F}, {D,G},
{D,K}, {D,L}, {E,F}, {G,I}, {G,K}, {H,I}, {I,J}, {I,M}, {J,K}, {J,M}, {L,K}, {L,M}}.
Khusus graph, undigraph bisa sebagai digraph (panah di kedua ujung edge
berlawanan) Struktur data linear maupun hirarkis adalah juga graph. Node-node pada
struktur linear ataupun hirarkis adalah verteks-verteks dalam pengertian graph dengan
sisi-sisinya menyusun node-node tersebut secara linear atau hirarkis.
Struktur data linear adalah juga tree dengan pencabangan pada setiap node
hanya satu atau tidak ada. Linear 1-way linked list (digraph), linear 2- way linked list
(undigraph).
12
Siklus: suatu path dengan panjang lebih dari satu yang dimulai dan berakhir pada
suatu verteks yang sama.
Siklus sederhana: dalan undigraph, siklus yang terbentuk pada tiga atau lebih
verteks-verteks yang berlainan yang mana tidak ada verteks yang dikunjungi lebih
dari satu kali kecuali verteks awal/akhir.
Dua verteks x dan y yang berbeda dalam suatu undigraph disebut berkoneksi
(connected) apabila jika terdapat path yang menghubungkannya.
Himpunan bagian verteks S disebut terkoneksi (connected) apabila dari setiap
verteks x dalam S terdapat path ke setiap verteks y (y bukan x) dalam S.
Suatu komponen terkoneksi (connected components) adalah subgraph (bagian dari
graph) yang berisikan satu himpunan bagian verteks yang berkoneksi.
Suatu undigraph dapat terbagi atas beberapa komponen yang terkoneksi; jika
terdapat lebih dari satu komponen terkoneksi maka tidak terdapat path dari suatu
verteks dalam satu komponen verteks di komponen lainnya.
Pohon bebas (free tree): suatu undigraph yang hanya terdapat satu komponen
terkoneksi serta tidak memiliki siklus sederhana.
Terminologi di atas berlaku juga pada Digraph kecuali dalam digraph harus
dikaitkan dengan arah tertentu karena pada arah yang sebaliknya belum tentu
terdefinisi.
Adjacency ke / dari: Jika terdapat sisi (x,y) maka dalam digraph dikatakan bahwa x
"adjacent ke" y atau y "adjacent dari" x. Demikian pula jika terdapat path dari x ke y
maka belum tentu ada path dari y ke x Jadi dalam digraph keterkoneksian
didefinisikan lebih lanjut lagi sebagai berikut.
Terkoneksi dengan kuat: Himpunan bagian verteks S dikatakan terkoneksi dengan
kuat (strongly connected) bila setiap pasangan verteks berbeda x dan y dalam S, x
berkoneksi dengan y dan y berkoneksi dengan x (dpl., ada path dari x ke y dan
sebaliknya dari y ke x).
13
Terkoneksi dengan Lemah: Himpunan bagian verteks S dikatakan terkoneksi dengan
lemah (weakly connected) bila setiap pasangan verteks berbeda x dan y dalam S,
salah satu: x berkoneksi dengan y (atau y berkoneksi dengan x) dan tidak kebalikan
arahnya (dpl., hanya terdefinisi satu path: dari x ke y atau sebaliknya dari y ke x).
14
memori yang relatif kecil karena banyak node pada lintasan yang aktif saja yang
Selain kelebihan, Depth First Search juga memiliki kelemahan di antaranya adalah
memungkinkan tidak ditemukannya tujuan yang diharapkan dan hanya akan
mendapatkan satu solusi pada setiap pencarian.
15
Pada diatas, state 21 merupakan tujuannya (goal) sehingga bila ditelusuri
menggunakan prosedur Breadth First Search, diperoleh:
1) Open = [1]; closed = [ ].
2) Open = [2, 3, 4]; closed = [1].
3) Open = [3, 4, 5, 6]; closd = [2, 1].
4) Open = [4, 5, 6, 7, 8]; closed = [3, 2, 1].
5) Open = [5, 6, 7, 8, 9, 10]; closed = [4, 3, 2, 1].
6) Open = [6, 7, 8, 9, 10, 11, 12]; closed = [5, 4, 3, 2, 1].
7) Open = [7, 8, 9, 10, 11, 12, 13] (karena 12 telah di-open);
closed = [6, 5, 4, 3, 2, 1].
8) Open = [8, 9, 10, 11, 12, 13, 14]; closed = [7, 6, 5, 4, 3, 2, 1].
9) Dan seterusnya sampai state 21 diperoleh atau open = [ ].
16
2) Membutuhkan sejumlah besar pekerjaan, khususnya jika lintasan solusi
terpendek cukup panjang, karena jumlah node yang perlu diperiksa bertambah
secara eksponensial terhadap panjang lintasan.
3) Tidak relevannya operator akan menambah jumlah node yang harus diperiksa.
Oleh karena proses Breadth First Search mengamati node di setiap level
graf sebelum bergerak menuju ruang yang lebih dalam maka mula-mula semua
keadaan akan dicapai lewat lintasan yang terpendek dari keadaan awal. Oleh
sebab itu, proses ini menjamin ditemukannya lintasan terpendek dari keadaan
awal ke keadaan tujuan (akhir). Lebih jauh karena mula-mula semua keadaan
ditemukan melalui lintasan terpendek sehingga setiap keadaan yang ditemui pada kali
kedua didapati pada sepanjang sebuah lintasan yang sama atau lebih panjang.
Kemudian, jika tidak ada kesempatan ditemukannya keadaan yang identik pada
sepanjang lintasan yang lebih baik maka algoritma akan menghapusnya
F. Shortest Path
Pencarian shortest path (lintasan terpendek) adalah masalah umum dalam suatu
weighted, connected graph. Misal : Pencarian jaringan jalan raya yang menghubungkan
kota-kota disuatu wilayah.
Dalam beberapa masalah graph lain, suatu graph dapat memiliki bobot negatif
dan kasus ini dipecahkan oleh algoritma Bellman-Ford. Yang akan dibahas di sini
17
adalah algoritma Dijkstra yaitu mencari lintasan terpendek dari suatu verteks asal
tertentu vs ke setiap verteks lainnya.
Apabila sisi-sisi pada graph disertai juga dengan suatu (atau beberapa) harga
yang menyatakan secara unik kondisi keterhubungan tersebut maka graph tersebut
disebut graph berbobot. Biasanya dalam masalah-masalah graph bobot tersebut
merupakan "harga" dari keterhubungan antar vertex. Pengertian "harga" ini
menggeneralisasikan banyak aspek, biaya ekonomis dari proses/aktifitas, jarak
geografis/tempuh, waktu tempuh, tingkat kesulitan, dan lain sebagainya.
Dalam beberapa masalah lain bisa juga bobot tersebut memiliki pengertian
"laba" yang berarti kebalikan dari "biaya" di atas. Dalam pembahasan algoritma-
algoritma graph nanti pengertian bobot akan menggunakan pengertian biaya sehingga
apabila diaplikasikan pada masalah yang berpengertian laba maka kuantitas-kuantitas
terkait adalah kebalikannnya. Misalnya mencari jarak tempuh minimum digantikan
dengan mencari laba maksimum.
18
b. Algoritma Dijkstra’s
Algoritma Dijkstra's :
1. Menyelesaikan problem single-source shortest-path ketika semua edge memiliki
bobot tidak negatif.
2. Algoritma greedy mirip ke algoritma Prim's.
3. Algoritma di awali pada vertex sumber s, kemudian berkembang membentuk
sebuah tree T, pada akhirnya periode semua vertex dijangkau dari S. Vertex di
tambah ke T sesuai urutan
Misalnya :
Pertama S, kemudian vertex yang tepat ke S, kemudian yang tepat berikutnya dan
seterusnya.
c. Dynamic Programming
Terdiri dari sederetan tahapan keputusan. Pada setiap tahapan berlaku prinsip
optimality (apapun keadaan awal dan keputusan yang diambil, keputusan berikutnya
harus memberikan hasil yang optimal dengan melihat hasil keputusan sebelumnya.
Misalnya : Multistage Graph
Dimana : Cost (i,j) = Min(C(j,l) + Cost(i+1,l)}
Dengan : C(j,l) = Bobot edge j dan l
l = Elemen Vi+1 Dan <j,l> eemen E
i=stage ke-I dan j = node dalam V
Proses dimulai dari k-2, dimana k adalah banyak stage.
19
Maka langkah-langkah yang dilakukan adalah :
K=5, sehingga dimulai dari S3
Cost(3,6) = Min{6+Cost(4,9); 5+Cost(4,10)} = Min{6+4;5+2} = 7
Cost(3,7) = Min{4+Cost(4,9); 3+Cost(4,10)} = Min{4+4;3+2} = 5
Cost(3,8) = Min{5+Cost(4,10); 6+Cost(4,11)} = Min(5+2;6+5} = 7
Cost(2,2) = Min{4+Cost(3,6);2+Cost(3,7);1+Cost(3,8)}
= Min{4+7;2+5;1+7} = 7
Cost(2,3) = Min{2+Cost(3,6); 7+Cost(3,7)} = Min(2+7; 7+5) = 9
Cost(2,4) = Min{11+Cost(3,8)} = 18
Cost(2,5) = Min{11+Cost(3,7); 8+Cost(3,8)} = Min(11+5;8+7} = 15
Cost(1,1) = Min{9+Cost(2,2);7+Cost(2,3);3+Cost(2,4),2+Cost(2,5)}
= Min{9+7;7+9;3+18;2+15} = 16
20
Shortest Path Pertama adalah :
Definisi Pohon rentangan atau spanning tree dari suatu connected graph
didefinisikan sebagai free-tree yang terbentuk dari subset sisi-sisi serta
menghubungkan setiap verteks dalam graph tersebut. Minimum Spanning Tree (MST)
21
adalah pohon rentangan dengan total bobot dari sisi-sisinya adalah minimal. Dalam
penelusuran vertex tidak diperkenankan terbentuk siklus (cycle).
Diketahui sebuah graph tak berarah dan tak berbobot sebagai berikut :
Bila jalur (edge) mempunyai biaya (cost) maka yang dicari adalah minimum
cost spanning tree.
Dua algoritma populer untuk menentukan minimum spanning tree (MST) adalah
Kruskal Algorithm dan Prim’s Algorithm.
1. Algoritma Kruskal
Algoritma ini lebih sederhana jika dilihat dari konsepnya namun lebih sulit dalam
implementasinya. Idenya adalah mendapatkan satu demi satu sisi mulai dari yang
berbobot terkecil untuk membentuk tree, suatu sisi walaupun berbobot kecil tidak akan
diambil jika membentuk siklik dengan sisi yang sudah termasuk dalam tree. Yang
22
menjadi masalah dalam implementasinya adalah keperluan adanya pemeriksaan
kondisi siklik tersebut.Salah satu pemecahaannya adalah dengan subsetting yaitu
pembentukan subset-subset yang disjoint dan secara bertahap dilakukan
penggabungan atas tiap dua subset yang berhubungan dengan suatu sisi dengan bobot
terpendek. Algoritma lengkapnya:
MST_KRUSKAL (G)
{ For setiap vertex v dalam V[G] Do
{ set S(v) ← {v} }
23
2. Algoritma Prim
Algoritma dimulai dari suatu verteks awal tertentu dan bisa ditentukan oleh
pemanggil atau dipilih sembarang oleh algoritma. Misalnya verteks awal tersebut
adalah v. Pada setiap iterasi terdapat kondisi di mana himpunan vertex V terbagi dalam
dua:
W yaitu himpunan verteks yang sudah dievaluasi sebagai node di dalam pohon,
serta (V-W) yaitu himpunan verteks yang belum dievaluasi.
Di awal algoritma W diinisialisasi berisi verteks awal v. Selanjutnya, di dalam iterasinya:
Pada setiap adjacency dari tiap verteks dalam W dengan verteks dalam (V-W)
dicari sisi dengan panjang minimal. setelah diperoleh, sisi tersebut ditandai
sebagai sisi yang membentuk tree dan verteks adjacent sisi tersebut dalam (VW)
dipindahkan ke W (menjadi anggota W).
Jika sisi tersebut tidak ada maka proses selesai.
Dari contoh di atas misalnya dilakukan pencarian mulai dari verteks A Maka
algoritma ini menghasilkan tahapan-tahapan iterasi pencarian sbb.:
MST_PRIM (G, w, v)
{ Q ← V[G]
for setiap u dalam Q do key [u] ← ∞
key [r] ← 0
π[r] ← NIl
while queue tidak kosong do
{ u ← EXTRACT_MIN (Q)
for setiap vertex v dalam Adj[u] do
{ if v ada dalam Q dan w(u, v) < key [v] then
{ π[v] ← w(u, v)
key [v] ← w(u, v)
}
}
}
24
III. GRAPH PADA JAVA
Pada Project ini, kita lakukan pengaplikasian dari teori Graph pada program Java.
Software yang kita gunakan adalah Eclipse.
Didalam Project ini terdapat 5 package Java. Dan yang akan kita bahas disini
adalah Package GRAPH_BASIC. Package GRAPH_BASIC, berisi 5 file
berextensi .java yang saling berhubungan satu sama lain. Untuk detail File bisa di lihat
di gambar di bawah ini.
25
Dapat Kita lihat dari gambar diatas, logika Graph di mulai dari penambahan
Vertex/Node, dengan memanggil fungsi “AddVertex” pada file Graph.java. Setelah
vertex tercipta, dilakukan penambahan Edge/Busur dan terakhir memanggil fungsi
untuk menghasilkan output.
26
IV. KESIMPULAN
Mengenal Graph :
Terdiri dari node dan terdiri dari link (busur)
Node disebut vertex dan Link disebut edge
Informasi penting dalam graph adalah koneksi antar vertex
Pada undirected graph, tidak terdapat directions (arah), Edge dari v0 ke v1
adalah sama dengan edge dari v1 ke v0
Jika sebuah masalah dapat direpresentasikan ke dalam bentuk kgraph maka
solusi dari masalah tersebut bisa dicari dengan bantuan graph
Setiap vertex mewakili sebuah kondisi (state) dan edge mewakili transisi antar
state
27
DAFTAR PUSTAKA
28