SIMULASI MINIMUM SPANNING TREE MENGGUNAKAN ALGORITMA KRUSKAL
Skripsi
Diajukan untuk Memenuhi Salah Satu Syarat Memperoleh Gelar Sarjana Sains
Program Studi Ilmu Komputer
Oleh :
Rina Pertiwi Suherman NIM : 033124043
PROGRAM STUDI ILMU KOMPUTER JURUSAN MATEMATIKA FAKULTAS SAINS DAN TEKNOLOGI
UNIVERSITAS SANATA DHARMA YOGYAKARTA
THE SIMULATION OF MINIMUM SPANNING TREE USING KRUSKAL ALGORITHM
A Final Thesis
Presented as Partial Fulfillment of The Requirements for the Degree of Sarjana Sains
in Computer Science
By :
Rina Pertiwi Suherman Student Number : 033124043
COMPUTER SCIENCE STUDY PROGRAM DEPARTMENT OF MATHEMATICS FACULTY OF SCIENCE AND TECHNOLOGY
SANATA DHARMA UNIVERSITY YOGYAKARTA
ABSTRAK
Minimum Spanning Tree adalah salah satu kasus dalam pemrograman matematika yang mempunyai banyak manfaat dalam kehidupan sehari-hari. Misalnya dalam sistem sarana transportasi dan routing pada jaringan komputer. Namun begitu, belum banyak yang mengetahui perihal metode minimum spanning tree ini. Tujuan dari penulisan ini adalah untuk membangun sistem simulasi yang dapat mempermudah pemahaman teori Minimum Spanning Tree.
Tugas akhir ini menggunakan algoritma Kruskal untuk menyelesaikan permasalahan minimum spaning tree. Sistem Simulasi Minimum Spanning Tree menggunakan algoritma Kruskal dibangun dengan metode waterfall dengan menggunakan bahasa pemrograman Visual Basic .Net.
Hasil akhir dari pembuatan program, program dapat digunakan untuk menyelesaikan permasalahan minimum spaning tree dengan meminimumkan bobot dan dengan batasan jumlah titik sebanyak dua belas titik. Sistem simulasi ini dapat memvisualisasikan proses pencarian minimum spanning tree. Selain itu sistem juga dapat menyimpan data yang telah dimasukkan oleh user. Data yang disimpan meliputi titik, relasi antar titik, dan bobot.
ABSTRACT
Minimum Spanning Tree is one of cases in mathematics programming which has a lot of advantages in our daily life. For examples are on the transportation system and computer network routing. Nevertheless, not all of the people know about this method. The purpose of this writing is to build a simulation system which can make minimum spanning tree theory easier.
The final project uses Kruskal’s algorithm to solve minimum spanning tree problem. Simulation of Minimum spanning tree system using Kruskal’s algorithm is built with the waterfall method and it uses Visual Basic .Net programming language.
The result is the application can be used to solve the minimum spanning tree problem by minimizing the weight and by limiting the number of vertex becomes 12 vertexes. This simulation system can visualize the minimum spanning tree searching process. Besides, the system can save the data which has been entered by users. The saved data include vertex, edge, and the weight.
PERNYATAAN KEASLIAN KARYA
Saya menyatakan dengan sesungguhnya bahwa skripsi yang saya tulis ini
tidak memuat karya atau bagian dari karya orang lain, kecuali yang telah
disebutkan dalam kutipan dan daftar pustaka, sebagaimana layaknya karya ilmiah.
Yogyakarta, 30 September 2008
Penulis,
Rina Pertiwi Suherman
KATA PENGANTAR
Puji dan syukur penulis panjatkan kepada Tuhan Yang Maha Esa karena
karunia-Nya sehingga tugas akhir ini dapat diselesaikan. Tugas akhir ini disusun untuk memenuhi salah satu syarat memperoleh gelar sarjana strata satu program studi Ilmu Komputer Fakultas Sains dan Teknologi Universitas Sanata Dharma
Yogyakarta.
Tugas akhir dengan judul “Simulasi Minimum Spanning Tree Menggunakan Algoritma Kruskal” diharapkan dapat bermanfaat bagi Program Studi Ilmu Komputer
FST Universitas Sanata Dharma sebagai lembaga studi ilmu terkait.
Banyak kendala-kendala yang dihadapi dalam menyelesaikan tugas akhir ini,
namun berkat adanya bantuan, bimbingan dan kerjasama maka tugas akhir akhirnya dapat selesai. Oleh karena itu penulis mengucapkan terima kasih kepada:
1. Romo Dr. Ir. P. Wiryono P.,SJ. selaku Rektor Universitas Sanata Dharma. 2. Romo Ir. Greg. Heliarko SJ.,SS.,B.ST.,M.Sc.,MA. selaku Dekan Fakultas
Sains dan Teknologi.
3. Ibu P.H. Prima Rosa, S.Si.,M.Sc. selaku Ketua Jurusan Matematika dan Ketua
Program Studi Ilmu Komputer sekaigus sebagai dosen pembimbing akademik atas bimbingannya selama masa perkuliahan..
4. Bapak Y. Joko Nugroho,S.Si. selaku dosen pembimbing yang telah
membimbing penulis selama menyelesaikan tugas akhir.
5. Orang tua, kakak dan adik serta keluarga atas dukungan materi dan moral.
6. Teman-teman prodi Ilmu Komputer yang telah membantu dalam banyak hal
yang tidak dapat disebutkan satu per satu.
7. Semua pihak yang telah memberikan dukungan secara langsung dan tidak
langsung.
Tentunya tugas akhir ini belum sempurna, maka kritik dan saran yang. membangun dari semua pihak sangat diharapkan.
Yogyakarta, 30 September 2008
Penulis,
Rina Pertiwi Suherman
DAFTAR ISI
HALAMAN JUDUL ... i
HALAMAN PERSETUJUAN ... ii
HALAMAN PENGESAHAN ... iii
ABSTRAK ... iv
ABSTRACT ... v
LEMBAR PERNYATAAN PERSETUJUAN ... vi
PERNYATAAN KEASLIAN KARYA ... vii
KATA PENGANTAR ... viii
DAFTAR ISI ... x
DFTAR TABEL ... xiv
DAFTAR GAMBAR ... xv
BAB I PENDAHULUAN A. Latar Belakang Masalah ... 1
B. Rumusan Masalah ... 2
C. Batasan Masalah ... 3
D. Tujuan Penulisan ... 3
E. Manfaat Penulisan ... 3
F. Metode Penulisan ... 4
G. Sistematika Penulisan ... 5
BAB II LANDASAN TEORI A. Graf ... 6
1. Sejarah Graf ... 6
2. Teori Graf a. Defenisi Graf ... 8
b. Jenis Graf ... 10
B. Pohon (Tree) 1. Defenisi Pohon ... 14
2. Terminologi Pada Pohon Berakar ... 16
3. Pohon Merentang (Spanning Tree) dan Pohon Merentang Minimum (Minimum Spanning Tree) ... 18
C. Algoritma Kruskal ... 20
1. Cara Kerja Algoritma Kruskal ... 21
2. Ilustrasi Cara Kerja Algoritma Kruskal ... 22
D. Struktur Data 1. Array ... 26
2. Class ... 27
3. Method Drawline ... 27
BAB III ANALISIS DAN PERANCANGAN SISTEM A. Analisis Sistem ... 29
B. Perancangan Sistem 1. Konsep Kerja Sistem ... 30
2. Struktur Data ... 31
3. Algoritma dan Flowchart a. Flowchart Algoritma Kruskal ... 34
b. Flowchart Algoritma Sistem ... 35
C. Perancangan Antarmuka ... 36
1. Tampilan Awal ... 37
2. Tampilan Utama ... 38
3. Tampilan Form Input dan Hasil ... 38
4. Perancangan Penyimpanan ... 40
BAB IV IMPLEMENTASI DAN PEMBAHASAN A. Implementasi Program 1. Algoritma Kruskal ... 41
2. Proses Penyimpanan Data Verteks ... 44
3. Proses Open Data Verteks ... 45
4. Proses Gambar Graf ... 46
B. Implementasi Antarmuka 1. Tampilan Awal ... 48
2. Tampilan Utama ... 48
3. Tampilan Form Input dan Hasil ... 50
4. Tampilan Open ... 52
5. Tampilan Save ... 52
C. Pembahasan ... 53
1. Contoh Penyelesaian Masalah MST ... 53
D. Analisa 1. Kelebihan Program ... 57
2. Kekurangan Program ... 58
BAB V PENUTUP
A. Kesimpulan ... 59
B. Saran ... 59
DAFTAR TABEL
Tabel 2.1 Jenis-Jenis Graf ... 14
Table 3.1 Data Ujicoba ... 54
Tabel 3.2 Data Ujicoba yang telah di sorting ... 54
Tabel 3.3 Hasil Pencarian MST untuk data ujicoba ... 57
DAFTAR GAMBAR
Gambar 2.1 Jembatan Konigsberg dan representasinya dalam graf ... 6
Gambar 2.2 Graf sederhana, graf ganda, dan graf semu ... 9
Gambar 2.3 Graf tak berhingga ... 12
Gambar 2.4 Graf berarah ... 14
Gambar 2.5 Ikatan Kimia ... 15
Gambar 2.6 Struktur Pertandingan Sistem gugur ... 15
Gambar 2.7 Pohon berakar ... 16
Gambar 2.8 Subree pada pohon berakar ... 17
Gambar 2.9 Contoh graf beserta pohon rentangnya ... 19
Gambar 2.10 Aplikasi pohon merentang pada jaringan komputer ... 19
Gambar 2.11 Graf ABCDEFG ... 22
Gambar 2.12 Tahap pertama penerapan algoritma Kruskal pada graf ABCDEFG ... 22
Gambar 2.13 Tahap kedua penerapan algoritma Kruskal pada graf ABCDEFG ... 23
Gambar 2.14 Tahap ketiga penerapan algoritma Kruskal pada graf ABCDEFG ... 23
Gambar 2.15 Tahap keempat penerapan algoritma Kruskal pada graf ABCDEFG ... 24 Gambar 2.16 Tahap kelima penerapan algoritma Kruskal
pada graf ABCDEFG ... 25
Gambar 2.17 Minimum Spanning Tree dari graf ABCDEFG ... 25
Gambar 3.1 Flowchart algoritma Kruskal ... 34
Gambar 3.2 Flowchart system Simulasi MST dengan algoritma Kruskal ... 35
Gambar 3.3 Rancangan Struktur Menu ... 37
Gambar 3.4 Rancangan tampilan menu startup ... 37
Gambar 3.5 Rancangan tampilan utama ... 38
Gambar 3.6 Rancangan Form Input dan Hasil ... 39
Gambar 4.1 Tampilan awal ... 48
Gambar 4.2 Tampilan utama ... 50
Gambar 4.3 Form Input dan Hasil ... 50
Gambar 4.4 Tampilan Open ... 52
Gambar 4.5 Tampilan Save ... 53
Gambar 4.6 Proses pertahap pembentukan graf MST ... 56
BAB I
PENDAHULUAN
A. Latar Belakang Masalah
Teori Graf adalah salah satu teori yang sudah tua usianya, namun masih terus dibahas dan dikembangkan, karena memiliki banyak terapan. Graf
merupakan salah satu metode untuk menyelesaikan permasalahan diskrit dalam dunia nyata, yaitu dapat digunakan untuk merepresentasikan objek-objek diskrit dan hubungan antara objek-objek tersebut. Salah satu contoh representasi visual
dari graf adalah peta. Banyak hal yang dapat digali dari reperesentasi tersebut, misalnya untuk menentukan tata letak jalur transportasi, menentukan jalur
terpendek dari satu tempat ke tempat lain, dan sebagainya.
Beberapa masalah yang berkaitan dengan graf yang ditemukan manusia dalam kehidupan nyata kemudian memunculkan konsep-konsep pemecahan
masalah graf. Salah satu konsep graf adalah konsep pohon (tree). Konsep ini merupakan konsep yang paling populer dan penting, karena konsep pohon mampu
mendukung pemecahan masalah dalam berbagai terapan graf. Konsep pohon digunakan sejak tahun 1875 oleh seorang matematikawan yang berasal dari Inggris, Arthur Caylay untuk menghitung jumlah senyawa kimia. (Doni Arzinal,
2006)
Di dalam konsep pohon sendiri terdapat banyak jenis pohon yang digunakan
2
misalnya pada pemeliharaan jalur rel kereta api. Dengan Spanning Tree,
perusahaan kereta api dapat memodelkan alokasi dana secara optimal dengan mencari jalur pemeliharaan dengan bobot biaya yang minimum. Spanning Tree juga memainkan peranan penting dalam jaringan komputer, travelling salesman
problem, dan lain-lain. Apabila Spanning Tree diterapkan pada persoalan yang
mengandung unsur pencarian bobot yang minimum maka dinamakan Minimum
Spanning Tree (MST). Adapun algoritma yang akan digunakan untuk
menyelesaikan masalah Minimum Spanning Tree dalam penulisan ini adalah algoritma Kruskal.
Minimum Spanning Tree merupakan teori yang sangat bermanfaat untuk
membantu pekerjaan manusia dalam kehidupan sehari-hari. Sehingga teori ini
sangat penting untuk dipelajari. Namun begitu, tidak banyak yang mengetahui perihal cara kerja Minimum Spanning Tree ini. Maka, untuk mempermudah dalam mempelajari dan memahami teori ini, saya akan memvisualisasikan vertek atau
titik, garis penghubung, beserta bobotnya ke dalam suatu graf, dan kemudian menampilkan proses pencarian pohon rentang minimum graf tersebut secara
bertahap, sehingga terbentuk pohon merentang minimum.
B. Rumusan Masalah
3
C. Batasan Masalah
1. Tidak ada batasan jumlah derajat
2. Jumlah vertek dibatasi sebanyak 12 vertek
3. Sistem ini dapat digunakan untuk mencari minimum spanning tree pada
graf tidak berarah.
4. Ada biaya / bobot dari setiap edge (rusuk).
5. Input / Output
- Input dari user berupa :
jumlah vertek (titik/simpul), hubungan antara vertek yang akan
membentuk edge (rusuk), dan bobot setiap rusuk. - Output berupa:
pohon rentang minimum dengan biaya/bobot terkecil beserta tampilan hasil pohon rentang minimumnya.
D. Tujuan Penulisan
Mengimplementasikan dan memvisualisasikan permasalahan Minimum
Spanning Tree dengan algoritma Kruskal ke dalam sofware dengan menggunakan
bahasa pemrograman Visual Basic .Net
E. Manfaat Penulisan
Dapat memvisualisasikan masalah Minimum Spanning Tree dengan
4
F. Metode Penulisan
Metode yang digunakan untuk mengembangkan sistem simulasi Minimum Spanning Tree menggunakan algoritma Kruskal ini adalah rekayasa perangkat
lunak dengan metode waterfall. Adapun langkah-langkah yang dilakukan adalah
sebagai berikut : 1. Analisis
Pada tahap ini, penulis mengumpulkan data – data yang diperlukan dalam pembuatan sistem ini, yang diantaranya meliputi kebutuhan pemakai, fungsi/prosedur, antarmuka, dan unjuk kerja perangkat lunak. 2. Rancangan
Penulis mengubah kebutuhan pada tahap analisis menjadi sebuah
representasi program yang dapat dimengerti sebelum proses implementasi. Langkah ini memusatkan kerja pada struktur data, arsitektur dan prosedur detil, dan karakteristik antarmuka.
3. Implementasi
Penulis menerjemahkan rancangan dalam bentuk yang dapat dibaca
oleh mesin. 4. Pengujian
Penulis mencari kemungkinan - kemungkinan kesalahan dan
5
G. Sistematika Penulisan
BAB I PENDAHULUAN
Membahas tentang latar belakang masalah, perumusan masalah, batasan masalah, tujuan penulisan, manfaat penulisan, metode
penulisan, sistematika penulisan. BAB II LANDASAN TEORI
Bab ini berisi tentang landasan teori yang digunakan sebagai dasar untuk membangun sistem simulasi minimum spanning tree menggunakan algoritma Kruskal.
BAB III ANALISIS DAN PERANCANGAN SISTEM
Bab ini berisi tentang gambaran sistem dan kebutuhan sistem yang
akan dibuat, meliputi flowchart sistem dan desain antarmuka pengguna sistem.
BAB IV IMPLEMENTASI
Bab ini berisi tentang impementasi algoritma Kruskal, desain dan proses pada sistem simulasi Minimum Spanning Tree
menggunakan algoritma Kruskal. BAB V PENUTUP
Bab ini berisi tentang kesimpulan dan saran dari pembahasan dan
BAB II
DASAR TEORI
A. Graf
Graf merupakan salah satu cabang ilmu dalam ilmu matematika yang
mengulas masalah titik dan garis. Teori graf dapat dimanfaatkan dalam berbagai
hal, misalnya untuk merancang jaringan komputer atau sistem prasarana
transportasi. Masalah yang paling sering muncul adalah bagaimana mencari
lintasan dengan bobot minimum yang menghubungkan beberapa wilayah yang
memiliki bobot yang berbeda-beda.
1. Sejarah Graf
Sesuai dengan catatan sejarah, masalah yang pertama kali menggunakan
penerapan teori graf adalah masalah jembatan Königsberg (tahun 1736). Di
sebuah kota bernama Königsberg (sebelah timur Prussia, Jerman sekarang),
sekarang bernama kota Kaliningrad, terdapat sungai Pregal yang mengalir
mengitari pulau Kneiphof lalu bercabang menjadi dua buah anak sungai.
Gambar 2.1 (a) Jembatan Konigsberg dan (b) representasinya dalam graf
7
Ada tujuh buah jembatan yang menghubungkan daratan yang dibelah oleh
sungai tersebut. Permasalahan dari jembatan Königsberg adalah: apakah mungkin
melalui ketujuh buah jembatan itu masing-masing tepat satu kali, dan kembali lagi
ke tempat semula? Sebagian penduduk kota berpendapat bahwa tidak mungkin
melalui setiap jembatan itu hanya sekali dan kembali lagi ke tempat asal mula
keberangkatan, tetapi mereka tidak dapat menjelaskan alasan dari jawaban
tersebut, kecuali dengan cara coba-coba.
Kemudian pada tahun 1736, L.Euler, seorang matematikawan Swiss, adalah
orang pertama yang berhasil menemukan jawaban masalah itu dengan pembuktian
yang sederhana. Ia memodelkan masalah ini ke dalam graph. Daratan (titik-titik
yang dihubungkan oleh jembatan) dinyatakannya sebagai titik yang disebut titik
(vertex) dan jembatan dinyatakan sebagai garis yang disebut rusuk (edge). Setiap
titik diberi label huruf A, B, C, dan D. Graph yang dibuat oleh Euler diperlihatkan
pada Gambar 2.1.b.
Jawaban yang dikemukakan oleh Euler adalah : orang tidak mungkin
melalui ketujuh jembatan itu masing-masing satu kali dan kembali lagi ke tempat
asal keberangkatan jika derajat setiap titik tidak seluruhnya genap. Yang
dimaksud dengan derajat adalah banyaknya rusuk yang bersisian dengan titik.
Sebagai contoh, pada gambar 2.1.b titik C memiliki derajat 3 karena ada tiga buah
rusuk yang bersisian dengannya, titik B dan D juga berderajat dua, sedangkan titik
A berderajat 5. Karena tidak semua titik berderajat genap, maka tidak mungkin
dilakukan perjalananan berupa sirkuit (yang dinamakan dengan sirkuit Euler)
8
2. Teori Graf
a. Definisi Graf
Secara matematis, graf didefinisikan sebagai berikut, misalnya Graf ( G)
didefinisikan sebagai pasangan himpunan (V, E), yang dalam hal ini:
V = himpunan tidak-kosong dari titik-titik (vertex)
= { v1 , v2 , ... , vn }
E = himpunan rusuk (edges) yang menghubungkan sepasang titik
= {e1 , e2 , ... , en } atau dapat ditulis singkat notasi G = (V, E).
Definisi di atas menyatakan bahwa V tidak boleh kosong, sedangkan E boleh
kosong. Jadi, sebuah graf dimungkinkan tidak mempunyai rusuk satu buah pun,
tetapi titiknya harus ada, minimal satu. Graf yang hanya mempunyai satu buah
titik tanpa sebuah rusuk pun dinamakan graf trivial.
Titik pada graf dapat dinomori dengan huruf, seperti a, b, c, …, v, w, ...,
dengan bilangan asli 1, 2, 3, ..., atau gabungan keduanya. Sedangkan rusuk yang
menghubungkan titik vi dengan titik vj dinyatakan dengan pasangan (vi, vj) atau
dengan lambang e1, e2, …. Dengan kata lain, jika e adalah rusuk yang
menghubungkan titik vi dengan titik vj , maka edapat ditulis sebagai e = (vi , vj)
Secara geometri graf digambarkan sebagai sekumpulan titik (vertex) di
9
Gambar 2.2 Graf sederhana (G1), ganda (G2), semu (G3)
Gambar 2.2 memperlihatkan tiga buah graf, yaitu graf G1, graf G2, dan graf
G3.
Graf G1 adalah graf dengan himpunan titik V dan himpunan rusuk E adalah
V = { 1, 2, 3, 4 }
E = { (1, 2), (1, 3), (2, 3), (2, 4), (3, 4) }
Graf G2 adalah graf dengan himpunan titik V dan himpunan rusuk E adalah:
V = { 1, 2, 3, 4 }
E = { (1, 2), (2, 3), (1, 3), (1, 3), (2, 4), (3, 4), (3, 4) }
Æ himpunan ganda
= { e1, e2, e3, e4, e5, e6, e7}
Graf G3 adalah graf dengan himpunan titik V dan himpunan rusuk E adalah:
V = { 1, 2, 3, 4 }
E = { (1, 2), (2, 3), (1, 3), (1, 3), (2, 4), (3, 4), (3, 4), (3, 3) }
Æ himpunan ganda
10
Pada graf G2 , rusuk e3 = (1, 3) dan rusuk e4 = (1, 3) dinamakan rusuk-ganda
(multiple edges atau paralel edges) karena kedua rusuk ini menghubitikungkan
dua buah yang sama, yaitu titik 1 dan titik 3. Pada graf G3, rusuk e8 = (3, 3)
dinamakan gelang atau kalang (loop) karena ia berawal dan berakhir pada titik
yang sama.
b. Jenis Graf
Graf dapat dikelompokkan menjadi beberapa kategori bergantung pada
sudut pandang pengelompokannya. Pengelompokan graf dapat dipandang
berdasarkan ada tidaknya rusuk ganda, berdasarkan jumlah titil, atau berdasarkan
orientasi arah pada rusuk.
Berdasarkan ada tidaknya gelang atau rusuk ganda pada suatu graf, maka
secara umum graf dapat digolongkan menjadi dua jenis:
i. Graf sederhana (simple graph).
Graf yang tidak mengandung gelang maupun rusuk-ganda dinamakan
graf sederhana. Graf G1 pada Gambar 2.2 adalah contoh graf sederhana
yang merepresentasikan jaringan komputer. Titik menyatakan komputer,
sedangkan rusuk menyatakan saluran telepon untuk berkomunikasi.
11
ii. Graf tak-sederhana (unsimple-graph).
Graf yang mengandung rusuk ganda atau gelang dinamakan graf
tak-sederhana (unsimple graph). Ada dua macam graf tak-tak-sederhana, yaitu
graf ganda (multigraph) dan graf semu (pseudograph). Graf ganda
adalah graf yang mengandung rusuk ganda. rusuk ganda yang
menghubungkan sepasang titik bisa lebih dari dua buah. Graf G2 pada
Gambar 2.2 adalah graf-ganda, rusuk ganda pada graf G2 dapat
diandaikan sebagai saluran telepon tambahan apabila beban komunikasi
data antar komputer sangat padat.
Graf semu adalah graf yang mengandung gelang. Graf G3 pada Gambar
2.2 adalah graf semu (termasuk bila memiliki rusuk ganda sekalipun).
Rusuk gelang pada graf G3 dapat dianggap sebagai saluran telepon
tambahan yang menghubungkan komputer dengan dirinya sendiri. Graf
semu lebih umum daripada graf ganda, karena rusuk pada graf semu
dapat terhubung ke dirinya sendiri.
Jumlah titik pada graf disebut sebagai kardinalitas graf, dan dinyatakan
dengan n = |V|, dan jumlah rusuk dinyatakan dengan m = |E|. Pada
contoh di atas, graf G1 mempunyai n = 4, dan m = 4, sedangkan graf G2
12
Berdasarkan jumlah titik pada suatu graf, maka secara umum graf dapat
digolongkan menjadi dua jenis:
i. Graf berhingga (limited graph)
Graf berhingga adalah graf yang jumlah titiknya, n berhingga. Graf pada
Gambar 2.2 adalah contoh graf yang berhingga.
ii. Graf tak-berhingga (unlimited graph)
Graf yang jumlah titiknya, n tidak berhingga banyaknya disebut graf
tak-berhingga. Dua buah graf pada Gambar 2.3 di bawah adalah contoh graf
yang tidak berhingga.
Gambar 2.3 Dua buah graf tak-berhingga
Rusuk pada graf dapat mempunyai orientasi arah. Berdasarkan orientasi arah
13
i. Graf tak-berarah (undirected graph)
Graf yang rusuknya tidak mempunyai orientasi arah disebut graf
tak-berarah. Pada graf tak-berarah, urutan pasangan titik yang dihubungkan
oleh rusuk tidak diperhatikan. Jadi, (vj , vk) = (vk , vj) adalah rusuk yang
sama. Tiga buah graf pada Gambar 2.2 adalah graf tak-berarah.
ii. Graf berarah (directed graph atau digraph)
Graf yang setiap rusuknya diberikan orientasi arah disebut sebagai graf
berarah. Rusuk berarah ini biasa disebut dengan busur (arc). 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), titik vj dinamakan
titik asal (initial vertex) dan titik vk dinamakan titik terminal (terminal
vertex). Graf G4 pada Gambar 2.4 adalah contoh graf berarah. Pada graf
G4 diandaikan saluran telepon tidak dapat beroperasi pada dua arah.
Saluran hanya beroperasi pada arah yang ditunjukkan oleh anak panah.
Jadi, sebagai contoh, saluran telepon (1, 2) tidak sama dengan saluran
telepon (2, 1). Graf berarah sering dipakai untuk menggambarkan aliran
proses, peta lalu lintas suatu kota (jalan searah atau dua arah), dan
sebagainya. Pada graf berarah, gelang diperbolehkan, tetapi rusuk ganda
14
Gambar 2.4 Graf berarah
Definisi graf dapat diperluas sehingga mencakup graf-ganda berarah. Pada
graf-ganda berarah, gelang dan rusuk ganda diperbolehkan ada. Graf G5 pada
Gambar 2.4 adalah contoh graf-ganda berarah. Tabel 2.1 meringkas perluasan
definisi graf.
Tabel 2.1 Jenis-jenis graf
Jenis Rusuk Rusuk ganda dibolehkan?
Rusuk gelang dibolehkan?
Graf sederhana Tak berarah Tidak Tidak
Graf ganda Tak berarah Ya Tidak
Graf semu Tak berarah Ya Ya
Graf berarah Berarah Tidak Ya
Graf ganda
berarah Berarah Ya Ya
B. Pohon (Tree)
1. Definisi Pohon
Pohon didefinisikan sebagai suatu graf tak berarah yang terhubung
15
sederhana(cycle/sirkuit). Pohon adalah bentuk khusus dari suatu graf yang banyak
diterapkan untuk berbagai keperluan. Misalnya struktur organisasi suatu
perusahaan, silsilah suatu keluarga, skema sistem gugur suatu pertandingan, dan
ikatan kimia suatu molekul adalah jenis graf yang tergolong sebagai pohon. Pada
pohon, titik-titik yang berderajat satu dinamakan daun (leave), sedangkan titik
yang derajatnya lebih besar daripada satu dinamakan titik cabang (branch node)
atau titik internal (internal node) dan kumpulan pohon-pohon yang terpisahkan
satu sama lain disebut hutan (forest). Contoh pohon (tree) dapat dilihat pada
gambar 2.5 dan 2.6.
Gambar 2.5 Ikatan Kimia
16
2. Terminologi pada pohon berakar
a. Anak (child atau children) dan Orangtua (parent)
Anak adalah titik setelah suatu titik dalam pohon. Dari gambar 2.7
diketahui b, c, dan d adalah anak-anak titik a, dan orang tua adalah titik
sebelum suatu titik lain dalam satu pohon, jadi a adalah orangtua dari
anak-anak tersebut.
Gambar 2.7 Pohon Berakar
b. Lintasan (path)
Lintasan adalah jalur yang harus ditempuh dari suatu titik ke titik
lainnya. Panjang lintasan ditentukan dari titik asal. Dari gambar 2.7 diketahui
17
c. Saudara kandung (sibling)
Saudara kandung adalah titik yang mempunyai orangtua yang sama. Dari
gambar 2.7 diketahui f adalah saudara kandung e, tetapi g bukan saudara
kandung e, karena orangtua mereka berbeda.
d. Upapohon (subtree)
Upapohon atau subtree adalah pohon yang dibentuk dengan memotong
pohon yang sudah ada, contoh dapat dilihat pada gambar 2.8.
Gambar 2.8 Subtree pada Pohon Berakar
e. Derajat (degree)
Derajat sebuah titik adalah jumlah upapohon atau jumlah anak pada titik
tersebut, yang dimaksudkan di sini adalah derajat ke bawah atau keluar. Pada
18
derajat c adalah 0. Derajat sebuah pohon adalah derajat maksimum dari semua
titik derajat pohon itu sendiri. Pohon pada gambar 2.8 berderajat 3.
f. Daun (leaf)
Daun adalah titik paling ujung dalam sebuah pohon. Jadi daun tidak
mempunyai anak dan berderajat 0. titik h, i, j, f, c, l, dan m pada gambar 2.7
adalah daun.
g. Titik Dalam (internal nodes)
Titik yang mempunyai upapohon atau anak disebut titik dalam. Titik b,
d, e, g, dan k pada gambar 2.7 adalah titik dalam.
h. Aras (level) dan Tingkat ketinggian (height) atau Kedalaman (depth)
Aras maksimum dari suatu pohon disebut tinggi atau kedalaman pohon
tersebut. Pohon pada gambar 2.7 mempunyai tinggi 4.
3. Pohon Merentang (Spanning Tree) dan Pohon Merentang Minimum
(Minimum Spanning Tree)
Pohon merentang dari graf terhubung adalah upagraf merentang yang berupa
pohon. Pohon merentang diperoleh dengan memutus sirkuit di dalam graf.
Sehingga setiap graf terhubung mempunyai paling sedikit satu buah pohon
19
merentang yang disebut hutan merentang (spanning forest). Contoh graf beserta
pohon merentangnya dapat dilihat pada gambar 2.9.
Gambar 2.9 Graf G berikut empat macam pohon rentangnya
Contoh aplikasi pohon merentang :
a. Jalan terminimum yang menghubungkan semua kota
b. Perutean (routing) pesan pada jaringan komputer.
c. Multicast
Gambar 2.10 Aplikasi pohon merentang (b) pada jaringan komputer (a)
20
Jika Spanning Tree diterapkan pada persoalan yang mengandung unsur
pencarian bobot yang minimum maka dinamakan Minimum Spanning Tree (MST).
Masalah Minimum Spanning Tree pertama kali diformulasikan oleh seorang
ilmuwan Cekoslavia, Otakar Boruvka pada tahun 1926, yang melahirkan sebuah
algoritma, dikenal dengan Boruvka’s Algorithm. Algoritma ini memberikan solusi
dalam menentukan susunan jaringan kabel listrik yang paling ekonomis. Sejak
saat itu, formulasi Minimum Spanning Tree banyak diterapkan di berbagai
masalah optimasi kombinatoris, seperti masalah transportasi, desain jaringan
telekomunikasi, sistem distribusi, dan lain sebagainya. Masalah-masalah tersebut
pada umumnya dapat dibawa ke bentuk masalah program linear, yang saat ini
telah ditemukan banyak metode untuk menyelesaikannya, antara lain algoritma
waktu polinomial yang dikembangkan oleh Kruskal dan Prim. Penulis hanya akan
membahas dan menggunakan algoritma Kruskal.
C. Algoritma Kruskal
Algoritma Kruskal pertama kali dipopulerkan oleh Joseph Kruskal pada
tahun 1956. Algoritma Kruskal adalah sebuah algoritma dalam teori graf yang
mencari sebuah Minimum Spanning Tree untuk sebuah graf berbobot yang
terhubung. Ini berarti mencari subset dari rusuk yang membentuk sebuah Tree,
yang menampung setiap vertex, dimana total bobot dari semua rusuk dalam Tree
adalah minimum. Algoritma Kruskal merupakan salah satu contoh dari Algoritma
21
1. Cara Kerja Algoritma Kruskal
Dalam algoritma ini rusuk-rusuk pada graf dipilih satu-persatu berurutan
dari rusuk dengan bobot terkecil, kemudian saling dihubungkan, dengan ketentuan
saat menghubungkan titik dari setiap rusuk tidak membentuk sirkuit (cycle). Jika
jumlah rusuk yang dihubungkan berjumlah n-1, dimana n adalah jumlah titik,
maka rusuk-rusuk yang telah dihubungkan tadi akan membentuk sebuah tree yang
mempunyai bobot terkecil atau pohon rentang minimum.
Secara formal, algoritma Kruskal dapat dinyatakan sebagai berikut :
Misalkan G adalah graf mula-mula dengan n titik, T adalah pohon rentang
minimum, E adalah himpunan semua rusuk G
a. Isi T dengan semua titik-titik G tanpa garis
b. m = 0
c. Selama m < (n-1) lakukan :
- Tentukan garis e ∈ E dengan bobot minimum. Jika ada beberapa e
dengan sifat tersebut, pilih salah satu secara sembarang
- Hapus e dari E
- Jika e ditambahkan ke T tidak menghasilkan sirkuit, maka
i. Tambahkan e ke T
22
2. Ilustrasi Cara Kerja Algoritma Kruskal
a. Misalnya, graf pada Gambar 2.11 adalah graf awal, yaitu graf
ABCDEFG. Angka-angka di dekat garis penghubung / rusuk adalah
bobotnya.
Gambar 2.11 Graf ABCDEFG
b. Dari semua bobot yang ada, bobot paling kecil adalah 5. Yaitu AD dan
CE. AD ditetapkan sebagai rusuk awal, maka diberi highlight hijau
(gambar 2.12).
23
c. Selain AD, rusuk yang berbobot 5 adalah CE. Oleh karena itu CE
diberi highlight hijau. Maka rusuk yang sudah dipilih sebagai bagian
dari jalur MST pada graf ABCDEFG adalah AD-CE (gambar 2.13).
Gambar 2.13 Tahap kedua penerapan algoritma Kruskal
d. Karena semua rusuk berbobot 5 sudah dipilih, bobot yang dipilih
selanjutnya adalah bobot yang lebih besar dari bobot sebelumnya,
yaitu 6. Rusuk yang mempunyai bobot 6 adalah DF. DF diberi
highlight hijau. Maka rusuk yang sudah dipilih sebagai bagian dari
jalur MST pada graf ABCDEFG adalah AD-CE-DF (gambar 2.14).
24
e. Rusuk yang dipilih selanjutnya adalah rusuk yang mempunyai bobot
lebih besar dari bobot sebelumnya, yaitu 7. Rusuk yang mempunyai
bobot 7 adalah rusuk AB, maka AB diberi highlight hijau. Dengan
dipilihnya rusuk AB ini, bisa ditentukan bahwa rusuk BD akan
membentuk sebuah sirkuit. Maka BD diberi highlight merah, artinya
tidak akan ditambahkan ke dalam MST. Rusuk yang sudah dipilih
sebagai bagian dari jalur MST pada graf ABCDEFG adalah
AD-CE-DF-AB (gambar 2.15).
Gambar 2.15 Tahap keempat penerapan algoritma Kruskal
f. Selain AB, rusuk yang berbobot 7 adalah BE. Oleh karena itu BE
diberi highlight hijau. Dengan dipilihnya rusuk BE ini, bisa ditentukan
bahwa rusuk BC, DE dan EF dapat membentuk sirkuit. Maka rusuk
BC, DE dan EF diberi highlight merah, artinya tidak akan ditambahkan
ke dalam MST. Rusuk yang sudah dipilih sebagai bagian dari jalur
25
Gambar 2.16 Tahap kelima penerapan algoritma Kruskal
g. Rusuk yang dipilih selanjutnya adalah rusuk yang berbobot lebih besar
dari bobot sebelumnya, yaitu 8. Rusuk yang mempunyai bobot 8
adalah BC dan EF, namun karena kedua rusuk ini dapat membentuk
sirkuit (sudah diberi highlight merah) maka rusuk BC dan EF tidak
akan ditambahkan pada jalur MST. Sehingga rusuk yang dipilih
berikutnya adalah yang mempunyai bobot 9, yaitu EG. Maka EG
diberi highlight hijau. Karena semua titik sudah terhubung, maka
proses pemilihan rusuk dengan bobot terkecil selesai. Dan MST yang
terbentuk dari graf ABCDEFG ini adalah AD-CE-DF-AB-BE-EG,
dengan jumlah bobot 39 (Gambar 2.17).
26
D. Struktur Data
1. Array
MST yang merupakan terapan dari teori graph sangat berkaitan dengan
matriks dalam menyelesaikan persoalan didalamnya. Dengan program ini maka
sangatlah tepat untuk menggunakan tipe data Array. Selain itu, juga karena dalam
program ini dibutuhkan data yang besar.
Array adalah suatu tipe data terstruktur yang berupa sejumlah data sejenis
(bertipe data sama) yang jumlahnya tetap dan diberi suatu nama tertentu.
Elemen-elemen array tersusun secara sekuensial di dalam memori sehingga memiliki
alamat yang berdekatan. Array dapat berupa array 1 dimensi, 2 dimensi, bahkan
n-dimensi. Elemen-elemen array bertipe data sama tapi bisa bernilai sama atau
berbeda-beda
Bentuk umum dari deklarasi tipe data array 1 dimensi adalah:
Dim nama_array(dimensi array) As tipe data
nama_array adalah nama dari array yang akan dibuat, dimensi array
yaitu dimensi array yang akan dibuat (1 dimensi, 2 dimensi, ... n dimensi).
Sedangkan tipe data adalah tipe data dari array tersebut (Double, Long,
Integer, String, dll).
Contoh deklarasi tipe data array 1 dimensi:
Dim strMyFriends() As String
Dari contoh deklarasi tipe data array 1 dimensi diatas dapat kita ketahui
27
Contoh deklarasi tipe data array multidimensi:
Dim atmospherePressures( , , , ) As Short
Dari contoh deklarasi array multidimensi diatas dapat diketahui sebuah array
multidimensi (4 dimensi) dengan nama atmospherePressures bertipe data
Short.
2. Class
Class adalah tipe data yang didalamnya dapat berisi kumpulan berbagai tipe
variabel maupun method.
Contoh deklarasi Class :
Public Class ShowMe Sub ShowFrm()
Dim frmNew As Form1 frmNew = New Form1 frmNew.Show() End Sub
End Class
Dari contoh class diatas, dapat kita lihat nama class adalah ShowMe.
Kemudian diikuti statemen-statemen, dimana statement-statement tersebut dapat
berupa variabel maupun method.
3. Method DrawLine
Method DrawLine adalah method dalam VB .Net yang digunakan untuk
menggambar garis untuk menghubungkan dua titik.
Contoh penggunaan method DrawLine adalah sebagai berikut :
Public Sub DrawLinePoint(ByVal e As PaintEventArgs)
28
Dim point1 As New Point(100, 100) Dim point2 As New Point(500, 100)
e.Graphics.DrawLine(blackPen, point1, point2) End Sub
Pen adalah parameter yang dapat digunakan untuk menentukan warna, lebar,
dan style dari garis yang akan dibuat. Sedangkan point1 dan point2 adalah letak
BAB III
ANALISIS DAN PERANCANGAN SISTEM
A. Analisis Sistem
Sistem yang akan dikembangkan adalah sistem pencarian minimum
spanning tree dari suatu graf tidak berarah, dengan menggunakan algoritma
Kruskal. Sistem ini disertai dengan visualisasi proses pencarian minimum
spanning tree, sehingga dapat mempermudah pengguna / user dalam memahami
proses pencarian atau pembentukan minimum spanning tree tersebut, tentunya dengan algoritma yang telah ditentukan, yaitu algoritma Kruskal.
Untuk menentukan minimum spanning tree dari suatu graf tidak berarah, sistem ini membutuhkan beberapa input data yaitu : jumlah titik / vertex, jumlah
rusuk /edge, hubungan antara dua titik yang akan membentuk sebuah rusuk, beserta jumlah bobot / biayanya.
1. Kebutuhan Sistem
a. Kebutuhan software dan hardware untuk pengembangan sistem
i. Kebutuhan software
− Sistem operasi : Windows XP Service Pack 2
− Program Aplikasi : Visual Basic .Net, Visual Frame Work
ii. Kebutuhan hardware − Prosesor Pentium 4
30 − Hard disk minimal 1 GB
− Alat input berupa keyboard dan mouse
− Alat output berupa monitor dan printer
b. Kebutuhan software dan hardware untuk penggunaan sistem
i. Kebutuhan software minimal
− Sistem operasi : Windows XP Service Pack 2
− Program Aplikasi : Visual Frame Work
ii. Kebutuhan hardware minimal − Prosesor Pentium 4
− Memori minimal 128 MB
− Hardisk minimal 1 GB
− Alat input berupa keyboard dan mouse
− Alat output berupa monitor
B. Perancangan Proses 1. Konsep Kerja Sistem
Sistem bekerja dengan prinsip aplikasi desktop. Aplikasi dapat langsung
diakses oleh user melalui komputer yang telah terinstal program aplikasi. Pada saat user mengakses tool untuk mencari minimum spanning tree, maka sistem
31
2. Struktur Data
a. Array
Array adalah tipe data terstruktur yang mempunyai komponen dalam
jumlah yang tetap dan setiap komponen dalam array dinyatakan sebagai
nomor index. Bentuk umum dari deklarasi array adalah : Dim nama_array(tipe_index) As tipe data
dengan nama_array : nama tipe data
tipe_index : tipe data untuk nomor index
tipe data : tipe data komponen
Parameter tipe_index menentukan banyaknya komponen array tersebut.
Sebagai contoh misalnya sebuah vektor A. Vektor tersebut mempunyai komponen Ax, Ay, dan Az. Bila A dideklarasikan bertipe integer, misalnya, maka ketiga komponen tentu juga akan bertipe integer. Kumpulan dari ketiga
komponen A disebut dengan array, dan masing-masing komponen disebut elemen dari array.
Dalam sistem yang akan dibuat, array akan digunakan untuk menampung data titik, garis, bobot, garis yang telah dikunjungi selama proses perhitungan, dan data lain yang berukuran besar.
Contoh penggunaan array satu dimensi dalam program Simulasi MST: Private Edges(1000) As tEdge
Array Edges mempunyai indeks 0 – 999, berfungsi untuk menampung data edge / garis. Array Edges ini bertipe data tEdge, yaitu class yang
32
garis yang terdiri dari titik awal dan titik akhir, maka secara otomatis array ini
juga menampung seluruh titik yang telah diinputkan.
Aturan dalam menggunakan array adalah bahwa kita harus mendefenisikan array dengan dimensi yang cukup besar sehingga mampu
menampung elemen-elemen array yang bersangkutan dari dalam program. Bila pada suatu saat program yang sama akan dipakai untuk bekerja dengan
array yang dimensinya lebih besar maka kita harus mengadakan perubahan
pada indeksnya. Dalam VB .Net kita dapat menggunakan arrayList, yaitu array satu dimensi yang dinamis, dapat menambah indeks array secara
otomatis, sesuai dengan yang dibutuhkan.
Contoh penggunaan ArrayList dalam program simulasi MST : Private visitedEdge As ArrayList
Array visitedEdge bertipe data ArrayList adalah array yang berfungsi
untuk menampung data edge / garis yang telah dikunjungi selama proses perhitungan pencarian minimum spanning tree. Array ini dapat menambah indeks secara otomatis jika garis yang dikunjungi bertambah.
b. Class
Class adalah tipe data yang didalamnya dapat berisi kumpulan berbagai
tipe variabel maupun method.
Dalam sistem yang akan dibuat class akan digunakan untuk
33
Contoh penggunaan class dalam program simulasi MST adalah sebagai
berikut :
Public Class tEdge
Public Vertex1 As tVertex
Public Vertex2 As tVertex
Public Bobot As Integer
Public Sub New()
Vertex1 = New tVertex
Vertex2 = New tVertex
End Sub
End Class
Class tEdge diatas adalah class garis yang berisi data-data (property) yang dimiliki garis. Garis terbentuk dari dua titik yaitu titik asal dan titik
terminal, maka class ini menyimpan data Vertex1 sebagai titik asal dan
Vertex2 sebagai titik terminal, dimana Vertex1 dan Vertex2 bertipe data
tVertex. tVertexadalah class yang menyimpan data-data (property) titik.
c. Method DrawLine
Method DrawLine adalah method dalam VB .Net yang dapat digunakan untuk menggambar garis untuk menghubungkan dua titik.
Contoh penggunaan method DrawLine dalam program Simulasi MST dengan Algoritma Kruskal adalah sebagai berikut :
Dim kuas As SolidBrush = New SolidBrush(Color.Red)
34
g.DrawLine(p1,edge.Vertex1.X,edge.Vertex1.Y,edge.Vertex2.X
, edge.Vertex2.Y)
edge.Vertex1.X,edge.Vertex1.Y,edge.Vertex2.X,
edge.Vertex2.Y adalah koordinat titik1 dan titik2. Garis yang yang
menghubungkan titik1 dan titik 2 akan digambar dengan style SolidBrush dan
dengan warna merah.
3. Algorima dan Flowchart
a. Flowchart Algoritma Kruskal
∈
35
b. Flowchart Algoritma Sistem
36
C. Perancangan Antarmuka
Rancangan antarmuka merupakan rancangan bentuk tampilan pada layar monitor untuk mengmplemetasikan aplikasi Simulasi Minimum Spanning Tree dengan Algoritma Kruskal. Perancangan antarmuka digunakan untuk memberikan
gambaran tentang sistem yang akan dibuat sehingga pengguna mudah berinteraksi dengan sistem. Antarmuka ini yang nantinya akan berinteraksi secara langsung
dengan pengguna. Oleh karena itu, menu-menu dan antarmuka dirancang agar dapat memenuhi kebutuhan dan memudahkan pengguna dalam menggunakan aplikasi yang akan dibuat.
Menu – menu yang disediakan pada toolbar adalah : i. Menu File, terdiri dari tiga sub menu, yaitu :
− Menu New, digunakan untuk membuat lembar kerja baru.
− Menu Save, digunakan untuk menyimpan data yang telah
diinputkan.
− Menu Open, digunakan untuk membuka data yang sudah ada atau
sudah disimpan sebelumnya.
− Menu Exit, digunakan untuk keluar dari program.
ii. Menu About, merupakan menu yang berisi informasi release program
37
Berikut adalah rancangan struktur menu yang digunakan :
Gambar 3.3 Rancangan Struktur Menu
1. Tampilan Awal
Tampilan awal berupa form start up untuk masuk ke menu utama. Form
start up merupakan form yang akan muncul hanya beberapa waktu saja dan secara
otomatis menutup sesuai dengan kontrol waktu yang telah ditentukan. Atau biasa
disebut dengan form splash screen.
38
2. Tampilan Utama
Gambar berikut adalah merupakan rancangan tampilan utama dimana pengguna akan berinteraksi dengan program pada tampilan utama ini. Pada tampilan ini terdapat menu – menu utama dan sub menu-nya
File About
New Open
Exit Save
About
Gambar 3.5 Rancangan tampilan utama
3. Tampilan Menu Form Input dan Hasil
39
Gambar 3.6 Rancangan Form Input dan Hasil
Setelah jumlah titik dan rusuk diinputkan, maka akan ditampilkan sebuah
tabel atau grid, yang akan digunakan untuk menginputkan dua titik yang saling berhubungan sehingga membentuk sebuah rusuk beserta bobotnya. Dimana
jumlah baris yang ditampilkan pada tabel ini sesuai dengan jumlah rusuk yang telah diinputkan sebelumnya.
Jika seluruh kolom dan baris yang mewakili rusuk dan bobot pada form ini
telah diisi, maka program dapat dieksekusi dengan memilih tombol Ok. Dan untuk mengosongkan tabel input dengan memilih tombol Reset.
Setelah klik tombol Ok, maka program akan menampilkan beberapa informasi. Yaitu tabel hasil sorting secara ascending, tabel MST yang berisi data hasil pencarian MST, dan gambar graf. Program juga dapat menampilkan proses
40
4. Perancangan Penyimpanan
BAB IV
IMPLEMENTASI DAN PEMBAHASAN
A. Implementasi Program
1. Algoritma Kruskal
Program ini menggunakan algoritma Kruskal untuk menghitung bobot
terpendek antar titik. Selama proses pencarian MST, titik, rusuk, dan bobot yang menjadi bagian dari MST ditampung dalam array GrafMST. Berikut adalah penggalan programnya :
graphMst = New tGraf()
For i As Integer = 0 To Graph1.JumlahSisi - 1
If Not graphMst.CekLingkar(Graph1.Edge(i)) Then graphMst.AddEdge(Graph1.Edge(i))
End If Next
Pada penggalan program diatas, program melakukan looping, dimana
dalam looping tersebut program memanggil fungsi CekLingkar untuk
mengecek apakah rusuk yang sedang di hitung menimbulkan cycle pada array
graphMst atau tidak. Jika rusuk tidak menimbulkan cycle, maka rusuk akan
ditambahkan pada array graphMst. Program melakukan looping sebanyak
jumlah rusuk graf yang telah diinputkan pengguna.
Array graphMst adalah array yang berfungsi untuk menampung hasil
perhitungan pencarian MST. graphMst bertipe data tGraf, dimana tGraf
adalah tipe data yang berisikan kumpulan titik dan garis, yang membentuk
42 Public Class tGraf
Private Edges(1000) As tEdge
Private visitedEdge As ArrayList Private endPoint As Char
End Class
Fungsi CekLingkar pada program berfungsi untuk menentukan
StartPoint dan EndPoint pada awal proses penghitungan MST. StartPoint dan EndPoint adalah titik-titik yang akan digunakan untuk menentukan apakah rusuk yang dihitung menimbulkan cycle pada graf MST atau tidak. Fungsi
CekLingkar juga memanggil fungsi IsCycle.
Public Function CekLingkar(ByVal e As tEdge) As Boolean
endPoint = e.Vertex2.Name
visitedEdge = New ArrayList() visitedEdge.Add(e)
Return IsCycle(e, e.Vertex1.Name) End Function
Fungsi IsCycle adalah fungsi yang berisi algoritma untuk menentukan StartPoint dan EndPoint selama proses penghitungan MST. Jadi dalam proses pencarian MST, pada setiap rusuk dengan bobot terkecil yang telah dipilih,
program melakukan looping sebanyak jumlah rusuk untuk melakukan cek cycle. Cek cycle dilakukan dengan membandingkan StartPoint dan EndPoint. Jika
StartPoint = End Point maka rusuk tersebut menimbulkan cycle, dan berlaku sebaliknya.
Adapun algoritma untuk menentukan StartPoint dan EndPoint adalah
43 a. GrafAwal = array untuk menyimpan rusuk dan bobot graf awal
GrafMST = array untuk menampung rusuk dan bobot selama proses pencarian MST
b. Menentukan StartPoint dan EndPoint. Didapatkan dari rusuk yang
mempunyai bobot terkecil dari GrafAwal, Titik1 = StartPoint dan Titik2 = EndPoint.
c. Melakukan cek, apakah ada vtitik lain pada graf MST yang terhubung dengan StarPoint. Jika ada titik lain yang terhubung dengan StartPoint, maka StartPoint diganti dengan titik tersebut.
d. Melakukan cek apakah StartPoint = EndPoint. Jika StartPoint = EndPoint maka rusuk tersebut menimbulkan cycle, dan program
tidak akan menambahkan rusuk tersebut ke array GrafMST. Sebaliknya jika StartPoint != EndPoint, program akan menambahkan rusuk beserta bobotnya ke array GrafMST.
e. Begitu seterusnya, proses tersebut dilakukan hingga jumlah rusuk pada GrafMST = jumlah titik – 1 .
Implementasi algoritma diatas dapat dilihat dalam fungsi IsCycle. Adapun penggalan program fungsi IsCycle adalah sebagai berikut :
Private Function IsCycle(ByVal E As tEdge, ByVal StartPoint As Char) As Boolean
For i As Integer = 0 To JumlahSisi - 1
If Array.IndexOf(visitedEdge.ToArray, Edges(i)) >= 0 Then Continue For
44
If Edges(i).Vertex1.Name = endPoint Or Edges(i).Vertex2.Name = endPoint Then Return True
End If
Dim SP As Char
If Edges(i).Vertex1.Name = StartPoint Then SP = Edges(i).Vertex2.Name
ElseIf Edges(i).Vertex2.Name = StartPoint Then SP = Edges(i).Vertex1.Name
End If
If IsCycle(Edges(i), SP) Then Return True End If
Next
Return False End Function
2. Proses Penyimpanan Data Verteks
Untuk memudahkan pengguna, data yang dimasukkan dapat disimpan dalam file berekstensi .ina . File ini akan menyimpan data-data berupa :
a. Titik 1 (titik awal)
b. Titk 2 (titik akhir), titik 1 dan titik 2 akan membentuk sebuah rusuk. c. Bobot
Pada prosedur sub SaveMenu_Click, semua data pada tabel input akan diubah terlebih dahulu ke variabel bertipe data string. Antara data Titik1, Titik2,
dan Bobot dipisahkan dengan karakter spasi.
Private Sub SaveMenu_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SaveMenu.Click
Dim dlg As SaveFileDialog = New SaveFileDialog() dlg.Filter = ".ina|*.ina"
If dlg.ShowDialog() = Windows.Forms.DialogResult.Cancel Then Return
If File.Exists(dlg.FileName) Then File.Delete(dlg.FileName)
grid.EndEdit()
45 sw.WriteLine(".ina file")
For Each row As DataGridViewRow In grid.Rows
For Each cell As DataGridViewCell In row.Cells sw.Write(cell.Value.ToString & " ")
Next sw.WriteLine() Next sw.Close() End Using End Sub
3. Proses Open Data Verteks
Untuk membuka data verteks yang telah disimpan oleh pengguna, data-data yang telah diubah ke dalam variabel bertipe data-data string harus dipilah-pilah
dahulu. Salah satu fungsi yang dapat digunakan untuk memilah data adalah fungsi split. Fungsi ini mengembalikan data berupa array berdasarkan karakter
pembatas.
Private Sub menuOpen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles menuOpen.Click
Dim dlg As OpenFileDialog = New OpenFileDialog() dlg.Filter = ".ina|*.ina"
If dlg.ShowDialog() = Windows.Forms.DialogResult.Cancel Then
Exit Sub End If
Dim frm As New InputBobotForm() frm.MdiParent = Me
frm.Show()
Using sr As StreamReader = New StreamReader(dlg.FileName) If Not sr.ReadLine() = ".ina file" Then
MessageBox.Show("File tidak valid ! ") Exit Sub
End If
Dim line As String Do
line = sr.ReadLine()
If String.IsNullOrEmpty(line) Then Exit Do
46 Dim RowIndex As Integer = frm.grid.Rows.Add() Dim splitter() As Char = {" "}
Dim data() As String = line.Split(splitter)
frm.grid(0, RowIndex).Value = data(0) frm.grid(1, RowIndex).Value = data(1) frm.grid(2, RowIndex).Value = data(2) frm.grid(3, RowIndex).Value = data(3) Loop Until line Is Nothing
sr.Close() End Using End Sub
4. Proses gambar graf
Untuk menggambar graf awal, nama titik, relasi antar titik, dan bobot yang digunakan diambil dari array graph, yaitu array yang berisi kumpulan titik, rusuk, dan bobot graf awal.
Dalam bahasa pemrograman VB .Net terdapat beberapa method atau class yang dapat digunakan untuk menggambar objek. Untuk menggambar garis
atau rusuk menggunakan class DrawLine, dan untuk melampirkan nama titik dan bobot, menggunakan class DrawString.
Private Sub DrawGraph(ByVal Graph As tGraf) g = Panel1.CreateGraphics()
g.Clear(Color.White)
buatKoordinat(Graph) '
Dim myfont As New Font("Arial", 12)
Dim kuas As SolidBrush = New SolidBrush(Color.Black)
For i As Integer = 0 To Graph.JumlahSisi - 1 Dim edge As tEdge = Graph.Edge(i)
For j As Integer = 0 To Graph.JumlahTitik - 1 If edge.Vertex1.Name = titik(j).Name Then edge.Vertex1 = titik(j)
End If Next
For j As Integer = 0 To Graph.JumlahTitik - 1 If edge.Vertex2.Name = titik(j).Name Then edge.Vertex2 = titik(j)
47
g.DrawString(edge.Vertex1.Name, myfont, kuas, edge.Vertex1.X, edge.Vertex1.Y)
g.DrawString(edge.Vertex2.Name, myfont, kuas, edge.Vertex2.X, edge.Vertex2.Y)
Dim p1 As Pen = New Pen(kuas)
g.DrawLine(p1, edge.Vertex1.X, edge.Vertex1.Y, edge.Vertex2.X, edge.Vertex2.Y)
g.DrawString(edge.Bobot, myfont, kuas, edge.Vertex1.X + ((edge.Vertex2.X - edge.Vertex1.X) / 2), edge.Vertex1.Y +
((edge.Vertex2.Y - edge.Vertex1.Y) / 2))
Next End Sub
Untuk menggambar graf hasil pencarian MST, nama titik, relasi antar titik, dan bobot yang digunakan diambil dari array graphMst, yaitu array yang berisi kumpulan titik, rusuk, dan bobot graf MST yang telah terbentuk.
Private Sub DrawGraphMst() g = Panel1.CreateGraphics()
Dim myfont As New Font("Arial", 12)
Dim kuas As SolidBrush = New SolidBrush(Color.Red)
titik = GraphAwal.getTitik
Dim edge As tEdge = graphMst.Edge(itr)
For j As Integer = 0 To titik.Count - 1
If edge.Vertex1.Name = titik(j).Name Then edge.Vertex1 = titik(j)
Exit For End If
Next
For j As Integer = 0 To titik.Count - 1
If edge.Vertex2.Name = titik(j).Name Then edge.Vertex2 = titik(j)
Exit For End If
Next
48 g.DrawString(edge.Vertex2.Name, myfont, kuas,
edge.Vertex2.X, edge.Vertex2.Y)
Dim p1 As Pen = New Pen(kuas)
g.DrawLine(p1, edge.Vertex1.X, edge.Vertex1.Y, edge.Vertex2.X, edge.Vertex2.Y)
itr += 1
End Sub
B. Implementasi Antarmuka
1. Tampilan Awal
Tampilan awal berupa form start up untuk masuk ke menu utama. Form
start up merupakan form yang akan muncul hanya beberapa waktu saja dan
secara otomatis menutup sesuai dengan kontrol waktu yang telah ditentukan.
Form ini biasa disebut form splash screen.
Gambar 4.1 Tampilan awal
2. Tampilan Utama
Tampilan utama merupakan antarmuka induk yang berisi menu pilihan
49 a. Menu File
Berisi empat sub menu, yaitu : Menu New
Menu ini berfungsi untuk memanggil lembar kerja baru pengguna
akan diminta untuk menginputkan jumlah titik dan jumlah rusuk. Menu Open
Menu ini berfungsi untuk membuka data yang sudah ada atau disimpan sebelumnya.
Menu Save
Menu ini berfungsi untuk menyimpan data yangtelah diinputkan. Menu Exit
Menu ini berfungsi untuk keluar dari program. b. Menu About
Menu About adalah menu untuk menampilkan informasi tentang
50
Gambar 4.2 Tampilan Utama
3. Tampilan Form Input dan Hasil
Gambar 4.3 Form Input dan Hasil
Form ini merupakan antarmuka yang digunakan untuk melakukan input data, proses, sekaligus menampilkan hasil dari pencarian MST. Pertama-tama
51 ditampilkan grid atau tabel, dimana jumlah baris atau row dari tabel ini sesuai
dengan jumlah rusuk yang dimasukkan oleh pengguna. Melalui tabel ini pengguna dapat memasukkan data titik dan bobot dari graf yang akan dicari MST nya.
Untuk melakukan penghitungan atau pencarian MST, pengguna dapat memilih tombol Ok. Maka program akan menampilkan tabel hasil sorting
(ascending), tabel hasil pencarian MST, gambar graf, dan jumlah bobot minimum MST.
Tabel hasil sorting menampilkan data titik dan bobot yang telah
diurutkan secara ascending, yaitu beruruan dari bobot yang paling kecil ke bobot yang paling besar.
Tabel hasil pencarian MST, menampilkan hasil pencarian MST yang meliputi data titik, rusuk dan bobot. Data ditampilkan secara berurutan sesuai dengan proses pembentukan MST, yaitu rusuk yang mempunyai bobot paling
kecil ke bobot yang paling besar, dengan ketentuan rusuk tersebut tidak menimbulkan cycle.
Gambar graf yang tampilkan program merupakan gambar graf awal, untuk menampilkan gambar graf MST, pengguna dapat memilih tombol GrafMST, kemudian untuk menampilkan gambar tahap-tahap proses
pembentukan MST, gambar graf harus direset terlebih dahulu dengan memilih tombol Reset, setelah itu pilih tombol Berikutnya, maka akan ditampilkan proses
52 yang ditandai dengan warna merah. Untuk menampilkan kembali graf awal,
pengguna dapat memilih tombol Reset.
4. Tampilan Open
Pengguna juga dapat membuka data yang sudah pernah diinputkan
sebelumnya dengan memilih menu open.
Gambar 4.4 Tampilan Open
5. Tampilan Save
Pengguna dapat menyimpan data titik, rusuk, dan bobot yang telah diinputkan dengan memilih menu Save. Data akan disimpan dengan ekstensi
53
Gambar 4.5 Tampilan Save
C. Pembahasan
Program Simulasi Minimum Spanning Tree menggunakan algoritma kruskal. Jumlah titik maksimal yang dapat diinputkan adalah sebanyak 12 titik.
1. Contoh Penyelesaian Masalah MST
Untuk mengetahui cara kerja program Simulasi MST dengan algoritma
Kruskal ini, program akan diujicobakan pada data 7 titik dan 11 rusuk, dengan detail data pada tabel 3.1.
Program akan mengurutkan data bobot secara ascending, yaitu dari
bobot yang terkecil ke bobot yang terbesar. Data diurutkan berdasarkan bobot terkecil untuk mempermudah proses pencarian MST karena program akan
54 Tabel 4.1 Data ujicoba
No Rusuk Bobot
1 AB 7
2 AD 5
3 BD 9
4 BC 8
5 BE 7
6 DE 15
7 DF 6
8 EF 8
9 EG 9
10 FG 11
11 CE 5
Total Bobot 90
Tabel 4.2 Data ujicoba yang telah di sorting (ascending)
No Rusuk Bobot
1 AD 5
2 CD 5
3 DF 6
4 AB 7
5 BE 7
6 BC 8
7 EF 8
8 BD 9
9 EG 9
10 FG 11
11 DE 15
55 Setelah data diurutkan berdasarkan bobot terkecil, kemudian program
melakukan pencarian MST, dimulai dengan bobot terkecil. Pada data diatas, bobot terkecil adalah lima, dan ada dua rusuk yang mempunyai bobot lima. Jika terdapat lebih dari satu rusuk yang mempunyai bobot terkecil sama, maka
program akan memilih secara acak rusuk yang akan dihitung terlebih dahulu. Setelah itu program akan melakukan cek cycle, apakah rusuk tersebut
menimbulkan cycle pada graf MST atau tidak. Jika rusuk menimbulkan cycle, maka rusuk beserta bobot tidak ditambahkan pada graf MST. Program akan menentukan bobot terkecil berikutnya, melakukan cek cycle, dan menambahkan
rusuk dan bobot ke dalam graf MST, begitu seterusnya hingga jumlah rusuk graf MST = jumlah titik graf - 1 .
Berikut adalah gambar graf selama proses pencarian MST. Garis yang berwarna merah adalah rusuk-rusuk yang membentuk MST.
56
57 Sehingga didapatkan hasil pencarian MST dalam tabel berikut :
Tabel 4.3 Hasil pencarian MST untuk data ujicoba
No Rusuk Bobot
1 AD 5
2 CE 5
3 DF 6
4 AB 7
5 BE 7
6 EG 9
Total Bobot 39
Rusuk yang yang membentuk MST adalah AD – CE – DF – AB – BE –
EG, dengan total bobot adalah 39.
D. Analisa
Algoritma Kruskal hanya dapat diterapkan pada graf tidak berarah, karena algoritma ini tidak menghitung atau memperdulikan arah antar titik dan
hanya memperhitungkan bobot dalam melakukan pengurutan untuk melakukan pencarian bobot terpendek dari masing-masing titik / vertex.
1. Kelebihan Program
Dari program pencarian jalur terpendek ini, kelebihan-kelebihan yang didapat adalah :
58 b. Data titik, rusuk dan bobot dapat disimpan, sehingga datanya dapat
di-update oleh user.
2. Kekurangan Program
BAB V
PENUTUP
Bagian akhir dari penulisan skripsi ini ditulis beberapa kesimpulan dan
saran sehubungan dengan hal-hal yang terkait dengan pencarian jalur terpendek dari bab-bab sebelumnya.
A. Kesimpulan
Kesimpulan yang diambil dari pembuatan aplikasi Simulasi Minimum Spanning Tree menggunakan algoritma Kruskal adalah :
1. Pencarian MST dengan menggunakan algoritma Kruskal hanya dapat dilakukan pada graf tak berarah.
2. Algoritma Kruskal dapat diimplementasikan ke pemrograman komputer menggunakan developer Visual Basic.Net.
3. Untuk mengimplementasikan graf ke program komputer digunakan
matriks dua dimensi dalam menampung datanya.
B. Saran
Saran yang dapat dipertimbangkan untuk pengembangan program ini adalah sebagai berikut :
1. Program Simulasi Minimum Spanning Tree dengan Algoritma Kruskal
merupakan program simulasi untuk mempermudah pemahaman pencarian MST, maka visualisasi graf berperan penting dalam program ini. Akan
60
mengembangkan program ini dapat membuat algoritma untuk
61 DAFTAR PUSTAKA
Arzinal, D., 2006, Membangun Pohon Merentang Minimum Dari Algoritma Prim
dengan Strategi Greedy, Institut Teknologi Bandung, Bandung.
Eep, S S., 1990, Discrete Mathematics with Applications, Wadsworth Publishing Co, California.
Lovasz, L., Pelikan, J., Vesztergombi, K., 2003, Discrete Mathematics Elementary and Beyond, Springer, New York.
Munir, R., 2001, Matematika Diskrit, Penerbit Informatika, Bandung.
Muntaha, A., 2006, Graf Pohon dan Implementasinya Dalam Beberapa Persoalan, Institut Teknologi Bandung, Bandung.
Ramadiyan, D., 2006, Aplikasi Representasi Graf, Institut Teknologi Bandung, Bandung.
Siang, J J., 2004, Matematika Diskrit dan Aplikasinya pada Ilmu Komputer, Andi, Yogyakarta.
www.informatika.org/~rinaldi/Matdis/2006-2007/Makalah-2006.htm (diakses pada