Graph

Secara geometri graf digambarkan sebagai sekumpulan noktah (simpul) di dalam bidang dua dimensi yang dihubungkan dengan sekumpulan garis (sisi). Graph dapat digunakan untuk merepresentasikan objek-objek diskrit dan hubungan antara objek-objek tersebut. Representasi visual dari graph adalah dengan menyatakan objek sebagai noktah, bulatan atau titik, sedangkan hubungan antara objek dinyatakan dengan garis. Sebagai contoh, peta jaringan jalan kereta api yang menghubungkan sejumlah kota di pulau Jawa. Sesungguhnya peta tersebut adalah sebuah graph, yang dalam ini kota dinyatakan sebagai bulatan sedangkan jalan dinyatakan sebagai garis. Dengan diberikannya peta tersebut, maka dapat diketahui apakah ada lintasan jalan antara dua buah kota. Selain itu, bila panjang jalan kereta api antara dua buah kota bertetangga diketahui, maka juga dapat ditentukan rute perjalanan tersingkat dari kota A ke kota B.

Dalam pemrograman komputer, graph dapat direpresentasikan dengan menggunakan beberapa macam representasi graph, antara lain adjacency matrix, incidency matrix dan adjacency list. Namun, saya merekomendasikan untuk menggunakan adjacency list karena lebih efisien dan efektif dalam pengkodean dan lebih menghemat memori.

Pewarnaan Graph

Ada tiga macam persoalan pewarnaan graph (graph colouring), yaitu pewarnaan simpul, pewarnaan sisi dan pewarnaan wilayah (region). Pembahasan kali ini hanya dibatasi pada pewarnaan simpul saja.

Pewarnaan simpul adalah memberi warna pada simpul-simpul di dalam graph sedemikian sehingga setiap dua simpul bertetanga mempunyai warna yang berbeda. Salah satu terapan penting pewarnaan graph adalah mewarnai peta (colouring of map). Di dalam persoalan pewarnaan graph, tidak hanya sekedar mewarnai simpul-simpul dengan warna berbeda dari warna simpul tetangganya saja, namun juga menginginkan jumlah macam warna yang digunakan sesedikit mungkin.

Jumlah warna minimum yang dapat digunakan untuk mewarnai simpul disebut bilangan kromatik graph G.

Algoritma Welch Powell

Algoritma Welch-Powell dapat digunakan untuk mewarnai sebuah graf G secara efisien. Algoritma ini tidak selalu memberikan jumlah warna minimum yang diperlukan untuk mewarnai G, namun algoritma ini cukup praktis untuk digunakan dalam pewarnaan simpul graph. Algoritma Welch-Powell dapat dinyatakan sebagai berikut:

1. Urutkan simpul-simpul dari G dalam derajat yang menurun.

2. Gunakan satu warna untuk mewarnai simpul pertama (yang mempunyai derajat tertinggi) dan simpul-simpul lain (dalam urutan yang berurut) yang tidak tertetangga dengan simpul pertama ini.

3. Mulai lagi dengan simpul derajat tertinggi berikutnya di dalam daftar terurut yang belum diwarnai dan ulangi proses pewarnaan simpul dengan menggunakan warna kedua.

4. Ulangi penambahan warna-warna sampai semua simpul telah diwarnai.


Algoritma Recursive Largest First

Langkah kerja dari algoritma Recursive Largest First secara singkat :
1. Buat daftar semua simpul yang belum diwarnai dengan derajat tetangga (jumlah node tetangga yang belum diwarnai) terurut secara descending.
2. Ambil simpul yang memiliki derajat tetangga tertinggi dan warnai dengan sebuah warna.
3. Buang simpul yang telah diwarnai pada langkah (2) dan semua simpul yang bertetangga dengan simpul tersebut dari daftar simpul.
4. Warnai semua simpul yang tersisa pada daftar simpul dengan warna yang sama dengan warna simpul tadi.
5. Ulangi langkah-langkah diatas hingga semua node pada graph terwarnai.


Tree

Pohon (tree) adalah graph yang khusus. Pohon dapat didefinisikan sebagai graph-tak-berarah terhubung yang tidak mengandung sirkuit. Menurut definisi ini, ada dua sifat penting pada pohon, yaitu terhubung dan tidak mengandung sirkuit.

Dalam kehidupan sehari-hari, orang telah lama menggunakan pohon untuk menggambarkan hirarkhi. Misalnya, pohon silsilah keluarga, struktur organisasi, organisasi pertandingan, dan lain-lain. Para ahli bahasa menggunakan pohon untuk menguraikan kalimat, yang disebut pohon parsing (parse tree).

Spanning Tree

Misalkan G = (V, E) adalah graph-tak-berarah terhubung yang bukan pohon, yang berarti di G terdapat beberapa sirkuit. G dapat diubah menjadi pohon T = (V1, E1) dengan cara memutuskan sirkuit-sirkuit yang ada. Caranya, mula-mula dipilih sebuah sirkuit, lalu hapus satu buah sisi dari sirkuit ini. G akan tetap terhubung dan jumlah sirkuitnya berkurang satu. Bila proses ini dilakukan berulang-ulang sampai semua sirkuit di G hilang, maka G menjadi sebuah pohon T, yang dinamakan pohon merentang (spanning tree).

Contoh aplikasi pohon merentang misalnya pada pemeliharaan jalan raya.

Minimum Spanning Tree

Jika G adalah graph berbobot, maka bobot pohon merentang T dari G didefinisikan sebagai jumlah bobot semua sisi di T. Pohon merentang yang berbeda mempunyai bobot yang berbeda pula. Di antara semua pohon merentang di G, pohon merentang yang berbobot minimum dinamakan pohon merentang minimum (minimum spanning tree). Pohon merentang minimum merupakan pohon merentang yang paling penting. Pohon merentang minimum mempunyai terapan yang luas dalam praktek.

Misalkan pemerintah akan membangun jalur rel kereta api yang menghubungkan sejumlah kota. Membangun jalur rel kereta api biayanya mahal, karena itu pembangunan jalur ini tidak perlu menghubungkan langsung dua buah kota, tetapi cukup membangun jalur kereta seperti pohon merentang. Karena di dalam sebuah graph mungkin saja terdapat lebih dari satu pohon merentang, harus dicari pohon merentang yang mempunyai jumlah jarak terpendek, dengan kata lain harus dicari pohon merentang minimum.

Algoritma yang dapat digunakan untuk membangun pohon merentang minimum ada dua buah, yaitu algoritma Prim dan algoritma Kruskal.

Algoritma Prim

Langkah kerja dari algoritma Prim dapat dinyatakan sebagai berikut: (G = graph input, T = graph hasil)

a. Ambil sisi dari graph G yang berbobot minimum, masukkan ke dalam T.

b. Pilih sisi e yang mempunyai bobot minimum dan bersisian dengan simpul di T, tetapi e tidak membentuk sirkuit di T. Masukkan e ke dalam T.

c. Ulangi langkah (b) sebanyak n – 2 kali.

Algoritma Kruskal

Pada algoritma Kruskal, sisi-sisi di dalam graph diurut terlebih dahulu berdasarkan bobotnya dari kecil ke besar. Setelah itu, baru dilakukan langkah kerja berikut ini:

a. T masih kosong.

b. Pilih sisi e dengan bobot minimum yang tidak membentuk sirkuit di T. Masukkan e ke dalam T.

c. Ulangi langkah (b) sebanyak n – 1 kali.

N.B. : Suatu graph dapat memiliki lebih dari satu buah minimum spanning tree.

14 komentar:

Anonim mengatakan...

Mas, contoh penerapan dari algoritma Welch Powell itu seperti apa ya???

Terima kasih...

Paitan mengatakan...

Algoritma pewarnaan graph terutama digunakan untuk melakukan penjadwalan seperti penjadwalan ujian, mata kuliah dan sebagainya.

anti mengatakan...

Apa mas punya skripsi ato makalah ttg aplikasi penjadwalan?

Paitan mengatakan...

Ada. PL Pengambilan Keputusan dalam Penjadwalan dengan algoritma Recursive Largest First. Input berupa jumlah variabel, nama variabel dan daftar (list) dari isi setiap variabel. Kemudian dijelaskan cara kerja algoritma dan hasil penjadwalan yang diperoleh.

anti mengatakan...

saya blh tau link makalah yg b'kaitan sm penjadwalan dg algoritma rekursif?

Saya mau mengambil skripsi ttg itu....

Terima kasih......

Paitan mengatakan...

Sebenarnya ide judul ini saya dapatkan dari buku Matematika Diskrit karya Rinaldi Munir. Di dalam buku itu ada dijelaskan cara kerja dari Algoritma Welch-Powell dan penerapan algoritma pewarnaan simpul graph. Sedangkan, algoritma Recursive Largest First itu saya dapatkan dalam bentuk pdf, alamat lengkapnya saya udah lupa. Algoritmanya akan saya tempelkan pada blog ini.

Paitan mengatakan...

Sedangkan, perangkat lunak pengambilan keputusan itu sendiri lagi saya rancang dan rencananya akan siap dalam 1 bulan ini.

anti mengatakan...

Mana mas ulasan ttg algoritma Recursive Largest First?

Mas buat pake bahas pemrograman apa?

G dibahas ya mas cara pengerjaannya diblog ini?Kek use case nya, dsb...

Unknown mengatakan...

algoritma welch powell hanya cocok digunakan untuk graph dengan orde yang kecil. belum ada suatu algoritma yang tepat untuk mewarnai garph sehingga memperoleh bilangan kromatik yang tepat. algoritma welch powell hanya dapat menentukan batas atas warna. saya sudah melakukan penelitian sederhana untuk pewarnaan verteks pada graph, dan telah menemuikan sebuah hasil

Paitan mengatakan...

Memang, algoritma Welch-Powell bukanlah sebuah algoritma yang bagus, tetapi cocok untuk digunakan sebagai dasar dalam pembelajaran pewarnaan verteks pada graph. Algoritma lainnya yang hampir mirip dengan algoritma Welch-Powell adalah algoritma Recursive-Largest First. Terima kasih atas saran dan perhatian anda.

rina mengatakan...

assalamualaikum
batas atas minimum tu apa mksdnya?
apa kelebihan algritma welch powell dgn algortma recursive largest first

rina mengatakan...

assalamua'laikum
batas bawah minimum itu apa?
apa kelebihan algritma welch powell dgn algrtma recursive largest first

Unknown mengatakan...

Maaf mas mau tanya, bentuk graf mengenai penjelasan bahwa "Algoritma ini tidak selalu memberikan jumlah warna minimum yang diperlukan untuk mewarnai G" itu sepeti apa mas?

Terimakasih atas jawabannya.

Unknown mengatakan...
Komentar ini telah dihapus oleh pengarang.