BAB 2
LANDASAN TEORI
2.1 Teori Graph 2.1.1 Definisi Graph Menurut Dasgupta dkk (2008), graph merupakan himpunan tak kosong titik-titik yang disebut vertex (juga disebut dengan node) dan himpunan garis-garis yang menghubungkan titik tersebut yang disebut dengan edge (juga disebut dengan arc, sehingga dapat dinotasikan sebagai G(V,E). Vertex atau node pada graf dapat dinomori dengan huruf, seperti a,b,c,d, ..., atau dengan bilangan asli 1,2,3, … atau juga gabungan dengan keduanya. Sedangkan untuk edge atau arc yang menghubungkan antara simpul u dan v dinyatakan dengan (u,v) atau dapat dinyatakan dengan lambang e1,e2,e3, … dengan 1,2,3 adalah indeks. Dapat dikatakan bahwa jika e merupakan sisi yang menghubungkan simpul u dengan v, maka e dapat ditulis sebagai e = (u,v). 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
Universitas Sumatera Utara
lain-lain). Sebuah graph juga memberikan model struktural dari jaringan. Dalam kebanyakan jaringan, metode konstruksi biasanya dinyatakan oleh harga, efisiensi, kehandalan dan kapasitas.
2.1.2 Jenis Graph 2.1.2.1 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.
Universitas Sumatera Utara
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.
Universitas Sumatera Utara
Gambar 2.4 Graph Tidak Berarah dan Tidak Berbobot
2.1.2.2 Berdasarkan sifat keterhubungan 1. Perjalanan (Walk) Perjalanan atau walk pada suatu graph G adalah barisan vertex dan edge secara berganti-ganti v1 , e1 , v2 , e2 ,..., en 1 , vn dimana edge e1 menghubungkan vi dan vi 1 dan dapat hanya ditulis barisan edge atau barisan vertex saja ( e1 , e2 ,..., en 1 atau v1 , v2 ,...vn 1 , vn ), dalam hal ini v1 disebut vertex awal, dan vn 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
Universitas Sumatera Utara
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.
2.1.3 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
Universitas Sumatera Utara
a
b
c
d
e
a
0
1
1
1
0
b
0
0
1
1
0
c
0
0
0
1
1
d
0
0
0
0
1
e
0
0
0
0
0
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.
a
b
c
d
e
a
0
1
1
1
0
b
1
0
1
1
0
c
1
1
0
1
1
d
1
1
1
0
1
e
0
0
1
1
0
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
Universitas Sumatera Utara
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
2.2 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.
Universitas Sumatera Utara
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.
2.2.1
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).
Universitas Sumatera Utara
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).
2.3 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(n 2 ) dan sebagainya. Seluruh algoritma yang ada sejauh ini
merupakan algoritma polynomial-time: dimana input dengan ukuran n, worst-case running time adalah O(n k ) (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’.
Universitas Sumatera Utara
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 ( 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 (m!) ( n!) (2 n ) .
2.4 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.
Universitas Sumatera Utara
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.
Universitas Sumatera Utara
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
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
Universitas Sumatera Utara
Gambar 2.8 Graph Tidak Berarah dan Tidak Berbobot abcde
a
b
c
d
e
a
0
20
25
0
10
b
20
0
0
25
10
c
25
0
0
20
10
d
0
25
20
0
10
e
10
10
10
10
0
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.
Universitas Sumatera Utara
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.
2.5 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 menyebabkan banyaknya ruang memori komputer yang digunakan.
2.5.1 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 yang efisien dalam penggunaan waktu eksekusi dan ruang memori komputer. Efisiensi algoritma juga berguna dalam membandingkan algoritma. sebuah masalah dapat mempunyai lebih dari satu jenis algoritma. Misalkan untuk masalah pencarian lintasan optimum pada Traveling Salesman Problem (TSP), dapat digunakan berbagai macam algoritma seperti: dynamic programming, approximation, heuristic dan lainnya.
2.5.2 Kebutuhan Waktu dan Ruang Kebutuhan waktu suatu algoritma biasanya dihitung dalam satuan detik, milidetik dan lain sebagainya. Sedangkan untuk ruang memori yang digunakan dapat dihitung dalam satuan byte atau kilobyte. Biasanya seorang pengguna algoritma mengukur kebutuhan waktu sebuah algoritma dengan mengeksekusi langsung algoritma tersebut pada sebuah komputer, lalu dihitung berapa lama durasi waktu yang dibutuhkan untuk menyelesaikan sebuah persoalan yang berbeda-beda.
Universitas Sumatera Utara
Keakuratan waktu eksekusi algoritma dapat diperoleh dengan tidak menghitung kebutuhan waktu untuk menampilkan antarmuka program, operasi input/output dan sebagainya. Sehingga akan dihitung bagian inti dari programnya saja.
2.5.3 Kompleksitas Waktu Saat menjalankan suatu program, maka untuk mengukur kompleksitas waktunya adalah dengan menghitung banyaknya operasi yang dilakukan oleh algoritma, seperti: operasi penjumlahan, pengurangan, perkalian, pembagian dan lain sebagainya. Namun yang paling idealnya adalah cukup menghitung berapa kali operasi yang sama terjadi secara berulang dan mencatat waktu yang terjadi selama eksekusi.
Universitas Sumatera Utara