STRUKTUR DATA
“ GRAPH ”
Disusun oleh :
Nahya Maulidia
Nim:23105111156
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
“GRAPH”. Terima kasih juga kepada Bapak Yuniasyah selaku dosen
Pembimbing Mata Kulias Struktur Data di kelas kami 1SIMC.
Nahya Maulidia
2
DAFTAR ISI
3
I. PENDAHULUAN
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.
4
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, 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.
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
5
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.
• 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.
6
Cara pendefinisian lain untuk graph adalah dengan menggunakan
himpunan keterhubungan langsung Vx. Pada setiap verteks x terdefinisi Vx
sebagai himpunan dari verteks-verteks yang adjacent dari x. Secara formal:
Vx = {y | (x,y) -> E}
7
Graf tersebut dapat direpresentasikan dalam sebuah matrik 5x5 , dimana
baris dan kolom di matriks tersebut menunjukan vertex yang ada.
b. Graph Berarah
8
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.
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 :
9
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.
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.
10
5. Path
11
2. Graph Tak Berarah (Undirected Graph atau Undigraph)
Setiap sisi {x, y} berlaku pada kedua arah: baik x ke y maupun y ke x.
Secara grafis sisi pada undigraph tidak memiliki mata panah dan secara
notasional menggunakan kurung kurawal.
Contoh Undigraph G = {V, E}
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}}.
12
D. Konektivitas Tiap Jenis Graph
13
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).
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
Proses pencarian dilakukan dengan mengunjungi cabang terlebih dahulu
hingga tiba di simpul terakhir. Jika tujuan yang diinginkan belum tercapai maka
pencarian dilanjutkan ke cabang sebelumnya, turun ke bawah jika memang
masih ada cabangnya. Begitu seterusnya hingga diperoleh tujuan akhir (goal).
Depth First Search, memiliki kelebihan diantaranya adalah cepat mencapai
kedalaman ruang pencarian. Jika diketahui bahwa lintasan solusi permasalahan
akan panjang maka Depth First Search tidak akan memboroskan waktu
untuk melakukan sejumlah besar keadaan dangkal dalam permasalahan graf.
Depth First Search jauh lebih efisien untuk ruang pencarian dengan banyak
cabang karena tidak perlu mengeksekusi semua simpul pada suatu level
tertentu pada daftar open. Selain itu, Depth First Search memerlukan 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
Implementasi algoritma BFS :
16
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 = [ ].
F. Shortest Path
17
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 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.
18
maka kuantitas-kuantitas terkait adalah kebalikannnya. Misalnya mencari jarak
tempuh minimum digantikan dengan mencari laba maksimum.
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.
19
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.
20
Shorthest Path menjadi :
1 -> 3 -> 6 -> 10 -> 12 Atau 1 -> 2 -> 7 -> 10-> 12
Jika ada dua atau lebih shorthest path maka total biaya harus sama.
21
G. Minimum Spanning Tree
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) 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 :
22
Bila jalur (edge) mempunyai biaya (cost) maka yang dicari adalah minimum
cost spanning tree.
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 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:
23
tidak (berarti membentuk siklik) maka kedua subset dari verteks-verteks
yang bersangkutan digabungkan menjadi satu subset yang lebih besar.
Iterasi akan berlangsung hingga semua sisi terproses.
MST_KRUSKAL (G)
{ For setiap vertex v dalam V[G] Do
{ set S(v) ← {v} }
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.
24
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)
}
}
}
Pada Project ini, kita lakukan pengaplikasian dari teori Graph pada
program Java. Software yang kita gunakan adalah Eclipse.
25
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.
Dapat Kita lihat dari gambar diatas, logika Graph di mulai dari penambahan
Vertex/Node, dengan memanggil fungsi “AddVertex” pada file Graph.java.
26
Setelah vertex tercipta, dilakukan penambahan Edge/Busur dan terakhir
memanggil fungsi untuk menghasilkan output.
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
Graph dalam kehidupan sehari-hari dapat dianalogikan sebagai suatu
jaringan satu dengan jaringan lainnya yang saling terhubung. Misal seperti
negara Indonesia yang memiliki banyak kota seperti: Jakarta, Bandung,
Surabaya, Yogyakarta. Kota-kota itulah yang tergabung dalam negara
Indonesia dan kota-kota itulah yang saling berhubungan.
28
DAFTAR PUSTAKA
29