TM10 BasicGraph
TM10 BasicGraph
TK13024
Pertemuan 10
Struktur Data Graph
Objektif
• Mempelajari karakteristik struktur
data Graph dan macam-macamnya
• Mengimplementasikan struktur data
Graph
• Mempelajari aplikasi struktur data
graph
Pendahuluan
• Graph: kumpulan dari node-node yang disebut vertex dan
edge yang menghubungkan vertex. Vertex dan edge dapat
menyimpan informasi.
• Hubungan antar node: many to many
• Dibanding struktur data tree, graph lebih umum, lebih banyak
mengandung komponen yang terhubung dan boleh
mengandung cycle
Pontianak Menado
Medan
Palembang
Makasar
Surabaya
Padang
Jakarta
Jogjakarta Denpasar
Konsep Dasar dan Terminologi
• Graph G(V,E) adalah graph yang mengandung
himpunan vertex V dan himpunan edge E. Edge E
adalah pasangan vertex (v1, v2) dengan v1 dan v2
adalah anggota V.
• Pada graph tidak berarah (undirected graph atau disebut
graph saja) maka e(v1, v2) = e(v2, v1)
• Pada graph berarah (directed graph – digraph), jika ada
e(v1,v2) maka belum tentu ada e(v2,v1).
v1 v2 v1 v2
v3 v4 v3 v4
Graph Digraph
Konsep Dasar dan Terminologi (2)
• Unweighted graph: graph yang edge-nya tidak
menyimpan bobot/informasi (lihat graph dan
digraph di slide 5)
• Weighted graph: graph yang edge-nya menyimpan
bobot/ informasi, seperti jarak, biaya, kapasitas, dan
lainnya.
• (weighted digraph)
Konsep Dasar dan Terminologi (3)
• Adjacent (tetangga): dua vertex yang berbeda, v1
dan v2 yang dihubungkan dengan edge atau disebut
v1 adalah neighbor (tetangga) dari v2
• Adjacency set: himpunan vertex yang merupakan
tetangga dari suatu vertex atau v1 v2
Vx = { y | (x,y) ε E }
Contoh:
• Untuk Graph pada slide 5: v3 v4
v3 v4
Konsep Dasar dan Terminologi (4)
• Path (jalur): deretan dari vertex-vertex yang tiap
vertexnya adalah tetangga dari vertex yang lainnya
atau p = v1 v2 ... vn, (n > 2)
• Path length: banyaknya edge pada path. Untuk
unweighted graph maka path length = n – 1. Untuk
weighted graph maka path length = jumlah dari
bobot edge dalam path.
• Simple path: path yang vertex –vertex nya hanya
muncul 1 kali (tidak berulang)
• Contoh untuk Digraph pada slide 6:
Path length dari v2 ke v6:
➔ Path = v2, v0, v3, v6
➔ Path length = 4 + 1 + 4 = 9
Konsep Dasar dan Terminologi (5)
• Cycle (siklus): path yang panjangnya lebih dari 2
vertex, yang dimulai dan diakhiri oleh vertex yang
sama.
• Simple cycle: path yang melewati 3 atau lebih vertex
yang berbeda dan menghubungkan vertex-vertex
tersebut menjadi sebuah loop.
• Non simple cycle: cycle yang tidak termasuk dalam
simple cycle.
• Acyclic: graph/digraph yang tidak mempunyai cycle
v1 v2
v3 v4
Konsep Dasar dan Terminologi (9)
• Strongly connected: jika untuk setiap pasang vertex
(vi, vj) dalam digraph maka vi terhubung ke vj dan vj
terhubung ke vi.
• Weakly connected: jika untuk setiap pasang vertex
(vi, vj) dalam digraph maka vi terhubung ke vj atau vj
terhubung ke vi.
4 1 1 1 0 4 0 0 0 0
adjacency matrix adjacency matrix
dari graph slide 5 dari digraph slide 5
Representasi Graph (2)
• Adjacency matrix dari graph selalu
menghasilkan matriks simetris atau
T[i,j] == T[j,i] sehingga dapat digunakan
representasi matriks triangular.
• Adjacency matrix dari digraph belum
tentu menghasilkan matriks simetris
• Pada weighted graph maka angka 1
diganti dengan bobot pada edge.
• Contoh: Weighted Digraph di Slide 6:
Vertex V0 V1 V2 V3 V4 V5 V6
V0 0 2 0 1 0 0 0
V1 0 0 0 3 10 0 0
V2 4 0 0 0 0 5 0
V3 0 0 2 0 2 8 4
V4 0 0 0 0 0 0 6
V5 0 0 0 0 0 0 0
V6 0 0 0 0 0 1 0
Representasi Graph (3)
(2) Adjacency List:
Menggunakan array dari vertex sebagai awal list. Ada
dua cara:
v1 v2
(a) Sequential adjacency list
(b) Linked adjacency list
Contoh representasi digraph slide 5: v3 v4
Vertex
Vertex Degree Adjacency list vertex link
V1 2 V2 V4 V1: V2 V4 •
V2 1 V4 V2: V4 •
V3 2 V1 V4 V3: V1 V4 •
V4 0
V4: •
(a) (b)
Representasi Graph (3)
• Adjacency list sebaiknya digunakan untuk
merepresentasikan sparse graph dan digraph
• Contoh adjacency list untuk weighted Digraph di slide 6
Graph Traversals
• Definisi: mengunjungi (visit) semua vertex dalam
graph G, dalam urutan tertentu mulai dari suatu
vertex.
• Dalam beberapa buku, disebut juga Graph
Searching
• Dalam graph, setiap vertex dapat dipilih sebagai
vertex awal untuk memulai traversal. Tetapi untuk
tree, harus selalu dimulai dari root node
• Untuk masalah ini pada definisi vertex ditambah
satu field, v.visited, yang berjenis boolean. Pada
inisialisasi dibuat bernilai false, jika vertex telah
dikunjungi, dibuat bernilai true.
Graph Traversals (2)
• Algoritma umum:
(1) Tentukan vertex awal, misal V1, ubah field v.visited
menjadi true.
(2) Masukkan tetangga V1 ke container
(3) Ambil satu vertex dari container, misal V2, ubah
field v.visited menjadi true.
(4) Masukkan tetangga V2 yang belum ada di
container ke container dan belum dikunjungi.
(5) Lakukan langkah 3 dan 4 sampai semua vertex
dikunjungi
Graph Traversals(3)
Ada 2 jenis container:
(A) Stack:
Algoritmanya menjadi:
(1) Tentukan vertex awal, misal V1, ubah field v.visited menjadi
true.
(2) Push vertex tetangga dari V1
(3) Pop (vertex dari) stack, misal V2, ubah field v.visited
menjadi true.
(4) Push vertex tetangga V2 yang belum ada di stack dan belum
dikunjungi.
(5) Lakukan langkah 3 dan 4 sampai semua vertex dikunjungi
DFS
Stack:
Hasil:
ABEFCHIDG
BFS
Queue:
Hasil:
ABDEGFHCI
Tabel hasil penelusuran secara DFS yang dimulai dari vertex A:
Graph Traversals (6)
(B) Queue:
Algoritmanya menjadi:
(1) Tentukan vertex awal, misal V1, ubah field v.visited menjadi
true.
(2) Insert semua vertex tetangga dari V1
(3) Remove (vertex dari) queue, misal V2, ubah field v.visited
menjadi true.
(4) Insert semua vertex tetangga V2 yang belum ada di queue
dan belum dikunjungi.
(5) Lakukan langkah 3 dan 4 sampai semua vertex dikunjungi
➔ mengunjungi semua tetangga V1, lalu semua tetangga dari
tetangganya V1 dan seterusnya.
➔ Breadth First Search (BFS)
Graph Traversals (7)
• Ilustrasi kunjungan vertex secara BFS untuk
graph yang berbentuk tree:
Graph Traversals (8)
• Sebagai contoh, untuk digraph di slide 27,
maka hasil penelurusan secara BFS dapat
dilihat pada slide berikut.
Tabel hasil penelusuran secara BFS yang dimulai dari vertex A:
Graph Traversals (9 .1)
Contoh: start dari node 1
1 2
3 4 5
6 7 8 9
Hasil: 1 3 6 7 4 2 5 8 9 Hasil: 1 3 4 6 7 2 8 5 9
Graph Traversals (9 .1)
Contoh: start dari node 1
1 2
3 4 5
6 7 8 9
3 1 3 4
Hasil: 1 Hasil: 1
Graph Traversals (9 .2)
Contoh:
1 2
3 4 5
6 7 8 9
6 3 4 6 7
Hasil: 1 3 Hasil: 1 3
Graph Traversals (9 .3)
Contoh:
1 2
3 4 5
6 7 8 9
7 3 6 7 2 8
Hasil: 1 3 6 Hasil: 1 3 4
Graph Traversals (9 .4)
Contoh:
1 2
3 4 5
6 7 8 9
4 7 3 7 2 8
Hasil: 1 3 6 7 Hasil: 1 3 4 6
Graph Traversals (9 .5)
Contoh:
1 2
3 4 5
6 7 8 9
2 4 7 3 2 8
Hasil: 1 3 6 7 4 Hasil: 1 3 4 6 7
Graph Traversals (9 .6)
Contoh:
1 2
3 4 5
6 7 8 9
5 2 4 7 3 8 5
Hasil: 1 3 6 7 4 2 Hasil: 1 3 4 6 7 2
Graph Traversals (9 .7)
Contoh:
1 2
3 4 5
6 7 8 9
8 5 2 4 7 3 5
Hasil: 1 3 6 7 4 2 5 Hasil: 1 3 4 6 7 2 8
Graph Traversals (9 .8)
Contoh:
1 2
3 4 5
6 7 8 9
9 5 2 4 7 3 9
Hasil: 1 3 6 7 4 2 5 8 Hasil: 1 3 4 6 7 2 8 5
Graph Traversals (9 .9)
Contoh:
1 2
3 4 5
6 7 8 9
9 5 2 4 7 3
Hasil: 1 3 6 7 4 2 5 8 9 Hasil: 1 3 4 6 7 2 8 5 9
Graph Traversals (9 .10)
Contoh:
1 2
3 4 5
6 7 8 9
5 2 4 7 3
Hasil: 1 3 6 7 4 2 5 8 9
Graph Traversals (9 .11)
Contoh:
1 2
3 4 5
6 7 8 9
2 4 7 3
Hasil: 1 3 6 7 4 2 5 8 9
Graph Traversals (9 .12)
Contoh:
1 2
3 4 5
6 7 8 9
4 7 3
Hasil: 1 3 6 7 4 2 5 8 9
Graph Traversals (9 .13)
Contoh:
1 2
3 4 5
6 7 8 9
7 3
Hasil: 1 3 6 7 4 2 5 8 9
Graph Traversals (9 .14)
Contoh:
1 2
3 4 5
6 7 8 9
3
Hasil: 1 3 6 7 4 2 5 8 9
Graph Traversals (9 .15)
Contoh:
1 2
3 4 5
6 7 8 9
Hasil: 1 3 6 7 4 2 5 8 9
Implementasi Graph (3)
• Performansi untuk operasi dasar
struktur data Graph adalah:
Latihan soal
Untuk digraph A dan B di slide berikut, tentukanlah:
1. Adjacency matrix dan adjacency list
2. Pilih vertex A, lalu kunjungi semua vertex dengan cara DFS
dan BFS, buat tabel hasil penelusuran untuk masing-masing
cara.
3. Ubahlah digraph A dan B menjadi graph, lalu tentukan
adjacency matrix dan adjacency list dari graph ini.
4. Pilih vertex A, lalu kunjungi semua vertex dengan cara DFS
dan BFS untuk graph pada no 3 di atas. Buat tabel hasil
penelusuran untuk masing-masing cara
Latihan soal
A. Diketahui digraph berikut:
Latihan soal
B. Diketahui Digraph berikut ini:
16 8
6
6
5
PR 10 Teori
• Kelompok no ganjil: Latihan Soal dan
gunakan digraph pada no A
• Kelompok no genap: Latihan soal dan
gunakan digraph pada no B
PR Praktikum 10
• Buat progam Java untuk
mengimplementasikan struktur data graph
• Buat method untuk BFS dan DFS lalu uji
dengan dua graph di latihan soal