E = { (1, 2), (1, 3), (2, 3), (2, 4), (3, 4) }
E = { (1, 2), (2, 3), (1, 3), (1, 3), (2, 4), (3, 4), (3, 4) }
= { e1, e2, e3, e4, e5, e6, e7}
E = { (1, 2), (2, 3), (1, 3), (1, 3), (2, 4), (3, 4), (3, 4), (3, 3) }
= { e1, e2, e3, e4, e5, e6, e7, e8}
Pada G2, sisi e3 = (1, 3) dan sisi e4 = (1, 3) dinamakan sisi-ganda (multiple edges atau paralel edges) karena
kedua sisi ini menghubungi dua buah simpul yang sama, yaitu simpul 1 dan simpul 3. Pada G3, sisi e8 = (3, 3)
dinamakan gelang atau kalang (loop) karena ia berawal dan berakhir pada simpul yang sama.
III. JENIS-JENIS GRAPH
Berdasarkan ada tidaknya gelang atau sisi ganda pada suatu graf, maka secara umum graf dapat digolongkan
menjadi dua jenis:
1. Graf sederhana (simple graph).
Graf yang tidak mengandung gelang maupun sisi-ganda dinamakan graf sederhana.
2. Graf tak-sederhana (unsimple-graph).
Graf yang mengandung sisi ganda atau gelang dinamakan graf tak-sederhana (unsimple graph). Ada dua
macam graf tak-sederhana, yaitu graf ganda (multigraph) dan graf semu (pseudograph). Graf ganda adalah
graf yang mengandung sisi ganda. Sisi ganda yang menghubungkan sepasang simpul bisa lebih dari dua
buah. Graf semu adalah graf yang mengandung gelang.
Jumlah simpul pada graf kita sebut sebagai kardinalitas graf, dan dinyatakan dengan n = |V|, dan jumlah sisi
kita nyatakan dengan m = |E|. Pada contoh di atas, G1 mempunyai n = 4, dan m = 4, sedangkan G2
mempunyai n = 3 dan m = 4.
Berdasarkan jumlah simpul pada suatu graf, maka secara umum graf dapat digolongkan menjadi dua jenis:
1. Graf berhingga (limited graph)
Graf berhingga adalah graf yang jumlah simpulnya, n, berhingga.
2. Graf tak-berhingga (unlimited graph)
Graf yang jumlah simpulnya, n, tidak berhingga banyaknya disebut graf tak-berhingga.
Sisi pada graf dapat mempunyai orientasi arah. Berdasarkan orientasi arah pada sisi, maka secara umum graf
1. Graf tak-berarah (undirected graph)
Graf yang sisinya tidak mempunyai orientasi arah disebut graf tak-berarah. Pada graf tak-berarah, urutan
pasangan simpul yang dihubungkan oleh sisi tidak diperhatikan. Jadi, (vj , vk) = (vk , vj) adalah sisi yang
|
Gambar 3.5 Graph tak-berarah |
2. Graf berarah (directed graph atau digraph)
Graf
yang setiap sisinya diberikan orientasi arah disebut sebagai graf
berarah. Pada graf berarah, (vj, vk) dan (vk, vj) menyatakan dua buah
busur yang berbeda, dengan kata lain (vj, vk) ≠ (vk , vj). Untuk busur
(vj, vk), simpul vj dinamakan simpul asal (initial vertex) dan simpul vk
dinamakan simpul terminal (terminal vertex).
|
Gambar 3.6 Graph Berarah |
IV.CONTOH TERAPAN TEORI GRAPH
1. Rangkaian listrik.
Kirchoff (1847) menggunakan graf untuk memodelkan rangkaian listrik. Berdasrkan graf tersebut Kirchoff
menurunkan persamaan arus yang masuk dan keluar pada tiap simpul. Dari sistem persamaan lanjar (linier)
simultan yang diperoleh dapat dapat dihitung arus listrik yang mengalir pada setiap komponen.
|
Gambar 4.1 (a) Rangkaian listrik, (b) graf yang menyatakan rangkaian listrik |
2. Isomer senyawa kimia karbon
Arthur Cayley (1857) menggunakan graf dalam memodelkan molekul senyawa alkana CnH2n+2 untuk
menghitung jumlah isomernya. Atom karbon (C) dan atom hidrogen (H) dinyatakan sebagai simpul,
sedangkan ikatan antara atom C dan H dinyatakan sebagai sisi (Gambar 8.7). Isomer adalah senyawa kimia
yang mempunyai rumus molekul sama tetapi rumus bangun (bentuk graf) berbeda.
|
Gambar 4.2 Graf senyawa alkana, masing-masing metana, etana, dan propana |
3. Transaksi konkuren pada basis data terpusat
Ini adalah terapan graf dalam bidang komputer. Basis data (database) terpusat melayani beberapa transaksi
(T) yang dilakukan secara konkuren (bersamaan). Transaksi terhadap basis data dapat berupa operasi
pembacaan dan operasi penulisan terhadap data yang sama. Persoalan kritis pada proses konkuren adalah
deadlock, yaitu keadaan yang timbul karena beberapa transaksi saling menunggu transaksi lainnya sehingga
sistem menjadi hang. Misalnya, transaksi T1 akan membaca data B yang sedang ditulis oleh transaksi T2,
sedangkan T2 akan membaca data A yang sedang ditulis T1. Kedua transaksi saling menunggu data yang
sedang dikuncinya (circular wait). Bila terdapat lebih dari dua transaksi yang saling menunggu sehingga
membentuk siklus, maka timbul deadlock. Cara yang digunakan sistem untuk mendeteksi deadlock adalah
dengan membangun graf transaksi secara periodik dan memeriksa apakah terdapat siklus pada grafnya. Jika
ada siklus, maka kondisi deadlock terjadi .
Misalkan:
transaksi T0 menunggu transaksi T1 dan T2 ;
transaksi T2 menunggu transaksi T1 ;
transaksi T1 menunggu transaksi T3 ;
transaksi T3 menunggu transaksi T2 ;
Graf berarah yang menyatakan transaksi menunggu transaksi lainnya ditunjukkan pada Gambar 8.8. Simpul
menyatakan transaksi, sedangkan busur (Ti, Tj) menyatakan transaksi Ti menunggu transaksi Tj. Graf ini
mengandung siklus, yaitu
T1 - T3 - T2 - T1
Untuk mengatasi deadlock, sistem harus memutuskan siklus dengan cara membatalkan satu atau lebih
transaksi di dalam siklus. Metode penanganan deadlock tidak dibahas di dalam buku ini, karena merupakan
bagian dari kuliah Sistem Operasi dan Sistem Basis Data.
|
Gambar 4.3 Graf transaksi yang menunjukkan keadaan deadlock |
4. Pengujian program
Dalam bidang rekayasa perangkat lunak, sebuah program harus mengalami tahap pengujian untuk
menemukan kesalahan (bug). Salah satu pengujian program adalah pengujian eksekusi. Aliran kendali
program harus diperiksa untuk memastikan apakah aliran tersebut sudah benar untuk berbagai kasus data uji.
Aliran kendali program dimodelkan dengan graf berarah yang dinamakan graf alir (flow graph). Pada graf
berarah tersebut, simpul menyatakan pernyataan atau kondisi yang dievaluasi, sedangkan busur menyatakan
aliran kendali program ke pernyataan atau kondisi berikutnya.
Sebagai contoh, misalkan terdapat sebagian teks program Pascal di bawah ini:
|
Gambar 4.4 |
|
Gambar 4.5 Graf alir yang menggambarkan aliran kendali program |
Data pengujian harus dirancang sedemikian sehingga semua lintasan di dalam graf alir pernah dilalui
minimum satu kali. Tujuannya agar kesalahan pada setiap lintasan eksekusi dapat ditemukan dan perbaikan
program dilakukan.
5. Terapan graf di dalam teori otomata [LIU85].
Marilah kita simak masalah pemodelan perilaku sebuah mesin jaja (vending machine) yang menjual coklat
seharga 15 sen sebuah. Untuk memudahkan, kita akan memisalkan bahwa mesin tersebut hanya menerima
uang logam 5 sen dan 10 sen, dan mesin tidak akan memberi kembalian bila yang dimasukkan lebih dari 15
sen. Graf berbobot (setiap sisi diberi sebuah harga, akan diejlaskan kemudian)
|
Gambar 4.6 Graf yang memodelkan perilaku mesin jaja |
6. Turnamen Round-Robin
Turnamen yang setiap tim bertanding dengan tim lainnya hanya sekali disebut turnamen round-robin.
Turnamen semacam itu dimodelkan dengan graf berarah, yang dalam hal ini simpul menyatakan tiap tim
yang bertanding, dan busur menyatakan pertandingan. Busur (a, b) berarti tim a berhasil memukul tim b.
Gambar 4.7 memperlihatkan turnamen round-robin untuk 6 buah tim. Tim 1 tidak terkalahkan, sedangkan
tim 3 tidak pernah menang.
|
Gambar 4.7 Turnamen round-robin |
Contoh terapan graf yang lain adalah menyatakan aliran informasi dalam pengolahan sinyal dan aliran massa
dalam industri kimia. Graf juga berguna memodelkan sesuatu yang abstrak, seperti struktur perusahaan,
tingkatan sosial, pohon keluarga, aliran kerja dalam proyek, perencanaan dan manajemen proyek,
perpindahan dalam permainan (game), dan langkah-langkah pemecahan masalah. Terapan yang terakhir ini
merupakan kemampuan dasar yang harus dikuasai dalam bidang kecerdasan buatan (artificial intelligence).
7. Terminologi Dasar
Kita akan sering menggunakan terminologi (istilah) yang berkaitan dengan graf. Di bawah ini didefinisikan
beberapa terminologi yang sering dipakai. Contoh graf pada Gambar 8.12 akan digunakan untuk
memperjelas terminologi yang kita definisikan. Graf yang pertama, G1, adalah graf sederhana, G2 adalah graf
semu yang mengandung sisi ganda maupun gelang, sedangkan G3 adalah graf dengan sebuah simpul yang
terpisah dari simpul lainnya. Ketiga buah graf ini adalah graf tidak-berarah. Untuk terminologi yang
menyangkut graf berarah, contoh grafnya akan digambarkan pada waktu pembahasan
|
Gambar 4.8 Tiga buah graf, G1, G2, dan G3 |
1. Bertetangga (Adjacent)
Dua buah simpul pada graf tak-berarah G dikatakan bertetangga bila keduanya terhubung
langsung dengan sebuah sisi. Dengan kata lain, vj bertetangga dengan vk jika (vj, vk) adalah sebuah sisi pada graf G.
|
Gambar 5.1 |
simpul 1 bertetangga dengan simpul 2 dan 3,
simpul 1 tidak bertetangga dengan simpul 4.
2. Bersisian (Incident)
Untuk sembarang sisi e = (vj, vk), sisi e dikatakan bersisian dengan simpul vj dan simpul vk
|
Gambar 5.2 |
sisi (2, 3) bersisian dengan simpul 2 dan simpul 3, sisi (2,
4) bersisian dengan simpul 2 dan simpul 4, tetapi sisi (1, 2)
tidak bersisian dengan simpul 4.
3. Simpul Terpencil (Isolated Vertex)
Simpul
terpencil ialah simpul yang tidak mempunyai sisi yang bersisian
dengannya. Atau, dapat juga dinyatakan bahwa simpul terpencil adalah
simpul yang tidak satupun bertetangga dengan simpulsimpul lainnya.
|
Gambar 5.3 Simpul terpencil |
4. Graf Kosong (Null Graph atau Empty Graph)
Graf yang himpunan sisinya merupakan himpunan kosong disebut sebagai graf kosong dan
ditulis sebagi Nn , yang dalam hal ini n adalah jumlah simpul.
|
Gambar 5.4 Graf kosong N5 |
5. Derajat (Degree)
Derajat suatu simpul pada graf tak-berarah adalah jumlah sisi yang bersisian dengan simpul
Notasi: d(v) menyatakan derajat simpul v.
Simpul terpencil adalah simpul dengan d(v) = 0, karena tidak ada satupun sisi yang bersisian dengan simpul
tersebut. Pada Gambar 8.12(c), d(5) = 0.
Sisi gelang (loop) dihitung berderajat dua.
Alasan mengapa gelang mengkontribusikan dua untuk derajat simpulnya adalah karena gelang
direpresentasikan sebagai (v, v), dan simpul v bersisian dua kali pada sisi (v, v).
Simpul yang berderajat satu disebut anting-anting (pendant vertex). Dengan kata lain, anting-anting hanya
bertetangga dengan sebuah simpul. Pada Gambar 8.13(c), d(4) = 1, karena itu simpul 4 adalah anting-anting.
din(v) =
derajat-masuk (in-degree)
= jumlah busur yang masuk ke simpul v
dout(v) =
derajat-keluar (out-degree)
= jumlah busur yang keluar dari simpul v
d(v) = din(v) + dout(v)
Jumlah
derajat semua simpul pada suatu graf adalah genap, yaitu dua kali
jumlah sisi pada graf tersebut. Dengan kata lain, jika G = (V, E), maka
( catatan: ingatlah 2 E selalu bernilai genap)
Lemma
ini dikenal dengan lemma jabat tangan (handshaking lemma). Hal ini
disebabkan oleh setiap sisi dihitung dua kali, yaitu pada ujung kiri
sebagai bagian dari simpul kiri dan pada ujung kanan dihitung sebagai
bagian dari simpul kanan. Layaknya orang berjabat tangan, maka jumlah
tangan yang berjabatan adalah genap dan jumlah tangan yang berjabatan
adalah dua kali jumlah jabatan tangan yang terjadi [DUL94]. Catatlah
bahwa Lemma Jabat Tangan juga benar untuk graf berarah, yang dalam hal
ini d(v) = din(v) + dout(v).
8. Lintasan (Path)
Lintasan yang panjangnya n dari simpul awal v0 ke simpul tujuan vn di dalam graf G ialah
barisan berselang-seling simpul-simpul dan sisi-sisi yang berbentuk v0, e1, v1, e2, v2,... , vn –1, en, vn sedemikian
sehingga e1 = (v0, v1), e2 = (v1, v2), ... , en = (vn-1, vn) adalah sisi-sisi dari graf G.
Jika
graf yang ditinjau adalah graf sederhana, maka kita cukup menuliskan
lintasan sebagai barisan simpu-lsimpul saja: v0, v1, v2, ... , vn –1, vn
, karena antara dua buah simpul berturutan di dalam lintasan tersebut
hanya ada satu sisi.
7. Siklus (Cycle) atau Sirkuit (Circuit)
Lintasan yang berawal dan berakhir pada simpul yang sama disebut sirkuit atau siklus.
Pada Gambar 8.12(a), 1, 2, 3, 1 adalah sebuah sirkuit. Panjang sirkuit adalah jumlah sisi di dalam sirkuit tersebut.
V. Representasi Graph
1. Matriks
Ketetanggaan (adjacency matrix)
2. Matriks Bersisian (incidency matrix)
3. Senarai Ketetanggaan (adjacency list)