Algoritma Johnson adalah dapat digunakan untuk graf yang berbobot negatif dan untuk menyelesaikan masalah lintasan terpendek di setiap titik ke semua titik lain. Langkah awal penyelesaian (Noviandi, E. 2012).
Algoritma Johnson adalah mengonstruksi graf yang baru dengan menambahkan graf baru pada graf dan memberi bobot sisi yang keluar dari titik baru tersebut dengan 0. Langkah selanjutnya adalah mencari lintasan terpendek dari titik baru ke semua titik lain.
Lintasan Terpendek tersebut digunakan untuk mengubah bobot semua sisi pada graf baru agar bobot semula bernilai positif. Setelah itu dicari lintasan terpendek dari tiap titik ke semua titik lain dengan mengubah hasilnya dengan menggunakan hasil dari perhitungan berupa matriks. Dari matriks ini dapat diketahui panjang lintasan terpendek dari titik ke semua titik lain.
Langkah Algoritma Johnson adalah sebagai berikut
1. Mengostruksi graf baru G, dengan cara menambahkan titik baru sehingga
V’ = V + {s} dan E + {(s,v)v di V} 2. Setiap titik v di V
0 → w (s, v)
∞ → w (v, s)
3. Menjalankan Algoritma Bellman-Ford pada graf baru a. jika terdapat bobot negatif maka selesai
b. jika tidak terdapat bobot negatif maka hitung d(s, v) , v ∈ V 4. Setiap (u, v) di E
W(u, v) = w(u, v) + d (s, v) – d(s, v)
5. Setiap v di V, dijalankan Algoritma Djikstra untuk menghitung d(u, v) 6. D’ = d(u, v)
7. Setiap (u, v) di V ; d(u, v) = d(u, v) + d(sv) – d(s, u) 8. D = d(u, v)
Keterangan
w(s,v) = bobot sisi dari s ke v.
d(s,v) = panjang lintasan terpendek dari s ke v. w(u,v) = bobot sisi baru dari u ke v.
d(u,v) = panjang lintasan terpendek dari u ke v dan yang dihutung adalah bobot sisi baru (w).
d(u,v) = panjang lintasan terpendek dari u ke v.
D’ = matriks hasil perhitungan lintasan terpendek dari tiap-tiap pasangan titik dan bobot sisi yang digunakan adalah w.
Dalam Algoritma Johnson terdapat dua Algoritma untuk penyelesainnya, yaitu Algoritma Bellman-Ford dan Algoritma Djikstra.
2.5.1. Algoritma Bellman-Ford
Algoritma Bellman-Ford menghitung jarak terpendek (dari satu sumber) pada sebuah graf berbobot. Maksudnya dari satu sumber ialah bahwa ia menghitung semua jarak terpendek yang berawal dari satu vertex. Algoritma Dijkstra dapat lebih cepat mencari hal yang sama dengan syarat tidak ada (edge) yang berbobot negatif, maka Algoritma Bellman-Ford hanya digunakan jika ada sisi berbobot negatif.
2.5.2. Algoritma Dijkstra
Algoritma Dijkstra ditemukan oleh Edsger W. Dijkstra yang merupakan salah satu varian bentuk algoritma populer dalam pemecahan persoalan yang terkait dengan masalah optimasi dan bersifat sederhana. Algoritma ini menyelesaikan masalah untuk mencari lintasan terpendek ( sebuah lintasan yang mempunyai panjang minimum) dari vertex a ke
vertex z dalam graf berbobot, bobot tersebut adalah bilangan positif jadi tidak dapat dilalui oleh vertex negatif.
Dalam mencari solusi, Algoritma Dijkstra menggunakan prinsip greedy, yaitu mencari solusi optimum pada setiap langkah yang dilalui dengan tujuan untuk mendapatkan solusi optimum pada langkah selanjutnya yang akan mengarah pada solusi terbaik.
Algoritma ini mencari panjang lintasan terpendek dari vertex a ke z dalam sebuah graf berbobot. Langkah-langkah dalam menentukan lintasan terpendek pada Algoritma
Dijkstra yaitu:
1. Pada awalnya pilih vertex dengan bobot yang terendah dari vertex yang belum dipilih, diinisialisasikan dengan ‘0’ dan yang sudah terpilih diinisialisasikan dengan ‘1’.
2. Bentuk tabel yang terdiri dari vertex, status, bobot. Lengkapi kolom bobot yang diperoleh dari jarak vertex sumber ke semua vertex yang langsung terhubung dengan
vertex sumber tersebut.
3. Jika vertex sumber ditemukan maka tetapkan sebagai vertex terpilih.
4. Tetapkan vertex terpilih dengan label permanen dan perbaharui vertex yang langsung terhubung.
5. Tentukan vertex sementara yang terhubung pada vertex yang sudah terpilih sebelumnya dan merupakan bobot terkecil dilihat dari tabel dan tentukan sebagai
vertex terpilih berikutnya.
6. Apakah vertex yang terpilih merupakan vertex tujuan? Jika ya, maka kumpulan vertex
terpilih merupakan rangkaian yang menunjukkan lintasan terpendek. 7. Begitu seterusnya hingga semua vertex terpilih.
2.6. JAVA
Java adalah bahasa pemrograman yang bersifat open source yang dikembangkan oleh Sun Microsistems sejak tahun 1991 (Hakim,R. & Ir.Sutarno, M.Si. 2009). Bahasa ini dikembangkan dengan model yang mirip dengan bahasa C++ dan Smalltalk, namun dirancang agar lebih mudah dipakai dan platform independent, yaitu dapat dijalankan di berbagai jenis sistem operasi dan arsitektur komputer.
Java sendiri merupakan bahasa pemrograman yang berbasis objek, maksudnya adalah semua aspek yang terdapat pada Java adalah objek, sehingga memudahkan untuk mendesain, membuat dan mengembangkan program Java dengan cepat. Kelebihan ini membuat program Java menjadi mudah untuk digunakan oleh banyak orang.
Pada Tahun 1996, Sun Microsistems secara resmi merilis versi awal Java yang kemudian terus berkembang hingga muncul JDK 1.1 (Java Development Kit versi 1.1). Perkembangan terus dilakukan hingga muncul versi baru yang disebut Java 2. Perubahan utama antara versi sebelumnya adalah adanya Swing yang merupakan teknologi Graphical User Interface (GUI) yang mampu menghasilkan aplikasi desktop yang benar-benar baik.
Dalam penelitian ini penulis menggunakan Java versi The Java 2 Platform, Standart Edition (J2SE) yang merupakan Teknologi Java edisi standar, yang digunakan untuk penerapan Teknologi Java pada komputer desktop. Versi ini menyediakan lingkungan pengembangan yang kaya fitur, stabil, aman dan mendukung konektivitas basis data, rancangan antarmuka pemakai, masukan/keluaran, dan pemrograman jaringan.
2.7. UML (Unified Modeling Language)
Unified Modeling Language (UML) tidak mendefinisiskan proses standar tetapi
S & R.S. Wahyono. 2003). Hal ini dimaksudkan untuk mendukung proses perkembangan dengan Object Oriented. UML menyimpan informasi tentang struktur statis dan perilaku dinamis suatu sistem. Perilaku Dinamis mendefinisikan sejarah objek dari waktu ke waktu dan komunikasi antara objek-objek untuk mencapai tujuan.
UML terdiri atas pengelompokan diagram-diagram sistem menurut aspek atau sudut pandang tertentu. Diagram adalah yang menggambarkan permasalahan maupun solusi dari permasalahan suatu model. UML mempunyai 13 diagram, diantaranya Use Case Diagram, Class Diagram, Package Diagram, Object Diagram, Sequence Diagram, Collaboration Diagram, StatiChart Diagram, Activity Diagram, Deployment Diagram, Component Diagram, Composite Structure Diagram, Interaction Overview Diagram, Timing Diagram. Tetapi yang sering digunakan adalah Use Case Diagram, Activity Diagram, Sequence Diagram, dan Class Diagram.
2.7.1. Use Case Diagram (Diagram Pengguna Keadaan)
Use Case Diagram menggambarkan fungsionalitas yang diharapkan dari sebuah sistem. Dalam pembuatan Use Case Diagram, yang ditekankan adalah “apa” yang diperbuat sistem, dan bukan “bagaimana”. Sebuah Use Case mempresentasikan sebuah interaksi antara aktor dengan sistem.
Berikut beberapa simbol yang digunakan pada Use Case Diagram di antaranya terdapat pada Tabel 2.1.
Tabel 2.1 Simbol Pada Use Case Diagram
Simbol Nama Simbol Kegunaan
Aktor
Sebagai subjek yang
berinteraksi atau menggunakan sistem
Use Case UseCase
Sebagai kegiatan yang dapat dilakukan oleh pengguna pada sistem
Asosiasi
Sebagai penghubung antara aktor dan Use Case yang dilakukan
<< include >>
Include
Sebagai penghubung antara
Use Case yang
membutuhkan Use Case
yang lain
Sistem
Sistem Sebagai cakupan Wilayah Sistem
2.7.2. Activity Diagram (Diagram Aktivitas)
Activity Diagram menggambarkan berbagai alur aktivitas dalam sistem yang sedang
dirancang, bagaimana masing-masing alur berawal, decision yang mungkin terjadi, dan bagaimana mereka berakhir. Sebuah aktivitas dapat direalisasikan oleh satu Use Case atau lebih. Aktivitas menggambarkan proses yang berjalan, sementara Use Case
menggambarkan bagaimana aktor menggunakan sistem untuk melakukan aktivitas.
Berikut ini beberapa simbol yang digunakan pada Activity diagram dapat dilihat pada Tabel 2.2.
Tabel 2.2 Simbol pada Activity Diagram
Simbol Nama Simbol Kegunaan
Inisial node Awal aktivitas
Final Node Akhir Aktivitas
Action
Action Sebagai aktivitas yang
dilakukan oleh sistem
Control Flow Sebagai penghubung urutan
aktivitas
Decision Merupakan aktivitas
pengecekan kondisi
Exception handler Menunjukkan kondisi pengecualian apabila suatu action tidak dapat dilakukan
2.7.3. Class Diagram (Diagram Kelas)
Class adalah sebuah spesifikasi yang jika diinstansiasi akan menghasilkan sebuah objek dan merupakan inti dari pengembangan dan desain berorientasi objek. Class
menggambarkan keadaan (atribut/property) suatu sistem, sekaligus menawarkan layanan untuk memanipulasi keadaan tersebut (metode/fungsi).
Class Digram menggambarkan struktur dan deskripsi class, package, dan objek beserta hubungan satu sama lain seperti containment, pewarisan, asosiasi, dan lain-lain.
Berikut ini beberapa simbol yang digunakan pesa Class Diagram. Dapat dilihat pada Tabel 2.3.
Tabel 2.3 Simbol Pada Class Diagram
Simbol Nama Simbol Kegunaan
Class
Class
Sebagai kelas yang digunakan pada sistem
Generalization Menunjukkan hubungan
inheritance antar kelas
<<use>> Usage
Menunjukkan hubungan penggunaan suatu kelas dengan kelas yang lain
2.7.4. Sequence Diagram (Diagram Rangkaian)
Sequence Diagram menggambarkan interaksi antar-objek di dalam dan sekitar sistem (termasuk pengguna, display, dan sebagainya) berupa message yang digambarkan terhadap waktu. Sequence Diagram terdiri atas dimensi vertikal (waktu) dan dimensi horizontal (objek-objek yang terkait). Sequence Diagram biasa digunakan untuk mengambarkan skenario atau rangkaian langkah-langkah yang dilakukan sebagai tanggapan dari sebuah
event untukmenghasilkan output tertentu.
Berikut ini beberapa simbol yang digunakan pada Sequence Diagram dapat dilihat pada Tabel 2.4.
Tabel 2.4 Tabel simbol pada Sequence Diagram
Simbol Nama Simbol Kegunaan
Actor
Sebagai subjek yang menggunakan sistem
Lifeline
Life line
Bagian dari sistem yang melakukan aktivitas pemrosesan data
Message Alur data yang diproses
oleh sistem
2.8. Flowchart
Flowchart adalah suatu diagram alur (flow) yang menunjukan (flow) di dalam program atau prosedur sistem secara logika (Suarga, 2012). Pada diagram alur, dapat dilihat secara jelas arus pengendalian algoritma, yakni bagaimana rangkaian pelaksanaan kegiatan program tersebut. Suatu diagram alur akan memberi gambaran dua dimensi berupa
simbol-simbol yang masing-masing simbol-simbol tersebut telah ditetapkan lebih dahulu fungsi dan atrinya.
Dua di antara beberapa Flowchart yang menggambarkan proses dengan komputer, yaitu :
1. Sistem Flowchart
Diagram Alur Sistem (Sistem Flowchart) merupakan bagan yang menunjukkan arus pekerjaan secara keseluruhan dari sistem. Bagan ini menjelaskan urutan dari prosedur-prosedur yang ada di dalam sistem.
2. Program Flowchart
Diagram Alur Program (Program Flowchart) merupakan bagan yang menjelaskan secara rinci langkah-langkah dari proses program.
Pada Tebel 2.5 menunjukkan seperangkat simbol diagram alur beserta fungsi dan manfaat yang digunakan dalam pembuatan langkah algoritma pemrograman.
Tabel 2.5. Simbol-Simbol Flowchart
No Simbol Flowchart Keterangan Simbol
1 Start Komponen yang berfungsi untuk mengawali dan
mengakhiri suatu proses
2 Data/Hasil Komponen yang mewakili input dan output
3 Sub Proses Komponen yang menyatakan
subproses/subprogram
4 Proses Komponen yang menyatakan setiap hasil dari
pengolahan proses.
5 Looping Komponen yang berfunsi untuk menyatakan