GRAF
(GRAPH)
TEORI DASAR
Outline
Contoh-contoh graf
Derajat simpul
Definisi Graf
3
Contoh Graf
V = { 1, 2, 3, 4 }
Contoh:
- Simpul 1 dan 2 insiden pada e1.
- Busur e6 insiden pada simpul 3 dan 4.
Jenis Graf: Berarah / Tidak Berarah
Contoh:
d(A)=din(A)+ dout(A) = 1+3 = 4
d(C)=din(C)+ dout(C) = 3+3 = 6
Graf Sederhana dan Multigraf
Multigraf
Graf sederhana
Graf Lengkap
Contoh:
Jumlah simpul: |V| = 7
Setiap simpul v: d(v)= 6
Jumlah busur:|E| = 21
Path, Closed Path, Circuit (1)
Contoh: S – e10 – A – e1 – B – e4 – D – e6 – T
Panjang: 4, yaitu sebanyak busur yang dilalui
Path, Closed Path, Circuit (2)
Contoh:
S – e10 – A – e1 – B – e4 – D – e7 – C – e9 – S
Path, Closed Path, Circuit (2)
Contoh: A – e1 – B – e4 – D – e7 – C – e3 – B – e2 – A
TERIMA
KASIH
STRUKTUR DATA
GRAF
(GRAPH)
TOPOLOGICAL
SORT
Topological Sort
• Toposort atau topological ordering, merupakan urutan linier
simpul pada graf berarah yang asiklik.
• Graf asiklik: graf yang tidak mengandung sirkuit berarah
Graf asiklik
(acyclic graph)
• Contoh aplikasi:
Urutan tugas yang harus dikerjakan secara terurut dan terdapat
konstrain bahwa tugas tertentu harus dikerjakan sebelum tugas-tugas
lainnya. Dalam hal ini tugas direpresentasikan sebagai simpul graf.
Eksekusi Topological Sort (1)
• Misalnya akan dilakukan topological sort untuk graf berikut ini:
GRAF (GRAPH)
Bread First Search
(DFS)
Pengantar BFS
Perhatikan graf di bawah ini
GRAF
(GRAPH)
Depth First Search
(DFS)
Pengantar DFS
Perhatikan graf di bawah ini
DFS menggunakan stack untuk menyimpan simpul-simpul tetangga dari simpul yang
sedang diproses.
GRAF
(GRAPH)
Representasi Graf
Matriks Ketetanggaan (1)
Untuk graf G dengan N simpul, maka matriks ketetanggaan untuk G
berukuran N x N.
Untuk graf tidak berbobot dan tidak berarah, elemen ke-[i,j] menyatakan
banyaknya busur yang menghubungkan simpul vi dan vj.
Contoh matriks ketetanggaan untuk graf tidak berarah dan tidak berbobot.
2
Matriks Ketetanggaan (2)
• Contoh matriks ketetanggaan untuk graf berarah dan
tidak berbobot.
• Elemen ke-[i,j] menyatakan banyaknya busur dari
simpul vi ke vj.
Matriks Ketetanggaan (3)
• Untuk graf berbobot, matriks ketetanggaan
menyimpan bobot dari busur.
• Contoh matriks ketetanggaan untuk graf berarah dan
berbobot.
- Elemen ke-[i,j] menyatakan bobot busur dari
simpul vi ke vj.
2
3
2
2 5
1 5
1 3
3 7
1
2 4
4 3
6
Matriks Insiden (1)
• Matriks insiden merepresentasikan hubungan antara simpul
dengan busur.
• Untuk graf G dengan N simpul dan M busur, maka matriks
insiden untuk G berukuran N x M.
• Contoh matriks insiden untuk graf tidak berarah.
Elemen [i,j]=1 artinya busur ej insiden pada simpul vi.
e e e e e e e e e e
Matriks Insiden (2)
• Contoh matriks insiden untuk graf berarah.
• Elemen [i,j]= -1 menyatakan busur ej keluar dari simpul
vi.
Elemen [i,j]= 1 menyatakan busur ej menuju simpul vi.
Elemen [i,j]= 0 menyatakan busur ej tidak insiden
pada simpul vi. e e e e e e
Matriks Insiden (3)
• Contoh matriks insiden untuk graf berbobot.
• Elemen [i,j] negatif menyatakan bobot busur ej yang
keluar dari simpul vi.
Elemen [i,j positif menyatakan bobot busur ej yang
menuju simpul vi.
e e e e e e
10
20
12
7
60
32
Array of Linked-List
• Kekurangan representasi matriks: mungkin terjadi
sparse matrix dimana elemen 0 sangat dominan pada
matriks.
• Alternatif representasi: array of linked-list. Contoh
ADT
type address: pointer to vertex
type graph: array[‘A’..’G’] of address
type vertex: <destVertexID: char, Ukuran array adalah N =
weight: integer, jumlah simpul
next: address>
Array of Linked-List (1)
• Kekurangan representasi matriks: mungkin terjadi
sparse matrix dimana elemen 0 sangat dominan pada
matrix.
• Alternatif representasi: array of linked-list. Contoh:
ADT
type address: pointer to vertex
type graph: array[‘A’..’E’] of address
type vertex: <destVertexID: char,
weight: integer,
next: address> procedure initGraph (input/output G:graph)
{I.S. –
F.S. G[i]=nil untuk i=’A’ sampai ‘E’}
dictionary
i:char
algorithm
i ‘A’
while i < ’E’ do
G[i] nil
i i+1
{endwhile, i > ’E’}
Array of Linked-List (4)
Contoh algoritma untuk array of linked-list: menambahkan sebuah busur
procedure add1Edge (input/output G:graph,
input source, dest: char,
input weight:integer)
{I.S. terdefinisi G sebuah graf, vertex
bernama source dan dest, dan weight.
F.S. edge berbobot weight dari source ke
dest sudah ditambahkan ke graf G}
dictionary
newP :address
algorithm
{insert first}
allocate(newP)
destVertexID(newP) dest
weight(newP) weight
next(newP) G[source]
G[source] newP
Multi Linked-List (1)
• Multi linked-list memungkinkan untuk
merepresentasikan graf tanpa dibatasi jumlah simpul.
Contoh:
Multi Linked-List (2)
• Multi linked-list memungkinkan untuk
merepresentasikan graf tanpa dibatasi jumlah simpul.
Contoh:
Elemen paling kiri menyatakan simpul
ADT
type adrVertex: pointer to vertex
type adrEdge: pointer to edge
type vertex: <id: char,
next: adrVertex,
firstEdge: adrEdge>
1
Elemen baru
Review Materi Sebelumnya
• Multi linked-list memungkinkan untuk
merepresentasikan graf tanpa dibatasi jumlah simpul.
Contoh:
ADT
• Graf juga dapat direpresentasikan dengan multi linked-
list berikut ini
ADT
• Graf juga dapat direpresentasikan dengan multi linked-
list berikut ini
ADT
type adrVertex: pointer to vertex Untuk graf berbobot, definisi edge:
type adrEdge: pointer to edge type edge: <vertex_1: adrVertex,
type vertex: <id: char, vertex_2: adrVertex,
nextVertex: adrVertex> weight: integer,
type edge: <vertex_1: adrVertex, nextEdge: adrEdge>
vertex_2: adrVertex,
nextEdge: adrEdge>
type listOfVertex: <firstVertex: adrVertex>
type listOfEdge: <firstEdge: adrEdge>
Contoh Algoritma (1)
• Contoh algoritma: menampilkan semua simpul tetangga simpul v.
START
B C
D
Operasi Hapus Node dan Edge
START
B C
D
ADT Graph MLL 1 ke N Versi Info
Connecting A B
C D
Tahapan menghubungan dua
buah node dengan sebuah edge
Mencari lokasi node yang
akan dikoneksikan di list
parent. Misal Node D akan P1
dihubungkan dengan Node B. P2
Kemudian, alokasi Elemen
edge yang berisi info node
yang akan disambungkan.
Misal Node D akan
dihubungkan dengan Node B.
Maka kita harus membuat 2
elemen edge yang infonya D
dan B
Kemudian melakukan insert
Last elemen edge dengan
info B di node D. Begitu juga
dengan edge dengan info D
di node B.
Fungsi Prosedur proses Connecting
FindNode
InsertLastEdge
Find Node
Connecting A B
C D
Procedure connecting(In/Out G : Graph,
In node1, node2: char) //Node 1 : B,
Kamus //Node 2: D
E1,E2, Q: adrEdge
P1,P2 : adrNode P1 P2
Algoritma
P1FIndNode(G,node1)
P2FIndNode(G,node2)
If (P1!=NULL AND P2!=NULL) then
E1alokasiNode(node2)
insertLastEdge(G,P1,E1)
E2alokasiNode(node1)
insertLastEdge(G,P2,E2)
Else
Output(“Node tidak ditemukan”)
Disconnecting START
A B
Tahapan disconnecting
node 1 dengan node 2 : C D
Mencari lokasi node 1
dan node 2. Misal Node 1
= B, Node 2 = D
P1 P2
Lalu mencari pada anak
node 1 edge yang berisi
info node 2. Lalu lakukan
delete edge
E2
Lalu mencari pada anak
node 2 edge yang berisi
info node 1. Lalu lakukan
delete edge E1
Fungsi Prosedur proses Disconnecting
Buatlah function yang menghitung jumlah degree dari sebuah Node pada graph tidak
berarah
Function hitungDegree(G: Graph, node: char)→integer
Buatlah Procedure yang mengoutputkan jumlah degree dari setiap node yang ada di
Graph
Procedure showDegree(In G : Graph)
{Anda bisa memanfaatkan Function hitungDegree di atas}
Buatlah function yang menghitung berapa node loop yang terjadi pada sebuah graph
Function loop(G: Graph)→ integer
Latihan