TEORI GRAPH
Graph digunakan untuk
merepresentasikan objek-objek diskrit
dan hubungan antara objek-objek tersebut. Representasi visual dari graf adalah dengan menuyatakan objek dinyatakan sebagai noktah, bulatan, atau titik, sedangkan hubungan antara objek dinyatakan dengan garis.
Gambar perkotaan |
I. SEJARAH GRAPH
Teori graf pertama kali dikembangkan oleh Leonhard Euler dalam memecahkan masalah jembatan Königsberg (tahun 1736). Permasalahannya adalah " Apakah bisa seseorang melalui sekali setiap jembatan yang menghubungkan kota-kota tersebut, dan kembali lagi ke kota dari mana ia berjalan".
Gambar1.1 (a) Jembatan Königsberg [ROS99], dan (b) graf yang merepresentasikan jembatan Königsberg |
Jawaban yang dikemukakan oleh Euler adalah: orang tidak mungkin melalui ketujuh jembatan itu masingmasing satu kali dan kembali lagi ke tempat asal keberangkatan jika derajat setiap simpul tidak seluruhnyagenap. Yang dimaksud dengan derajat adalah banyaknya garis yang bersisian dengan noktah. Sebagai contoh,simpul C memiliki derajat 3 karena ada tiga buah garis yang bersisian dengannya, simpul B dan D juga berderajat dua, sedangkan simpul A berderajat 5. Karena tidak semua simpul berderajat genap, maka tidak mungkin dilakuk an perjalananan berupa sirkuit (yang dinamakan dengan sirkuit Euler) pada graf tersebut.
II. DEFINISI GRAPH
Graf G didefinisikan sebagai pasangan himpunan (V, E), yang dalam hal ini:
V = himpunan tidak-kosong dari simpul-simpul (vertices atau node) = { v1 , v2 , ... , vn }
dan
E = himpunan sisi (edges atau arcs) yang menghubungkan sepasang simpul = {e1 , e2 , ... , en }
atau dapat ditulis singkat notasi G = (V, E).
CATATAN : menyatakan bahwa V tidak boleh kosong, sedangkan E boleh kosong. Jadi, sebuah graf
dimungkinkan tidak mempunyai sisi satu buah pun, tetapi simpulnya harus ada, minimal satu. Graf yang
hanya mempunyai satu buah simpul tanpa sebuah sisi pun dinamakan graf trivial.
Simpul pada graf dapat dinomori dengan huruf, seperti a, b, c, …, v, w, ..., dengan bilangan asli 1, 2, 3, ...,
atau gabungan keduanya. Sedangkan sisi yang menghubungkan simpul vi dengan simpul vj dinyatakan
dengan pasangan (vi, vj) atau dengan lambang e1, e2, …. Dengan kata lain, jika e adalah sisi yang
menghubungkan simpul vi dengan simpul vj , maka e dapat ditulis sebagai
e = (vi , vj)
Secara geometri graf digambarkan sebagai sekumpulan noktah (simpul) di dalam bidang dwimatra yang
dihubungkan dengan sekumpulan garis (sisi).
Gambar2.1 |
G1 adalah graf dengan
V = { 1, 2, 3, 4 }
E = { (1, 2), (1, 3), (2, 3), (2, 4), (3, 4) }
G2 adalah graf dengan
V = { 1, 2, 3, 4 }
E = { (1, 2), (2, 3), (1, 3), (1, 3), (2, 4), (3, 4), (3, 4) }
= { e1, e2, e3, e4, e5, e6, e7}
G3 adalah graf dengan
V = { 1, 2, 3, 4 }
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.
Gambar 3.1 Graph 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.
Gambar 3.2 a. Graph Ganda b. Graph Semu |
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.
Gambar 3.3 Graph Berhingga |
2. Graf tak-berhingga (unlimited graph)
Graf yang jumlah simpulnya, n, tidak berhingga banyaknya disebut graf tak-berhingga.
Gambar 3.4 Graph Tak-Berhingga |
Sisi pada graf dapat mempunyai orientasi arah. Berdasarkan orientasi arah pada sisi, maka secara umum graf
dibedakan atas 2 jenis:
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
sama.
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 |
Tinjau
graph :
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 |
Tinjau graph :
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
tersebut.
Notasi: d(v) menyatakan derajat simpul v.
d(1) = d(4) = 2
d(2) = d(3) = 3
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.
Pada graph berarah,
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)
7. LEMMA JABAT TANGAN
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)
http://www.google.co.id/#hl=id&site=&q=teori+graph&o=teori+graph&aq=f&aqi=&aql=&gs_sm=e&gs_upl=9625l12851l0l13497l11l10l0l0l0l0l0l0ll0l0&bav=on.2,or.r_gc.r_pw.,cf.osb&fp=9d2ef065c9df2c56&biw=1280&bih=73
http://www.google.co.id/#hl=id&site=&q=teori+graph&oq=teori+graph&aq=f&aqi=&aql=&gs_sm=e&gs_upl=9625l12851l0l13497l11l10l0l0l0l0l0l0ll0l0&bav=on.2,or.r_gc.r_pw.,cf.osb&fp=9d2ef065c9df2c56&biw=
1280&bih=737
http://hmmusu.blogspot.com/2010/10/dasar-dasar-teori-graf.html
http://docs.google.com/viewer?a=v&q=cache:ad6BqmKdr2EJ:mufidnilmada.staff.gunadarma.ac.id/Downloads/files/9734/IntroGraph.pdf+sejarah+teori+graph&hl=id&gl=id&pid=bl&srcid=ADGEESjVL9l6uKodvJzT50oLM966M5-ZqDOhFSkufcvNJNGHfrCCKPImoFQo71mUJomjPPSAQX-ue0cWsausJmcy2GcwnyQjTjtjW7CkEcB6IJdYlTsKOz8w4Er2qlKAUXgtjn24orvp&sig=AHIEtbQIdAtuGxGNdaDv2cYGhGS174U_YQ
http://ouseful.open.ac.uk/blogarchive/014016.html