Senin, 03 Oktober 2016

Graph Problems

" Graph Problems "




       Graf adalah kumpulan 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 (Vertex), sedangkan hubungan antara objek dinyatakan dengan garis (Edge).

G = (V, E)
Dimana
G = Graph
V = Simpul atau Vertex, atau Node, atau Titik
E = Busur atau Edge, atau arc

Graf merupakan suatu cabang ilmu yang memiliki banyak terapan. Banyak sekali struktur yang bisa direpresentasikan dengan graf, dan banyak masalah yang bisa diselesaikan dengan bantuan graf. Seringkali graf digunakan untuk merepresentasikan suaru jaringan. Misalkan jaringan jalan raya dimodelkan graf dengan kota sebagai simpul (vertex/node) dan jalan yang menghubungkan setiap kotanya sebagai sisi (edge) yang bobotnya (weight) adalah panjang dari jalan tersebut.


Graph dapat digunakan sebagai cara yang sangat sederhana untuk memodelkan
banyak jaringan. Secara luas, sebuah jaringan adalah sebuah sistem yang melibatkan
aliran atau perpindahan komoditas. Sebuah jaringan komunikasi misalnya, dapat
dimodelkan ke dalam bentuk graph, dimana simpul menyatakan pusat komunikasi
(contohnya, saluran telepon) dan busur atau arc menyatakan jaringan komunikasi
(contohnya, saluran telegraf). Dalam memodelkan sebuah jaringan dengan graph,
simpul dalam graph umumnya dinyatakan dalam bentuk titik yang menyatakan asal
aliran serta tempat berakhir (contohnya, stasiun kereta api, terminal, pabrik dan lainlain).
Busur atau arc dalam graph secara umum menyatakan saluran dimana
komoditas berakhir (contohnya, trayek kereta api, rute penerbangan, aluran pipa dan
lain-lain). Sebuah graph juga memberikan model struktural dari jaringan. Dalam
kebanyakan jaringan, metode konstruksi biasanya dinyatakan oleh harga, efisiensi,
kehandalan dan kapasitas.

Jenis Graph

Berdasarkan arah dan bobot

1. Graph berarah dan berbobot (directed graph)
Graph yang setiap sisinya diberikan orientasi arah merupakan graph berarah, yang
disebut dengan busur (arc). Dalam graph berarah, (u,v) dan (v,u) menyatakan dua
buah busur yang berbeda, dengan kata lain bahwa (u,v) ¹ (v,u) . Pada busur (u,v),
simpul u dinamakan simpul asal dan simpul v merupakan simpul tujuan.
Graph berarah dan berbobot sering digunakan untuk menggambarkan aliran proses,
peta lintas kota dan lain sebagainya. Sehingga, pada graph gelang atau loop
diperbolehkan tetapi sisi ganda tidak diperbolehkan. Berikut contoh graph berarah dan
berbobot pada Gambar 2.1 dengan lima buah simpul dan delapan buah sisi.


Gambar 2.1 Graph Berarah dan Berbobot

2. Graph berarah dan tidak berbobot
Merupakan graph yang mempunyai orientasi arah namun tidak mempunyai bobot
apapun. Berikut contoh graph berarah dan tidak berbobot pada Gambar 2.2 dengan
lima buah simpul dan delapan buah sisi.



Gambar 2.2 Graph Berarah dan Tidak Berbobot

3. Graph tidak berarah dan berbobot (undirected graph)
Merupakan graph yang tidak mempunyai orientasi arah namun memiliki suatu bobot
pada sisinya. Sehingga, (u,v) = (v,u)merupakan sisi yang sama. Graph tidak berarah
dan berbobot ini sering digunakan dalam menggambarkan jaringan saluran telepon,
karena saluran telepon dapat beroperasi pada dua arah. Berikut contoh graph tidak
berarah dan berbobot pada Gambar 2.3 dengan lima buah simpul dan delapan buah
sisi.



Gambar 2.3 Graph Tidak Berarah dan Berbobot

4. Graph tidak berarah dan tidak berbobot
Graph yang setiap sisinya tidak mempunyai baik orientasi arah maupun bobot apapun.
Berikut contoh graph tidak berarah dan tidak berbobot pada Gambar 2.4 dengan lima
buah simpul dan delapan buah sisi.


Gambar 2.4 Graph Tidak Berarah dan Tidak Berbobot

Berdasarkan sifat keterhubungan

1. Perjalanan (Walk)
Perjalanan atau walk pada suatu graph G adalah barisan vertex dan edge secara
berganti-ganti 1 1 2 2 1 , , , ,..., , n n v e v e e v - dimana edge e1 menghubungkan vi dan i 1 v + dan
dapat hanya ditulis barisan edge atau barisan vertex saja ( 1 2 1 , ,..., n e e e - atau
1 2 1 , ,... , n n v v v v - ), dalam hal ini 1 v disebut vertex awal, dan n v disebut vertex akhir.
Vertex awal dan vertex akhir dari suatu walk mungkin saja sama, dengan demikian
disebut closed walk.

2. Lintasan (Trail)
Lintasan dari suatu graph G merupakan suatu walk dimana setiap edge-nya berlainan
atau dengan kata lain tidak boleh berulang.

3. Jalur (Path)
Path dari suatu graph G adalah suatu walk dimana semua unsur vertex-nya berbeda
kecuali untuk vertex awal dan vertex akhir.

4. Terhubung (Connected)
Suatu graph G dikatakan connected jika untuk setiap pasangan vertex didalam G
terdapat paling sedikit satu path. Sebaliknya, jika didalam suatu graph G terdapat
pasangan vertex yang tidak mempunyai path penghubung, graph yang demikian
disebut disconnected graph.

5. Sirkuit (Cycle)
Sirkuit atau cycle adalah path dengan vertex awal sama dengan vertex akhir.
Banyaknya edge yang terdapat dalam suatu walk disebut length dari path tersebut.

Representasi Graph

Suatu graph dapat direpresentasikan ke beberapa bentuk. Representasi graph dapat
digunakan untuk mengimplementasikan graph tersebut ke dalam bentuk tertentu,
sehingga dapat digunakan pada berbagai kasus yang berbeda. Matriks dapat digunakan
untuk menyatakan suatu graph. Hal ini sangat membantu program komputer yang
berhubungan dengan graph. 

Ada dua cara standard dalam representasikan suatu graph,
yaitu dengan matriks ketetanggaan (adjacency matrix) dan senarai ketetanggaan
(adjacency list).

1. Matriks ketetanggaan (adjacency matrix)
Matriks ketetanggaan dari suatu graph G dengan nxn matriks A = [aij] menunjukkan
jumlah edge yang menghubungkan vi dan vj. aij bernilai 1 jika edge (i, j)ÎE
mempunyai arah dari vertex iÎV ke vertex jÎV , dan bernilai 0 jika tidak ada
orientasi arah sama sekali. Jika orientasi arah adalah loop, maka diberi nilai 2. Jika
graph G merupakan graph tidak berarah, setiap edge (i,j). Dalam hal ini, matriks
ketetanggaan E merupakan matriks simetris. Berikut tabel matriks ketetanggaan
(adjacency matrix) untuk graph berarah dan berbobot pada Gambar 2.1


Matriks Ketetanggaan Graph Gambar 2.1

Adapun bentuk matriks ketetanggaan untuk graph tidak berarah dan tidak berbobot
pada Gambar 2.4 dapat dilihat pada Tabel 2.2.



Matriks Ketetanggaan Graph Gambar 2.2

2. Senarai Ketetanggaan (adjacency list)
Pada representasi adjacency list dari suatu graph, n baris dari suatu matriks
ketetanggaan direpresentasikan sebagai n link list. Setiap vertex G memiliki sebuah
list. Vertex pada list i mempresentasikan vertex terhubung dari vertex i. Setiap vertex
setidaknya memiliki dua field: vertex dan link. Berikut bentuk senarai ketetanggaan
untuk graph berarah dan berbobot pada Gambar 2.1



Gambar 2.5 Senarai Ketetanggaan Graph Gambar 2.1

Adapun bentuk senarai ketetanggaan untuk graph tidak berarah dan tidak berbobot
pada Gambar 2.4 dapat dilihat pada Gambar 2.6.



Gambar 2.6 Senarai Ketetanggaan Graph Gambar 2.4

Permasalahan Optimasi

Persoalan optimasi (optimization problem) adalah persoalan yang menuntut
pencarian solusi optimum. Persoalan optimasi dibagi menjadi dua macam, yaitu
maksimasi (maximization) dan minimasi (minimization). Penentuan jalur terpanjang
merupakan salah satu contoh persoalan optimasi dimana termasuk ke dalam persoalan
optimasi maksimasi (maximization). Secara umum, penentuan jalur terpanjang dibagi
menjadi dua metode, yaitu metode konvensional, yang menggunakan perhitungan
matematika secara biasa dan metode heuristik, metode yang menggunakan
perhitungan matematika secara komputasi.

1. Metode Konvensional
Metode konvensional adalah metode yang diterapkan dengan menggunakan
perhitungan matematika murni atau secara biasa. Ada beberapa metode konvensional
yang sering digunakan untuk menyelesaikan masalah optimasi, diantaranya: algoritma
Djikstra, algoritma Floyd-Warshall, dan algoritma Bellman-Ford.

2. Metode Heuristik
Metode heuristik adalah salah satu dari bidang kecerdasan buatan yang digunakan
untuk menyelesaikan masalah optimasi. Terdapat beberapa algoritma dari metode
heuristik yang sering digunakan dalam permasalahan optimasi, diantaranya adalah
algoritma genetika, algoritma pencarian tabu, jaringan saraf tiruan, algoritma semut
dan lain-lain.

Persoalan Lintasan Terpanjang (Longest Path Problem)

Menurut Cormen dkk (1992), persoalan lintasan terpanjang pada graph merupakan
salah satu permasalahan optimasi. Graph yang digunakan merupakan graph tidak
berarah berbobot (undirected weighted graph), yaitu graph yang diberi bobot dan
tidak memiliki arah. Bobot antar vertex dinyatakan sebagai jarak antar kota, waktu,
pengiriman pesan dan lain-lain. Lintasan terpanjang merupakan suatu jaringan atau
kerangka jalur petunjuk perjalanan dari suatu vertex ke vertex lainnya atau yang
menjadi tujuan perjalanan dengan beberapa pilihan jalur yang mungkin untuk di
jalani.

Hamiltonian cycle merupakan contoh penggunaan lintasan terpanjang, karena
prinsip pada Hamiltonian cycle dimana setiap vertex hanya dikunjungi tepat satu kali.
Sehingga diperoleh bahwa Hamiltonian Cycle Longest Path.
Persoalan lintasan terpanjang (longest path problem) mempunyai beberapa
manfaat, diantaranya, yaitu kasus perhitungan worst-delay pada paket Ethernet.
Penggunaan real-time Ethernet protocol menjadi lebih relevan untuk aplikasi waktukritis
jaringan industri. Dalam konteks ini, disajikan suatu metode untuk menghitung
worst-delay paket Ethernet yang diaktifkan (Schmidt dkk, A Longest-Path Problem
for Evaluating The Worst-Case Packet Delay of Switched Ethernet).

Persoalan lintasan terpanjang juga digunakan dalam penjadwalan rute dan mesin bor
untuk mengebor lubang pada sebuah PCB dengan vertex sebagai bagian dari mesin
atau kakas untuk dibor dan edge sebagai waktu yang dibutuhkan dalam melakukan
retooling pada robot, manufaktur printed circuit dan sebagainya (Nugrahadi, 2007).

NP - Complete
NP – Problem adalah himpunan persoalan keputusan yang dapat diselesaikan oleh
algoritma non-deterministik dalam waktu polinomial. Menurut Munir (2005), NP –
Problem termasuk persoalan NP – Complete yang merupakan persoalan NP yang
paling sulit. Kebutuhan waktu suatu algoritma sangat bervariasi, mulai dari
O(1),O(log n),O(n),O(n2 ) dan sebagainya. Seluruh algoritma yang ada sejauh ini
merupakan algoritma polynomial-time: dimana input dengan ukuran n, worst-case
running time adalah ( ) k O n (dibaca ‘Big-O’) untuk beberapa nilai konstan k. Semua
algoritma digolongkan kedalam jenis algoritma yang ‘baik’ yang disebut sebagai
solusi polinomial. Hal ini dikarenakan oleh kebutuhan waktunya secara asimptotik
yang dibatasi oleh fungsi polinomial.

Adapun teknik-teknik yang dapat diterapkan pada algoritma dalam
permasalahan NP – Complete untuk menyelesaikan masalah komputasi pada
umumnya, yaitu:

a. Approximation: mencari solusi yang ‘hampir’ optimal solusi yang layak
(feasible solution).
b. Randomization: digunakan untuk mendapatkan running time yang diharapkan
lebih cepat dari rata-rata dan resiko kesalahan pada algoritma lebih kecil.
c. Restriction: algoritma diharapkan mempunyai running time yang lebih cepat
dengan membatasi input.
d. Parameterization: algoritma akan berjalan lebih cepat jika input parameter
tetap.
e. Heuristic: suatu algoritma diharapkan akan bekerja ‘cukup baik’.

Persoalan lintasan terpanjang yang juga merupakan permasalahan Hamiltonian cycle
merupakan persoalan dimana tidak terdapat solusi waktu polinomial untuk
menyelesaikannya. Contohnya Persoalan Pedagang Keliling (Traveling Salesman
Problem) yang merupakan implementasi pada persoalan Hamiltonian cycle yang juga
merupakan lintasan terpanjang, memiliki kompleksitas O(n!) .
Bukti. Diberikan suatu contoh graph G, salah satu algoritma keputusan yang mungkin
melampirkan seluruh permutasi dari vertex-vertex G lalu memeriksa hasil seluruh
permutasi untuk melihat apakah termasuk kedalam Hamiltonian cycle. Termasuk jenis
apakah running time pada algoritma tersebut? Kita gunakan representasi graph dalam
matriks adjacency, maka jumlah m pada vertex-vertex dalam graph adalah W( n) ,
dimana n = G merupakan panjang dari representasi G. Sehingga terdapat m!
permutasi yang mungkin pada vertex-vertex tersebut dan karena itu running time
algoritma adalah ( !) ( !) (2 ) n W m =W n =W .

Algoritma DFS (Depth-First Search)
Dalam pencarian suatu solusi optimum pada suatu graph, ada dua algoritma pencarian
yang dapat dilakukan, yaitu dengan algoritma DFS (Depth-First Search) dan
algoritma BFS (Breadth-First Search). Desiani dkk (2006) menggambarkan
ilustrasinya algoritma DFS yang dapat dilihat pada gambar berikut ini.




Gambar 2.7 Teknik pencarian algoritma Depth-First Search (DFS)

Berdasarkan gambar tersebut, proses pencarian dilakukan dengan mengunjungi
cabang terlebih dahulu hingga tiba di vertex terakhir. Jika tujuan yang diinginkan
belum tercapai, maka pencarian dilanjutkan ke cabang sebelumnya, turun ke bawah
jika memang masih ada cabangnya. Begitu seterusnya hingga diperoleh tujuan
akhirnya (goal). Operasi semacam ini dikenal dengan proses backtracking.
Algoritma DFS menggunakan metode pendekatan yang diimplementasikan dengan
menggunakan Tumpukan (Stack). Dalam algoritma DFS, ada aturan-aturan tertentu
yaitu:

1. Jika mungkin, lakukanlah kunjungan pada vertex-vertex yang belum
dikunjungi, lalu tandai (mark) dan masukkan ke Stack.
2. Jika terdapat kesulitan pada langkah 1, keluarkan vertex dari Stack. Lalu
kembali mencari vertex di bawahnya, sampai diperoleh vertex-vertex yang
belum dikunjungi agar keluar dari Stack.
3. Jika langkah 1 dan 2 telah selesai, maka algoritma DFS sudah mendapatkan
solusi optimum dari graph tersebut.
Isi dari Stack merupakan jalur yang diambil dari vertex awal, lalu vertex tersebut
akan disimpan (push). Saat algoritma kembali ke vertex awal, vertex-vertex yang
sudah dikunjungi akan dikeluarkan (pop) dari Stack.
Dengan demikian, pada Gambar 2.4 Graph Tidak Berarah dan Tidak Berbobot
algoritma secara otomatis akan mencari kunjungan yang memiliki lintasan dengan
bobot yang lebih besar , yaitu , a – b – d – e – c – a. Sehingga diperoleh solusi
optimum pada persoalan lintasan terpanjang.

Algoritma DFS secara garis besar dapat ditulis sebagai berikut :

public int getAdjUnvisitedVertex(int v)
{
for(int j=0; j<nVertex; j++)
if(adjMat[v][j] == 1 && VertexList[j].wasVisited == false)
//Mengembalikan simpul sesuai persyaratan.
return j;
//Simpul sesuai persyaratan tidak ada.
return -1;
}

Contoh penyelesaian pada kasus Traveling Salesman Problem (TSP) dengan
menggunakan algoritma DFS: Misalkan jalur yang ditetapkan pada kasus ini dimulai
dari kota ke-a dan berakhir di kota ke-e. Perhatikan Gambar 2.7 Graph Tidak Berarah
dan Tidak Berbobot abcde dan Tabel 2.3 Matriks Jarak antar vertex


Gambar 2.8 Graph Tidak Berarah dan Tidak Berbobot abcde



Matriks Jarak pada Graph Tidak Berarah abcde

Sehingga diperoleh suatu lintasan terpanjang, yaitu jalur a – c – d – b – e dengan
masing-masing bobot yang tersimpan dalam Stack adalah 25 – 20 – 25 – 10.

Algoritma Depth-First Search (DFS) memiliki kelebihan-kelebihan sebagai berikut:
a. Cepat dalam mencapai kedalaman pada ruang pencarian.
b. Jauh lebih efisien untuk ruang pencarian dengan banyak cabang karena tidak
perlu mengevaluasi semua simpul pada suatu level tertentu dalam daftar open.
c. Menggunakan memori yang relatif kecil karena hanya node-node pada lintasan
yang aktif saja yang disimpan.

Namun, Algoritma Depth-First Search (DFS) juga memiliki kelemahan, yaitu:
a. Memungkinkan tidak ditemukannya tujuan yang diharapkan.
b. Kemungkinan hanya akan mendapatkan satu solusi pada setiap pencarian.

Kompleksitas Algoritma
Algoritma adalah suatu prosedur secara komputasi dengan mengambil beberapa nilai,
atau kumpulan dari nilai, sebagai input atau masukan, dan menghasilkan nilai atau
kumpulan nilai sebagai output atau keluaran (Cormen dkk, 1992). Efisiensi algoritma
dinilai berdasarkan kecepatan waktu eksekusi dan penggunaan struktur data yang.

Efisiensi Algoritma
Algorima yang terbaik adalah bukan hanya berdasarkan karena algoritma itu harus
benar, akan tetapi juga harus dipandang dari segi efisiensinya. Jadi algoritma yang
terbaik adalah algoritma

Daftar Pustaka
http://repository.usu.ac.id/bitstream/123456789/26701/3/Chapter%20II.pdf

Tidak ada komentar:

Posting Komentar

Total Tayangan Halaman