BAB 2 LANDASAN TEORI
2.1 Graph
Graf digunakan untuk merepresentasikan objek-objek diskrit dan hubungan antara objekobjek tersebut. Gambar 2.1 merupakan sebuah graf yang menyatakan peta jaringan jalan raya yang menghubungkan sejumlah kota di Provinsi Jawa Tengah (Rinaldi Munir : 2007).
Gambar 2.1 Jaringan jalan raya di Provinsi Jawa Tengah
Sesungguhnya peta tersebut adalah sebuah graf, yang dalam hal ini kota dinyatakan sebagai bulatan (simpul) sedangkan jalan dinyatakan sabagai garis (sisi). Dengan diberikannya peta tersebut, kita dapat mengetahui apakah ada lintasan jalan antara dua buah kota.
2.1.1 Definisi Graph
Graf G didefinisikan sebagai pasangan himpunan (V, E), yang dalam hal ini V = himpunan tidak-kosong dari simpul-simpul (vertices) = { v1 , v2 , ... , vn } dan E = himpunan sisi (edges) yang menghubungkan sepasang simpul = {e1 , e2 , ... , en }. Jadi, sebuah graf dimungkinkan tidak mempunyai sisi satu buah pun, tetapi simpulnya harus ada, minimal satu. Graf yang hanya mempunyai satu buah simpul tanpa sebuah sisi pun dinamakan graf trivial (Rinaldi Munir : 2007).
2.1.2 Jenis-jenis Graph
Pengelompokan graf dapat dipandang berdasarkan ada tidaknya sisi ganda, berdasarkan jumlah simpul atau berdasarkan orientasi arah pada sisi. Berdasarkan ada tidaknya gelang atau sisi ganda pada suatu graf, maka graf digolongkan menjadi dua jenis yaitu (Rinaldi Munir : 2007) : 1. Graf sederhana (simple graph). Merupakan graf yang tidak mengandung gelang maupun sisi – ganda. Pada graf sederhana, sisi adalah pasangan tak-terurut ( unordered pairs ). Jadi, menuliskan sisi (u,v) sama saja dengan (v,u)
Gambar 2.2 Graf sederhana
Gambar 2.2 adalah graf dengan himpunan simpul V dan himpunan sisi E adalah V = { 1,2,3,4 } dan E = { (1,2), (1,3), (2,3), (2,4), (3,4) }. 2. Graf tak - sederhana (unsimple-graph). Merupakan graf yang mengandung sisi ganda atau gelang dinamakan graf taksederhana (unsimple graph). Ada dua macam graf tak-sederhana, yaitu graf ganda (multigraph) dan graf semu (pseudograph). Graf ganda adalah graf yang mengandung sisi ganda yang menghubungkan sepasang simpul lebih dari dua buah. Dapat diasosisiaikan sebagai pasangan tak-terurut yang sama.
Gambar 2.3 Graf ganda Gambar 2.3 merupakan graf ganda dengan V = { 1, 2, 3, 4 }, E = { (1, 2), (2, 3), (1, 3), (1, 3), (2, 4), (3, 4), (3, 4) } = { e1, e2, e3, e4, e5, e6, e7}. Sisi e3 = (1, 3) dan sisi e4 = (1, 3) dinamakan sisi-ganda (multiple edges atau pararel edges) karena kedua sisi ini menghubungkan dua buah simpul yang sama, yaitu simpul 1 dan simpul 3. Graf semu adalah graf yang mengandung gelang (loop). Graf semu lebih umum daripada graf ganda, karena sisi pada graf semu dapat terhubung ke dirinya sendiri.
Gambar 2.4 Graf semu
Gambar 2.4 adalah graf dengan V = { 1, 2, 3, 4 } E = { (1, 2), (2, 3), (1, 3), (1, 3), (2, 4), (3, 4), (3, 4), (3, 3) } = { e1, e2, e3, e4, e5, e6, e7, e8}. Pada sisi e8 = (3, 3) dinamakan gelang (loop) karena berawal dan berakhir pada simpul yang sama. Berdasarkan jumlah simpul pada suatu graf, maka secara umum graf dapat digolongkan menjadi dua jenis: 1. Graf berhingga (limited graph). Graf berhingga adalah graf yang jumlah simpulnya berhingga. 2. Graf tak-berhingga (unlimited graph) Graf yang jumlah simpulnya tidak berhingga banyaknya disebut graf tak berhingga. Berdasarkan orientasi arah pada sisi, maka secara umum graf dibedakan atas 2 jenis : 1.
Graf tak-berarah (undirected graph).
Merupakan graf yang sisinya tidak mempunyai orientasi arah. Urutan pasangan simpul yang dihubungkan oleh sisi tidak diperhatikan. Jadi, (u , v) = (v , u) adalah sisi yang sama.
2.
Graf berarah (directed graph atau digraph). Graf yang setiap sisinya diberikan orientasi arah disebut sebagai graf berarah. Pada
graf berarah, (u , v) dan (v , u) menyatakan dua buah busur yang berbeda, dengan kata lain (u , v) ≠ (v , u). Simpul (u) dinamakan simpul asal dan simpul (v) dinamakan simpul terminal. Pada graf berarah, gelang diperbolehkan, tetapi sisi ganda tidak.
Gambar 2.5 Graf berarah Definisi graf dapat diperluas sehingga mencakup graf-ganda berarah (directed multigraph). Pada graf-ganda berarah, gelang dan sisi ganda diperbolehkan ada.
Gambar 2.6 Graf-ganda berarah
2.2 Metode Pencarian
Ada banyak metode yang dapat digunakan untuk pencarian jalur terdekat pada suatu graf. Metode pencarian tersebut dapat dikelompokkan ke dalam dua jenis, yaitu pencarian
buta/tanpa informasi (blind atau un-informed search) dan pencarian heuristik/dengan informasi (heuristic atau informed search) (Dewi Yusra Aini : 2010).
2.2.1 Pencarian Heuristik
Heuristik adalah teknik yang digunakan untuk meningkatkan efisiensi dari proses pencarian. Teknik ini baik diterapkan dalam tujuan yang umum, tapi tidak untuk tujuan yang khusus.Heuristik yang baik, dapat memecahkan permasalahan yang berat, seperti pada masalah perjalanan salesman. Sebuah fungsi heuristik mengevaluasi keadaan permasalahan tersendiri dan menentukan bagaimana diperlukan fungsi ini dalam memecahkan suatu permasalahan. Sebuah fungsi heuristik adalah sebuah fungsi yang memetakan keadaan permasalaan, yang mendeskripsikan daya tarik dan digambarkan dalam sebuah angka (Andri Kristanto : 2004).
Beberapa metode pencarian yang menggunakan fungsi heuristik dalam mencari solusi, yaitu Generate and test, Hill climbing, dan Best First Search (greedy best first search dan A*) (Dewi Yusra Aini : 2010).
2.2.1.1 Generate and Test (Bangkitkan dan Uji)
Generate and Test merupakan penggabungan antara Depth - First Search dengan backtracking. Metode ini hanya melibatkan setiap node dalam ruang pencarian dan pengujian untuk melihat apakah itu simpul tujuan atau bukan. Jika ya, pencarian telah berhasil dan tidak perlu
dilanjutkan,
jika
tidak
pindah
ke
node
berikutnya.
Metode ini merupakan bentuk sederhana dari brute force search (pencarian lengkap), disebut demikian karena pecarian dilakukan dengan cara hanya melintasi pohon pencarian dan bagaimana mengidentifikasi node awal dan node tujuan, dan pada akhirnya akan memeriksa setiap node di pohon sampai menemukan tujuan (Coppin Ben : 2004 ). Generate-and-Test merupakan prosedur Depth – First Search karena solusi harus dibangkitkan secara lengkap sebelum dilakukan test dan juga disebut prosedur backtracking
karena ketika tidak ada lagi simpul yang bisa dibangkitkan pada satu lintasan maka dilakukan backtracking terhadap simpul terdekatnya.
Generate and Test memiliki tiga sifat : 1. Bangkitkan suatu solusi yang mungkin. Untuk beberapa permasalahan, pembangkitan ini berarti membangkitkan suatu simpul tertentu atau lintasan tertentu dari keadaan awal. 2. Uji untuk melihat apakah simpul tersebut benar-benar merupakan solusinya dengan cara membandingkan simpul yang dipilih atau simpul akhir suatu lintasan yang dipilih dengan kumpulan tujuan yang dapat diterima atau diharapkan. 3. Jika solusi telah diperoleh maka keluar. Jika tidak maka ulangi kembali langkah pertama. Generate and Test dapat diterapkan pada sejumlah masalah di mana orang memecahkan masalah ketika tidak ada informasi tambahan untuk mencapai solusi. Generate and test juga sering disebut sebagai teknik pencarian buta (Coppin Ben : 2004).
Contoh kasus penyelesaian dengan menggunakan Generate and Test yaitu seorang salesman ingin mengunjungi sejumlah n kota. Akan dicari rute terpendek di mana setiap kota hanya boleh dikunjungi tepat 1 kali dan jarak setiap kota sudah diketahui. Misalkan ada 4 kota dengan jarak antara setiap kota seperti terlihat pada gambar berikut:
Gambar 2.7 Lintasan Generate and Test
Penyelesaian
dengan
menggunakan
Generate
and
Test
dilakukan
dengan
membangkitkan solusi-solusi yang mungkin dengan menyusun kota-kota dalam urutan abjad dan membuat pohon pencarian : 1. A-B-C-D 2. A-B-D-C 3. A-C-B-D 4. A-C-D-B , dan seterusnya.
Gambar 2.8 Pohon pencarian Generate and Test Misalkan kita mulai dari node A. Kita pilih sebagai keadaan awal adalah lintasan ABCD dengan panjang lintasan = 18. Kemudian kita lakukan backtracking untuk mendapatkan lintasan ABDC dengan panjang lintasan = 19. Lintasan ini kita bandingkan dengan lintasan ABCD, ternyata ABDC > ABCD, sehingga lintasan terpilih adalah ABCD. Kita lakukan lagi backtracking untuk mendapatkan lintasan ACBD =16, ternyata ACBD < ABCD, maka lintasan terpilih sekarang adalah ACBD. Demikian seterusnya hingga ditemukan solusi yang sebenarnya.
2.2.2 Pencarian Buta (Blind Search/Un-informed Search)
Dikatakan pencarian buta, karena pada pencarian ini tidak ada informasi awal. Disini hanya akan dibahas dua metode pencarian, yaitu Breadth First Search dan Depth First Search (Dewi Yusra Aini : 2010).
2.2.2.1 Breadth First Search (BFS) Dalam hal ini, simpul – simpul yang terdekat dengan simpul awal ( start node ) akan dicari paling awal sehingga urutan pencarianya mempunyai sifat yang horizontal. Algoritma ini tidak akan terperangkap untuk menksplorasi sebuah jalan yang salah. Hal ini berlawanan dengan algoritma depth first search yang mungkin mengikuti jalan tunggal yaitu jalan yang salah dan waktu yang lama (Andri Kristanto : 2004). S
A
C
B
E
D H
F G
Gambar 2.9 Tree untuk Breadth First Search
2.2.2.2 Depth First Search (DFS) Depth – First Search (DFS) menggunakan struktur data Stack untuk mengingat kemana seharusnya DFS pergi saat ia mencapai suatu simpul tertentu. DFS memiliki aturan tertentu, aturan untuk DFS adalah (Nugroho Adi. 2009).: 1. Jika mungkin, lakukan kunjungan pada simpul-simpul pendamping (adjacent vertex) yang belum pernah dikunjungi, tandai dan masukkan (push) ke Stack. Ketika tidak ada lagi simpul pendamping yang belum dikunjungi. Masuk ke aturan 2.
2. Jika saat melakukan aturan diatas mengalami kesulitan, keluarkan (popped off) simpul dari Stack maka akan sampai ke simpul di bawahnya. Jika simpul dibawahnya bukan simpul pendamping yang belum dikunjungi, keluarkan lagi. Demikian selanjutnya hingga tidak dapat melakukannya lagi dan masuk ke aturan 3.
3. Jika tidak dapat lagi mengikuti aturan 1 dan aturan 2, berarti algoritma DFS telah selesai
B
F
H
G
I
C
A
D
E Gambar 2.10 Lintasan Depth First Seacrh
Tabel 2.1 Isi Stack dalam DFS Event
Isi Stack
Visit A
A
Visit B
AB
Visit F
ABF
Visit H
ABFH
Pop H
ABF
Pop F
AB
Pop B
A
Visit C
AC
Pop C
A
Visit D
AD
Visit G
ADG
Visit I
ADGI
Pop I
ADG
Pop G
AD
Pop D
A
Visit E
AE
Pop E
A
Pop A
FINISH
2.2.3 Backtracking
Backtracking adalah cara yang metodologis mencoba beberapa sekuens keputusan, sampai menemukan sekuens yang bekerja. Algoritma backtracking banyak diterapkan untuk program games seperti permainan tic-tac-toe, menemukan jalan keluar dalam sebuah labirin, catur, crossword puzzle, sudoku¸dan masalah – masalah pada bidang kecerdasan buatan (artificial intelligence).
Penyelesaian dengan backtracking :
1. Solusi dicari dengan membentuk lintasan dari akar ke daun. Aturan yang dipakai adalah mengikuti Depth - First Search. Simpul – simpul yang sudah dilahirkan dinamakan simpul hidup dan simpul hidup yang sedang diperluas dinamakan simpulE. Simpul dinomori dari atas kebawah sesuai dengan kelahirannya.
2. Jika lintasan yang diperluas yang sedang dibentuk tidak mengarah ke solusi, maka simpul-E tersebut dibunuh sehingga menjadi simpul mati (dead node). Simpul yang sudah mati ini tidak akan diperluas lagi.
3. Jika pembentukan lintasan berakhir dengan simpul mati, maka proses pencarian diteruskan dengan membangkitkan simpul anak lainnya. Bila tidak ada lagi simpul anak yang dibangkitkan, maka pencarian solusi dilanjutkan dengan melakukan backtracking ke simpul hidup terdekat. Selanjutnya simpul ini menjadi simpul-E yang terbaru. 4. Pencarian dihentikan bila telah ditemukan solusi atau tidak ada lagi simpul hidup untuk backtracking.
2.3
Lintasan Terpendek (Shortest Path)
Lintasan terpendek (Shortest Path) merupakan lintasan minimum yang diperlukan untuk mencapai suatu titik dari titik tertentu. Dalam pencarian lintasan terpendek, masalah yang dihadapi adalah mancari lintasan mana yang akan dilalui, sehingga didapat lintasan yang paling pendek dari satu verteks ke verteks yang lain.
Ada beberapa macam persoalan lintasan terpendek, antara lain: 1. Lintasan terpendek antara dua buah verteks. 2. Lintasan terpendek antara semua pasangan verteks. 3. Lintasan terpendek dari verteks tertentu ke semua verteks yang lain 4. Lintasan terpendek antara dua buah verteks yang melalui beberapa verteks tertentu.
Pada persoalan lintasan terpendek, yang menjadi masalah adalah lintasan terpendek antara dua buah verteks, dimana bobot pada setiap edge graph digunakan untuk menyatakan jarak antar kota dalam satuan kilometer (km) (Dewi Yusra Aini : 2010).
2.4
Pengertian Database
Kumpulan file – file yang mempunyai kaitan antara satu file dengan file yang lain sehingga membentuk satu bangunan data untuk menginformasikan satu perusahaan, instansi dalam batasan terntentu. Bila terdapat file yang tidak dapat dipadukan atau diubungkan dengan file yang lainnya berarti file tersebut bukanla kelompok dari satu database, ia akan dapat membentuk satu database sendiri (Ir. Harianto Kristanto). Beberapa istilah yang digunakan dalam Sistem Basis Data (Database): 1. Entity : merupakan orang,tempat, kejadian tau konsep yang informasinya direkam. Pada bidang Administrasi Siswa misalnya, entity adalah siswa, buku, pembayaran, nilai test. Pada bidang kesehatan, entity adalah pasien,dokter,obat,kamar,diet. 2.
Atribute : setiap entity mempunyai atribute atau sebutan untuk mewakili suatu entity. Seorang siswa dapat diliat dari atributenya, misalnya nama, nomor siswa, alamat,
nama orang tua, hobby. Atribute juga disebut sebagai data elemen, data field, data item. 3. Data value (nilai atau isi data) : merupakan data aktual atau informasi yang disimpan pada tiap data elemen atau atribute. Atribute nama karyawan menunjukan tempat dimana informasi nama karyawan disimpan, sedangkan data valuenya adalah Sutrisno, Budiman, merupakan isi data nama karyawan tersebut 4. Record / Tuple : merupakan kumpulan elemen - elemen yang saling berkaitan menginformasikan tentang suatu entity secara lengkap. Satu record mewakili satu data atau informasi tentang seseorang misalnya, nomor karyawan, nama karyawan, alamat, kota, tanggal masuk. 5. File : merupakan kumpulan record-record sejenis yang mempunyai panjang elemen yang sama, atribut yang sama, namun berbeda-beda data valuenya.
6. Database Management System (DBMS) : merupakan kumpulan file yang saling berkaitan bersama dengan program untuk pengelolaannya. Database adalah kumpulan datanya, sedang program pengelolaannya berdiri sendiri dalam satu paket program yang komersial untuk membaca data, mengisi data, menghapus data, melaporkan data dalam database.
2.5
Flow Chart
Flowchart adalah bagan yang menggambarkan urutan logika dari suatu prosedur pemecaan masalah. Simbol yang digunkan pada flowcart dapat dilihat pada tabel berikut (Heri Sismoro : 2005). Tabel 2.2 Simbol-simbol Flowchart Program Simbol
Fungsi Terminator Menunjukkan awal dan akhir suatu proses. Preparation Memberikan nilai awal pada suatu variabel atau counter
Processing Menunjukan pengolahan aritmatika dan pemindahan data Input/output Menunjukan proses input dan output Decision Mewakili operasi perbandingan logika Predefined Process Proses yang ditulis sebagai subprogram, yaitu prosedur / fungsi Connector Penghubung pada halaman yang sama Off page connector Penghubung pada halaman yang berbeda Flow Lines Arah proses
2.6 UML (Unified Modeling Language)
Unified Modeling Language adalah sebuah bahasa graphis yang telah menjadi standar dalam industri untuk visualisasi, merancang dan mendokumentasikan sistem piranti lunak. UML merupakan dasar fundamental dari teknik analisis berorientasi objek, berbentuk diagramdiagram yang digunakan untuk menampilkan konstruksi dari sistem berorientasi objek, seperti cetak biru (blue print) suatu pembangunan gedung yang menggambarkan konstruksi bangunan tersebut (Mardiansyah Matondang : 2012).
2.6.1 Use-case Diagram Use-case diagram menggambarkan secara graphis perilaku perangkat lunak. Diagram ini memberikan gambaran menurut perspektif pengguna perangkat lunak. Sebuah use-case diagram mengandung actor, use-case dan interaksi antara actor dengan use-case.
2.6.1.1 Actor
Actor merupakan segala sesuatu yang perlu berinteraksi dengan sistem untuk pertukaran informasi. Actor memberikan suatu gambaran jelas tentang apa yang harus dilakukan perangkat lunak. Actor dinotasikan seperti pada Gambar 2.11.
Gambar 2.11 Actor
2.6.1.2 Use case
Use case merupakan hasil penyusunan kembali lingkup fungsionalitas sistem menjadi banyak pernyataaan fungsionalitas sistem yang lebih kecil. Sebuah use case merepresentasikan satu tujuan tunggal dari sistem dan menggambarkan satu rangkaian kegiatan dan interaksi pengguna untuk mencapai tujuan. Use case menggambarkan fungsi-fungsi sistem dari sudut pandang pengguna eksternal. Diagram ini juga dapat diartikan sebagai urutan transaksi berkaitan yang dilakukan satu actor dengan perangkat lunak.Use case dinotasikan seperti pada Gambar 2.12 berikut:
Gambar 2.12 Use case
2.6.1.3 Interaksi Actor dengan Use-case
Interaksi Actor dengan Use case dinotasikan seperti pada Gambar 2.13.
Gambar 2.13 Use-case Diagram
2.6.2 Activity Diagram
Activity diagram memodelkan alur kerja (workflow) sebuah proses bisnis dan urutan aktifitas dalam suatu proses. Diagram ini sangat mirip dengan sebuah flowchart karena kita dapat memodelkan sebuah alur kerja dari satu aktifitas ke aktifitas lainnya atau dari satu aktifitas ke dalam keadaan sesaat (state).
Activity diagram menggambarkan aliran aktifitas dari sistem yang sedang dirancang, bagaimana masing-masing aliran berawal, decision yang mungkin terjadi, dan bagaimana mereka berakhir. Diagram ini juga dapat menggambarkan proses paralel yang mungkin terjadi pada beberapa eksekusi. Contoh activity diagram diperlihatkan pada Gambar 2.14.
User Memilih tombol Menu
Sistem Menampilkan sub Menu
User dapat memilih sub Menu
User Memilih sub Menu Peta
Sistem Menampilkan Peta
User dapat melihat peta
Gambar 2.14 Activity Diagram
Gambar 2.14 Activity Diagram
2.6.3 Sequence Diagram
Sequence diagram menjelaskan interaksi objek yang disusun dalam suatu urutan waktu. Diagram ini memperlihatkan tahap demi tahap apa yang harus terjadi untuk menghasilkan sesuatu di dalam use-case. Sequence diagram secara khusus berinteraksi dengan use-case (Mardiansyah Matondang : 2012).
Masing-masing sequence diagram menggambarkan aliran pada suatu use case. Sequence diagram dapat dibaca dengan melihat pada objek-objek dan pesan-pesan (message). Objek-objek yang berperan dalam aliran diperlihatkan pada kotak empat persegi panjang yang melintas pada bagian atas diagram. Setiap objek memiliki garis hidup (lifeline), yang digambarkan sebagai garis vertikal di bawah nama suatu objek.Notasi sequence diagram dijelaskan seperti Gambar 2.15.
Gambar 2.15 Sequence Diagram
2.6.4 Analisis Persyaratan dengan UML
Analisis persyaratan meliputi usaha untuk mengetahui apa kemampuan sebuah sistem yang diinginkan pengguna dan pelanggan dari sebuah pembuat perangkat lunak. Analisis ini
dilakukan untuk mendapatkan informasi atau persyaratan cukup untuk mempersiapkan model yang menggambarkan apa yang diperlukan dari perspektif pengguna (Mardiansyah Matondang : 2012).
Diagram yang digunakan dalam analisis persyaratan yaitu: 1. Use case diagram yang digunakan untuk menunjukkan fungsionalitas suatu sistem dan bagaimana sistem berinterakasi dengan dunia luar. 2. Activity diagram yang menunjukkan alur kerja (work flow) sebuah proses bisnis dan urutan aktivitas dalam suatu proses. 3. Class
diagram
yang
membantu
dalam
visualisasi
struktur
sistem
yang
mendeskripsikan jenis-jenis objek dalam suatu sistem dan hubungan yang terdapat diantara objek tersebut. 4. Package diagram yang digunakan untuk mengelompokkan elemen-elemen model atau kelas.
2.6.5 Desain dengan UML
Saat membuat desain adalah saat untuk berpikir secara teknis dalam menggambarkan diagram-diagram UML. Diagram yang digunakan dalam mendesain sistem yaitu: 1. Class diagram dalam sudut pandang perangkat lunak, untuk menunjukkan class yang terdapat di dalam perangkat lunak dan bagaimana mereka saling berhubungan. 2. Sequence diagram untuk menjelaskan interaksi objek yang disusun dalam suatu urutan waktu. 3. Package diagram yang digunakan untuk mengelompokkan elemen-elemen model atau kelas. Deployment diagram yang menunjukkan arsitektur fisik sebuah system (Mardiansyah Matondang : 2012).