Implementasi Algoritma Greedy Dalam Masalah Lintasan Terpanjang Menggunakan Bahasa C

(1)

IMPLEMENTASI ALGORITMA GREEDY DALAM MASALAH

LINTASAN TERPANJANG MENGGUNAKAN BAHASA C

TUGAS AKHIR

INDRIANI ARMANSYAH SRG

112406122

PROGRAM STUDI D3 TEKNIK INFORMATIKA

DEPARTEMEN MATEMATIKA

FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN

ALAM

UNIVERSITAS SUMATERA UTARA

MEDAN


(2)

IMPLEMENTASI ALGORITMA GREEDY DALAM MASALAH LINTASAN TERPANJANG MENGGUNAKAN BAHASA C

TUGAS AKHIR

Diajukan untuk melengkapi tugas dan memenuhi syarat memperoleh gelar Ahli Madya

INDRIANI ARMANSYAH SRG 112406122

PROGRAM STUDI D3 TEKNIK INFORMATIKA DEPARTEMEN MATEMATIKA

FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM UNIVERSITAS SUMATERA UTARA

MEDAN 2014


(3)

PERSETUJUAN

Judul : Implementasi Algoritma Greedy Dalam Masalah

Lintasan Terpanjang Menggunakan Bahasa C Kategori : Tugas Akhir

Nama : Indriani Armansyah Srg Nomor Induk Mahasiswa : 112406122

Program Studi : DIPLOMA (D3) TEKNIK INFORMATIKA Departemen : Matematika

Fakultas : Matematika Dan Ilmu Pengetahuan Alam (FMIPA) Universitas Sumatera Utara

Disetujui Medan, Juli 2014

Disetujui Oleh:

Program Studi D3 Teknik Informatika Pembimbing FMIPA USU

Ketua,

Dr. Elly Rosmaini, M.Si Dr. Mardiningsih, M.Si NIP. 19600201 198503 2 002 NIP. 19630405 198811 2 001


(4)

PERNYATAAN

IMPLEMENTASI ALGORITMA GREEDY DALAM MASALAH LINTASAN TERPANJANG MENGGUNAKAN BAHASA C

TUGAS AKHIR

Saya mengakui bahwa tugas akhir ini adalah hasil kerja saya sendiri, kecuali beberapa kutipan dan ringkasan yang masing-masing disebutkan sumbernya.

Medan, Juni 2014

INDRIANI ARMANSYAH S 112406122


(5)

ABSTRAK

Algoritma Greedy adalah salah satu algoritma yang menentukan pilihan tanpa melihat pilihan lain saat mencapai suatu simpul atau vertex yang terhubung dalam suatu graf. Kemampuannya dalam pencarian jarak terpanjang dengan cepat dapat membantu suatu persoalan dengan cepat. Dalam tulisan ini dibahas tentang implementasi suatu program sederhana dan algoritma Greedy dengan bahasa C (Dev-C++) yang sederhana yang bertujuan untuk memperoleh solusi optimum dari persoalan lintasan terpanjang pada graf. Hasil yang diperoleh adalah suatu solusi yang bernilai maksimum pada persoalan lintasan terpanjang.


(6)

DAFTAR ISI

Halaman

Persetujuan i

Pernyataan ii

Penghargaan iii

Abstrak iv

Daftar Isi v

Daftar Gambar vi

Daftar Tabel vii

Bab 1 Pendahuluan 1

1.1 Latar Belakang 1

1.2 Rumusan Masalah 3

1.3 Batasan Masalah 3

1.4 Tujuan 4

1.5 Manfaat 4

1.6 Metodelogi Penelitian 4

1.7 Sistematika Penulisan 5

Bab 2 Landasan Teori 8

2.1 Pengertian Komputer 8

2.2 Teori Graf 9

2.2.1 Graf Sederhana 10

2.2.2 Graf Tak Berarah 11

2.2.3 Graf Berbobot 11

2.3 Matriks Ketetanggaan 12

2.4 Permasalahan Optimasi 15

2.5 Jarak Terpanjang 16

2.6 Algoritma Greedy 16

2.7 Sekilas Tentang Bahasa C 19

2.7.1 Tipe Data Pada Bahasa C 23 2.7.2 Operator Pada Bahasa C 26

2.8 Dev-C++ 28

Bab 3 Analisis Dan Perancangan Program 33 3.1 Analisis Algoritma Greedy Lintasan Terpanjang 33 3.2 Skema Umum Algoritma Greedy 34

3.2.1 Analisis Masukan 35

3.2.2 Analisis Proses 36

3.2.3 Analisis Keluaran 37

3.3 Metode Perolehan Solusi Optimum 37

3.4 Diagram Alir 38

Bab 4 Implementasi Sistem 40


(7)

4.1.1 Kebutuhan Hardware Dan Software 43

4.2 Pengujian Aplikasi 43

4.2.1 Input Data 45

4.2.2 Output Data 48

Bab 5 Kesimpulan Dan Saran 51

5.1 Kesimpulan 51

5.2 Saran 52

Daftar Pustaka 53


(8)

DAFTAR GAMBAR

Nomor Gambar Judul Halaman

2.1 Graf Sederhana 10

2.2 Graf Tak Berarah 11

2.3 Graf Berbobot 12

2.4 Graf dan Keterangan Matriks 13

2.5 Struktur Program C 22

2.6 Tampilan Awal Dev-C++ 28

2.7 Membuat Halaman Kerja Baru 29

2.8 Membuat Projek Baru di Dev-C++ 30

3.1 Flowcart 39

4.1 Tampilan Awal Dev-C++ 42

4.2 Tampilan Output Dev-C++ 44


(9)

DAFTAR TABEL

Nomor Tabel Judul Halaman

2.1 Tabel Contoh Statement 22

2.2 Keywords Pada C 23

2.3 Ukuran Tipe Data Bilangan Bulat 24

2.4 Tipe Data Bilangan Pecahan 24

2.5 Tipe Data Non-Numerik 25

2.6 Tabel Karakter Khusus 26


(10)

ABSTRAK

Algoritma Greedy adalah salah satu algoritma yang menentukan pilihan tanpa melihat pilihan lain saat mencapai suatu simpul atau vertex yang terhubung dalam suatu graf. Kemampuannya dalam pencarian jarak terpanjang dengan cepat dapat membantu suatu persoalan dengan cepat. Dalam tulisan ini dibahas tentang implementasi suatu program sederhana dan algoritma Greedy dengan bahasa C (Dev-C++) yang sederhana yang bertujuan untuk memperoleh solusi optimum dari persoalan lintasan terpanjang pada graf. Hasil yang diperoleh adalah suatu solusi yang bernilai maksimum pada persoalan lintasan terpanjang.


(11)

BAB 1

PENDAHULUAN

1.1 Latar Belakang

Persoalan lintasan terpanjang (longest path) merupakan persoalan dalam mencari lintasan sederhana terpanjang maksimum dalam suatu graph yang diberikan. Lintasan terpanjang pada suatu graph dapat ditentukan dengan menggunakan suatu proses backtracking yang dapat digunakan dimana penyelesaian masalah atau output merupakan sebuah rangkaian atau barisan yang terdiri atas suatu nilai yang teratur. Lintasan terpanjang dapat juga merupakan suatu rangkaian atau barisan dari nodenode. Suatu graph G adalah himpunan tak kosong titik-titik yang disebut vertex dan himpunan garis-garis yang menghubungkan titik tersebut yang disebut edge. Suatu graph G dikatakan terhubung jika untuk setiap vertex dari graph terdapat jalur yang menghubungkan kedua vertex tersebut, atau dengan kata lain dikatakan graph terhubung (connected graph) jika setiap dua vertex yaitu Vi

dan Vj dalam suatu graph terdapat sedikitnya sebuah edge, sehingga dapat dinotasikan dengan G(V,E) . Adapun pada suatu connected graph yang berarah (directed graph), edge disebut dengan busur (arc). Sehingga dapat dinotasikan sebagai G(V, A) . (Putri Sheila, 2011)


(12)

Persoalan optimasi (optimization problem) adalah persoalan yang menuntut pencarian solusi optimum terpanjang. Persoalan optimasi dibagi menjadi dua macam, yaitu maksimasi (maximization) dan minimasi (minimization). Solusi optimum merupakan solusi yang bernilai minimum atau maksimum dari sekumpulan alternative solusi yang mungkin yang diperoleh. Solusi yang memenuhi semua kendala selanjutnya disebut sebagai solusi layak (feasible solution) dimana berperan untuk mengoptimumkan fungsi optimasi yang akhirnya disebut sebagai solusi optimum.

Penentuan lintasan terpanjang merupakan salah satu contoh persoalan optimasi dimana termasuk ke dalam persoalan optimasi maksimasi (maximization). Secara umum, penentuan lintasan terpanjang dapat dibagi menjadi dua metode, yaitu metode konvensional dan metode heuristik. Metode konvensional adalah metode yang menggunakan perhitungan matematika murni secara biasa yang hanya dapat digunakan pada jumlah vertex dan edge yang terbatas. Sedangkan metode heuristik adalah metode yang lebih variatif dan membutuhkan waktu perhitungan yang lebih singkat, karena metode ini dirancang secara komputasi untuk memecahkan masalah dimana diperoleh solusi yang lebih sederhana dengan menggunakan metode pendekatan dan melakukan pencarian.

Oleh karena itu, penulis mengajukan sebuah proposal yang berjudul

“IMPLEMENTASI ALGORITMA GREEDY DALAM MASALAH LINTASAN


(13)

1.2 Rumusan Masalah

Berdasarkan latar belakang di atas, rumusan masalah dalam penelitian ini adalah sebagai berikut Apakah dapat dibuat program menggunakan konsep bahasa pemrograman C untuk menentukan jarak terpanjang menggunakan alogaritma Greedy ?

Perumusan masalah yang akan diteliti dalam penulisan tugas akhir ini adalah mengaplikasikan dan menyelesaikan algoritma Greedy dalam menentukan lintasan terpanjang yang diharapkan menjadi penyelesaian pada solusi optimum yang ada, dan juga merancang dan membuat program penentuan jarak terpanjang.

1.3 Batasan Masalah

Pada tugas akhir ini penulis akan membatasi cakupan permasalahan yang terkait dengan pengimplementasi algoritma Greedy dalam masalah lintasan terpanjang. Batasan masalah dalam penyusunan tugas akhir ini adalah :

1. Penentuan jarak terpanjang, dimana jarak terpanjang berarti jalur terpanjang. 2. Bahasa pemrograman yang digunakan adalah bahasa pemrograman C 3. Graf yang dipakai adalah graf sederhana dan graf tidak berarah, artinya tidak

memperhatikan titik pangkal dan titik ujung suatu garis. Tidak membentuk loop

4. Jumlah verteks hanya 4 titik. 5. Semua veteks harus terhubung.


(14)

1.4Tujuan

Adapun tujuan dari penulisan tugas akhir ini adalah untuk menerapkan serta menganalisis keakuratan algoritma Greedy dengan mengimplementasikannya ke dalam bahasa pemrograman Bahasa C

1.5 Manfaat

Hasil penelitian ini diharapkan dapat memberi manfaat sebagai berikut:

1. Dapat digunakan sebagai langkah awal dalam pemanfaatan teknologi informasi, sebagai media informasi penentuan jarak terpanjang.

2. Memberi kemudahan pengguna untuk mengetahui jarak terpanjang yang harus dilalui untuk mencapai banyak daerah yang di lewati.

1.6 Metodologi Penelitian

Metodologi penelitian yang digunakan penulis untuk menyelesaikan permasalah yang terjadi di atas adalah :

1. Penelitian Kepustakaan (Library Research)

Pengumpulan data yang erat kaitannya dengan permasalahan dengan cara membaca buku-buku, makalah, dan membaca bahan-bahan sumber lainnya diperpustakaan USU, LIDA dan perpustakaan lainnya..

2. Analisa Sistem


(15)

mempelajari atau menganalisis tentang algoritma Greedy. 3. Desain Sistem

Pada tahap ini dilakukan pembuatan rancangan program dan desain program untuk penentuan jarak terpanjang tersebut.

4. Pengujian Program

Proses pengujian program akan dilakukan setelah semua perancangan dilakukan, dan ketika terdapat beberapa kekurangan yang ada di program pada saat pengujian program dilaksanakan, maka penulis akan melakukan perbaikan pada rancangan guna memperoleh hasil akhir yang maksimal. 5. Penulisan Laporan Tugas Akhir

Pengerjaan tugas akhir penulis barengi dengan membuat laporan tugas akhir yang mencakup bagaimana pembuatan dan penjelasan tentang tugas akhir penulis.

1.7 Sistematika Penulisan

Dalam penulisan tugas akhir ini, penulis membentuk suatu sistematika penulisan yang bertujuan untuk menggambarkan secara ringkas bab-bab yang mencakup hal–hal sebagai berikut:

BAB 1 : PENDAHULUAN

Bab ini menguraikan latar belakanag penulisan, rumusan masalah, masalah, tujuan, manfaat, metodologi penelitian, dan sistematika


(16)

penulisan.

BAB 2 : LANDASAN TEORI

Bab ini menjelaskan tentang landasan teori konsep dasar dan teori-teori yang mendukung pembahasan untuk tema penulisan ini yang didapat dari beberapa literatur.

BAB 3 : PERANCANGAN SISTEM

Bab ini membahas tentang perancangan program menentukan jarak terpanjang menggunkan algoritma Greedy dengan bahasa pemrograman C dan gambaran umum racangannya.

BAB 4 : IMPLEMENTASI SISTEM

Bab ini membahas analisa hasil dan pembahassan Aplikasi Kamus Fiqih Digital yang dirancang, pembuatan program, tampilan dari program, dan pengujian program.

BAB 5 : KESIMPULAN DAN SARAN

Bab ini menguraikan tentang kesimpulan dari bab-bab yang ada, dan memberi saran-saran dari hasil akhir pembuatan progam yang berguna untuk melengkapi dan menyempurnakan pengembangan program ini untuk kedepannya.


(17)

BAB 2

LANDASAN TEORI

Bab ini akan menjelaskan masalah-masalah teoritis yang berkaitan dalam pembuatan program menentukan jarak terpanjang menggunakan algoritma Greedy dengan bahasa pemrograman C

2.1 Pengertian Komputer

Istilah komputer (computer) diambil dari bahasa latin computare yang berarti menghitung (to compute). Dengan demikian komputer dapat diartikan sebagai alat hitung. Komputer bukan sekedar mesin hitung tetapi komputer mempunyai kemampuan yang dapat membantu manusia dalam menyelesaikan pekerjaan.

Komputer dapat melakukan berbagai macam pekerjaan sesuai dengan program yang diberikan. Program adalah sekumpulan instruksi atau perintah terperinci yang sudah dipersiapkan agar komputer dapat melakukan fungsinya dengan cara yang sudah ditentukan. Komputer adalah alat elektronik yang mampu melakukan beberapa pekerjaan diantaranya:


(18)

b. Memproses masukan sesuai dengan programnya.

c. Menyimpan perintah-perintah dan hasil dari pengolahan d. Menyediakan keluaran dalam bentuk informasi

2.2 Teori Graf

Teori graf merupakan pokok bahasan yang sudah tua usianya namun memiliki banyak terapan sampai saat ini.Graf digunakan untuk merepresentasikan objek-objek diskrit dan hubungan antara objek-objek-objek-objek tersebut.Representasi visual dari graf adalah dengan menyatakan objek dinyatakan sebagai noktah, bulatan, atau titik sedangkan hubungan antara objek dinyatakan denagan baris.

Secara matematis graf didefinisikan seperti berikut ini graf G didefinisikan sebagai pasangan himpunan (V, E), ditulis dengan G=(V, E), yang dalam hal ini V adalah himpunan tidak kosong dari simpul-simpul (vertices atau node) dan E adalah himpunan sisi (edges atau arcs) yang menghubungkan sepasang simpul. Simpul pada graf dapat dinomori dengan huruf seperti a, b, c, …, v, w, …, dengan bilanagan asli 1, 2, 3, .., atau gabungan keduanya. Sedangkan sisi yang menghubungkan simpul u dengan simpul v dinyatakan dengan pasangan (u, v) atau dinyatakan dengan lambang e1, e2, … .Dengan kata lain, jika e adalah sisi yang menghubungkan simpul u dengan simpul v, maka e dapat ditulis sebagai berikut :e=(v , v)


(19)

2.2.1 Graf Sederhana (Simple Graph)

Graf yang tidak mengandung gelang maupun sisi-ganda dinamakan graf sederhana.Pada gambar 2.1 adalah contoh graf sederhana yang merepresentasikan jaringan computer.

Pada graf sederhana, sisi adalah pasangan tak-terurut (unordered pairs). Jadi menuliskan sisi (u, v) sama saja dengan (v, u). Kita dapat juga mendefinisikan graf sederhana G = (V, E) terdiri dari himpunan tidak kosong simpul-simpul dari E adalah himpunan pasangan tak-terurutyang berbeda yang disebut sisi.

(a) (b) (c)

Gambar 2.1 Tiga buah graf (a) graf sederhana (b) graf ganda (c) graf semu 1 3 2 4 1 3 2 4 e1 1 2 3

e5 e7

e4

4 e4 e1


(20)

2.2.2 Graf Tak-Berarah (Undirected Graph)

Graf tak-berarah yaitu graf yang sisinya tidak mempunyai orientasi arah.Pada graf tak-berarah, urutan pasangan simpul yang dihubungkan oleh sisi tidak diperhatiakan. Jadi, (u, v) = (v, u) adalah sisi yang sama.

(a) (b) (c)

Gamabar 2.2 (a) graf tak-berarah (b) graf berarah (c) graf ganda-berarah

2.2.3 Graf Berbobot

Bobot pada setiap sisi dapat berbeda-beda bergantung pada masalah yang dimodelkan dengan graf. Bobot dapt menyatakan jarak antara dua buah kota, biaya perjalanan antara dua buah kota, waktu tempuh (message) dari sebauh simpul komunikasi ke simpul komunikasi lain (dalam jaringan komputer), ongkos

2

1 3

2

1

4

3

4 2

1

4


(21)

produksi, dan sebagainnya.Gambar 2.3 adalah contoh graf berbobot.

Gambar 2.3 Graf Berbobot

Istilah lain yang sering dikaitkan dengan graf berbobot adalah graf berlabel. Namun graf berlabel sesungguhnya lebih luas lagi definisinya. Label tidak hanya diberikan pada sisi, tetapi juga pada simpul. Sisi diberi label berupa bilangan tak negatif, sedangkan simpul diberi label berupa data lain. Misalnya pada graf yang memodelkan kota-kota, simpul diberi nama kota-kota, sedangkan label pada sisi menyatakan jarak antara kota-kota.

2.3 Matriks Ketetanggaan (Adjacency Matrix)

Matriks ketetangaan adalah representasi graf yang paling umum. Misalkan G = (V, E) adalah graf dengan n simpul, n ≥ 1. Matriks ketetangaan G adalah matriks dwimatra yang berukuran n × n. Bila matriks tersebut dinamakan A = [aij], maka

a

b e

d c

10 12

15 9

14 8


(22)

aij = 1 jika simpul i dan j bertetangaan, sebaliknya aij = 0 jika simpul i dan j tidak bertetangga.

Karena matriks ketetanggaan hanya berisi 0 dan 1, maka tersebut dinamakan juga matriks nol-satu(zero-one). Selain dengan angka 0 dan 1, elemen matriks dapat juga dinyatakan dengan nilai false (menyatakan 0) dan true (menyatakan 1). Perhatikanlah bahwa matriks ketetanggaan didasarkan pada pengurutan nomor simpul. Disini, terdapat n!cara pengurutan nomor simpul, yang berarti ada n! matriks ketetanggaan berbeda untuk graf dengan n simpul.

1 2 3 4 1 2 3 4 5 1 2 3 4 1 0 1 1 0 1 0 1 1 0 0 1 0 1 0 0 2 1 0 1 1 2 1 0 1 0 0 2 1 0 1 1

3 1 1 0 1 3 1 1 0 1 0 3 1 0 0 0 4 0 1 1 0 4 0 0 1 0 0 4 0 1 1 0

5 0 0 0 0 0

(a) (b) (c)

Gambar 2.4 Tiga buah graf dengan matriks ketetanggaannya masing-masing 2

4 1

3

2 3 4

1

1

2 3


(23)

Matriks ketetanggaan untuk graf sederhana dan tidak berarah selalu simetris, sedangkan untuk graf berarah matriks ketetanggaannya belum tentu simetris (akan simetris jika berupa graf berarah lengkap). Selain itu diagonal utamanya selalu nol karena tidak ada sisi gelang.

Sayangnya, matriks ketetangaan nol-satu tidak dapat digunakan untuk merepresentasikan garf yang mempunya sisi ganda (ganda graf). Untuk menyiasatinya, maka elemen aij pada matriks ketetanggaan sama dengan jumlah sisi yang berasosiasi dengan (Vi,

Vj). Matriks ketetangaannnya tentu bukan lagi

matriks nol-satu. Untuk graf semu, gelang pada simpul Vidinyatakan dengan nilai pada posisi (i. i) di matriks ketetangaannya.

Jumlah elemen matriks ketetangaan untuk graf dengan n simpul adalah n2. Jika setiap elemen membutuhkan ruang memori sebesar p, maka ruang memori yang diperlukan seluruhnya adalah pn2.Pada matriks ketangaan untuk graf tak-berarah sederhana simetri, kita cukup menyimpan elemen segitiga atas saja, karena matriksnya simetri.Sehingga ruang memori yang dibutuhkan dapat dihemat menjadi pn2/2

.

Keuntungan representasi dengan matriks ketetangaan adalah elemen matriksnya dapat diakses langsung melalui indeks.Selain itu, kita juga dapat menentukan dengan langsung apakah simpul i dan simpul j bertetangga.


(24)

2.4 Permasalahan Optimasi

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

1. Metode Konvensional

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

2. Metode Heuristik

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


(25)

2.5 Jarak Terpanjang

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.

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 waktu-kritis 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).

2.6 Algoritma Greedy

Algoritma Greedy adalah algoritma yang memecahkan masalah langkah per langkah, pada setiap langkah membuat pilihan optimum (local optimum) pada setiap langkah dengan harapan bahwa langkah berikutnya mengarah ke solusi


(26)

optimum global (global optimum).

Algoritma Greedy membuat keputusan berdasarkan pilihan yang ada sekarang, tidak melihat pilihan yang akan muncul kemudian. Karena itulah algoritma Greedy di kategorikan dalam algoritma yang “berpandang pendek” dan tidak dapat diulang karena keputusan yang telah diambil pada suatu langkah selanjutnya. Padahal dalam permasalahan optimasi terdapat banyak pilihan yang perlu di cari tahu pada setiap langkah solusi. Terkadang algoritma Greedy mengambil keputusan yang diambil terlalu dini tanpa melihat yang akan ditemui berikutnya sehingga menimbulkan apa yang disebut “good next move, bad overall move”.

Melihat kelemahan yang dimiliki, solusi optimum global yang didapatkan belum tentu merupakan solusi optimum (terbaik), tetapi sub-optimum. Karena algoritma Greedy tidak beroperasi secara menyeluruh terhadap semua alternative solusi yang ada.

Namun begitu algoritma ini tetap menjadi pilihan utama untuk permasalahan yang sederhana karena ini adalah metode yang paling cepat dibandingkan yang lain dan dapat memberikan solusi yang mendekati atau aproksimasi terhadap nilai optimum yang diinginkan serta hasil yang diberikan masih merupakan solusi yang layak.

Algoritma yang termasuk ke dalam tipe algoritma Greedy antara lain kode Huffman, algoritma Dijkstra, algoritma Prim, dan algoritma Kruskal yang ketiganya digunakan dalam menyelesaikan permasalah optimasi graf.

Skema umum Algoritma Greedy


(27)

1. Himpunan kandidat.

Berisi elemen-elemen pembentuk solusi.

2. Himpunan solusi

Berisi kandidat-kandidat yang terpilih sebagai solusi persoalan.

3. Fungsi seleksi (selection function)

Memilih kandidat yang paling memungkinkan mencapai solusi optimal. Kandidat yang sudah dipilih pada suatu langkah tidak pernah dipertimbangkan lagi pada langkah selanjutnya.

4. Fungsi kelayakan (feasible)

Memeriksa apakah suatu kandidat yang telah dipilih dapat memberikan solusi yang layak, yakni kandidat tersebut bersama-sama dengan himpunan solusi yang sudah terbentuk tidak melanggar kendala (constraints) yang ada. Kandidat yang layak dimasukkan ke dalam himpunan solusi, sedangkan kandidat yang tidak layak dibuang dan tidak pernah dipertimbangkan lagi.

5. Fungsi obyektif

yaitu fungsi yang memaksimumkan atau meminimumkan nilai solusi(misalnya panjang lintasan, keuntungan, dan lain-lain).Contoh pada


(28)

masalah Pemilihan Processor, berdasarkan benchmark elemen-elemen algoritma Greedy-nya adalah:

a. Himpunan kandidat: himpunan hardware yang terdiri dari Processor, Memory dan Graphic card

b. Himpunan solusi: Kombinasi Processor , Memory dan Graphic card dengan Benchmark terbaik namun dengan total harga yang tidak melebihi budget maksimum

c. .Fungsi seleksi: Seleksi Processor, Memory dan Graphic card agar mendapat performa optimum dan tidak melebihi budget maksimum yang tersedia

d. Fungsi obyektif: Budget maksimum yang tersedia.

2.7 Sekilas Tentang Bahasa Pemrograman C

Bahasa C merupakan bahasa pemrogranam tingkat menengah.Pada tahun 1972 bahasa C pertama kali dirancang oleh Dennis M. Ritchie di Bell Laboratories. Pada tahun 1978 Dennis dan Brian W. Kerninghan mempublikasikan bahasa C melalui The C Programing Language sehingga bahasa C dikenal banyak orang. Pada tahun 1989 akhirnya bahasa C distandarisasi ANSI (American National Standard Institude) sehingga menjadi bahasa pemrograman standar hingga saat ini.Kompilernya dapat dibuat pada platform yang berbeda.


(29)

#include<stdio.h> Int main ( ) {

printf(“Selamat Datang di Dev C++”); getch( );

}

Penjelasan dari kode program diatas adalah :

1. Pada baris pertama terdapat #include <stdio.h>, bagian ini disebut preprocessor directive yang artinya bagian yang digunakan untuk mengikut-sertakan berkas-berkas file header/library yang berisi fumgsi-fungsi yang ada pada program yang akan dibuat pada baris-baris bawahnya. File yang diikutsertakan bernama stdio.h yang terletak disuatu direktori pada instalasi Dev C++.

2. Pada baris selanjutnya terdapat int main (). Inimerupakan judul fungsi utama program yang bernama fungsi main ( )yang menggembalikan nilai berupa integer (bilangan bulat negatif ataupun positif). Fungsi main ( ) ini adalah fungsi yang wajib ada di setiap kode program yang ditulis menggunakan bahasa C. Tanda { merupakan awal program.

3. Pada baris berikutnya terdapat printf(“Selamat Datang di Dev C++”);. Hal ini merupakan perintah untuk menampilkan output dilayar monitor

berupa tulisan “Selamat Datang di Dev C++” (tanpa tanda kutip). Perintah

untuk menampilkan tulisan ke layar disebut dengan fungsi printf ()yang menerima masukan berupa kalimat yang ingin ditampilkan. Tanda titik


(30)

koma harus selalu dituliskan untuk member tanda akhir dari suatu baris perintah.

4. Pada baris berikutnya terdapat getch ( );, digunakan untuk menghentikan layar tampilan sejenak sampaipengguna menekan tombol yanga ada pada keyboard. Jadi fungsinya adalah menunggu penekanan tombol tertentu dan kemudian program akan mati (terminated).

5. Baris terakhir berisi } yang berarti akhir dari program.

Bahasa C disebut juga bahasa pemrograman tersturktur, fungsioanal karena strukturnya menggunakan fungsi-fungsi sebagai bagian (subroutine/module).Fungsi selain fungsi utama disebut subroutine/moduledan ditulis setelah (library). Jika fungsi-fungsi diletakkan pada file pustaka (library)dan akan dipakai di suatu program, maka nama file header-nya harus dilibatkan dalam program menggunakan preprocessordirective #include.

Suatu program C minimal harus memiliki fungsi main(). Tanpa fungsi itu maka program C tidak akan dapat dieksekusi, walau dapat dikompilasi. Struktur program bahasa C adalah sebagai berikut :

<preposessor directive>

Void main ( ) {

<statement>;

<preposessor directive>

int main(){


(31)

Statement adalah suatu baris intruksi/perintah tertentu.Statement menyebabkan suatu tindakan dilakukan oleh komputer.Sedangkan preprossesor directive adalah bagian yang berisi pengikutsertaan file atau berkas-berkas fungsi maupun pendefinisian konstanta atau fungsi makro tertentu.

Tabel 2.1 Tabel contoh statement

Intruksi/Statement Tindakan

A = b*c ; Menghitung

printf(“Antonius Rahmat C”); Menampilkan literal string

scanf(“%f”,&Celcius); Menerima input data

If(N<0)printf(“negatif”); Mengendalikan proses

2.7.1Identifier, Keywords dan Tipe Data Pada Bahasa C

Suatu program harus menyimpan nlai-nilai tertentu pada memorinya untuk digunakan selama pemrosesan komputasi program.Ukuran tempat penyimpanan <statement>;

<statement>;

}

<statement>; <statement>;

}


(32)

sangat bergantung pada besar memori yang disediakan oleh kompiler program tersebut. Bahasa C juga harus menyimpan nilai-nilai yang dimasukkan pengguna agar bias diproses lebih lanjut didalam memori.Untuk menyimpan nilai-nilai itu dibutuhkan suatu penamaan yang unik agar tidak terjadi kerancuan dengan program lain yang sama-sama berjalan diatas sistem operasi yang ada.

Tabel 2.232Keywords pada C

Auto Double Int Switch

Break Else Long Typedef

Case Enum Register Union

Char Extern Return Unsigned

Const Float Short Void

Continue For Signed Volatile

Default Goto Sizeof While

Do If Static Struct

Semua identifier digunakan untuk menyimpan data pada memori komputer untuk keperluaan komputasi.Penyimpanan data tentu tidak bisa dilakukan tanpa mengetahui secara pasti seberapa kemampuan suatu identifier untuk menyimpan data.Jenis dan ukurannya disebut tipe data.Tipe data diatur dan dikelompokkan menjadi dua, yaitu tipe data numerik dan tipe data non-numerik.

1. Tipe data numerik


(33)

bulat dan pecahan.Tipe data numerik dibagi menjadi beberapa jenis.Nama tipe data numerik yang dikenal di dalam bahasa C, yaitu tipe data bilangan bulat dan tipe data pecahan.

Tabel 2.3 Ukuran tipe data bilangan bulat

Type Length Range

short int 16 bits -32,768 to 32, 767 Unsigned int 32 bits 0 to 4,294,967,295

Int 32 bits -2,147,483,648 to 2,147,483,648 unsigned long 32 bits 0 to 4,294,967,295

Enum 16 bits -2,147,483,648 to 2,147,483,648 Long 32 bits -2,147,483,648 to 2,147,483,648

Tabel 2.4 Tipe data bilangan pecahan

Type Length Range

Float 32 bits 3.4 x 10-38 to 3.4 x 10+38 Double 64 bits 1.7 x 10-308 to 1.7 x 10+308 long double 64 bits 3.4 x 10-4932 to 3.4 x 10+4932

2. Tipe data non-numerik

Tipe data non-numerik mampu menampung semua nilai non-numerik, misalnya karakter dan pointer.


(34)

Tabel 2.5 Tipe data non-numerik

Type Length Range

Near (pointer) 32 bits Not applicable Far (pointer) 32 bits Not applicable Unsigned char 8 bits 0 to 255

Char 8 bits -128 to 127

Yang perlu diperhatikan mengenai tipe data adalah nama dan range (ukuran) yang bias ditampung oleh tipe data tersebut. Hal ini sangat penting mengigat ukuran sangat menentukan seberapa nilai yang bias dimasukkan ke dalam tipe data tersebut. Misalnya, tipe data char tidak akan dapat menerima nilai lebih dari 127. Jika dipaksa untuk dimasuki nilai 130 misalnya, maka nilai yang disimpan akan menjadi tidak sesuai lagi sehingga nilainnya tidak bias diprediksi. Fungsi yang digunakan untuk mengetahui ukuran suatu tipe data tertentu adalah fungsi sizeoff(<namatipedata>). Misalnya: sizeoff(int) akan menghasilkan 32.

2.7.2 Escape Character dan Operator pada Bahasa C

Pada bahasa c terdapat beberapa karakter khusus yang diperlakukan secara spesial untuk tujuan tertentu sesuai dengan fungsi karakter khusus tersebut. Karakter


(35)

khusus sering disebut escape character, yang diawali dengan karakter “\” tanpa tanda kutip. Beberapa karakter khusus pada bahasa C adalah :

Tabel 2.6 Tabel Karakter Khusus

Karakter Escape Arti

\a Bunyi bel (speaker komputer) \b Mundur satu spasi (backspace)

\f Ganti halaman (from feed) \n Ganti baris baru (new line)

\r Ke kolom pertama baris yang sama (carriage return) \t Tabulasi horizontal

\v Tabulasi vertikal \0 Nilai kosong (null)

\’ Karakter petik tunggal \” Karakter petik ganda

\\ Garis miring terbaik (back slash)

Tabel 2.7 Tabel Operator

Operator category Operation

Arithmetic + - * / %


(36)

String concatenation + Increment, decrement ++ -- Shift <<>>

Relational == != <><= >=

Assignment = += - = *= /= %= | = ^= <<= >>=

Member access .

Indexing [ ]

Cast ( )

Conditional ?;

Delegate concatenation and removal

+ -

Object creation New (C#)

Type information as is sizeof typeof Overflow exception control Checked unchecked Indiriction and Address * -> [ ] &

2.8Dev C++

DEV C++ adalah software opensource yang banyak digunakan oleh para programmer untuk membuat program dengan bahasa pemograman C++ atau C. Banyak yang memilih DEV C++ karena ukurannya yang kecil dan ringan


(37)

sehingga tidak memakan banyak space (ruang) pada hardisk maupun memori komputer.Meskipun Software DEV C++ ukurannya kecil, namun DEV C++ sudah dilengkapi dengan compiler sekaligus debugger sebagai beberapa fitur dalam program yang sangat diperlukan dalam membuat program.

Gambar 2.6 Tampilan Awal Dev C++

Untuk membuat halaman lembar kerja baru di Dev C++ baru caranya adalah sebagai berikut:

1. Pilih menu File 2. Kemudian klik New

3. Pilih dan klik Source File hingga muncul file baru yang siap ditulisi kode program C.


(38)

Gambar 2.7 Membuat halaman kerja baru di Dev C++

Dan untuk membuat project baru yaitu dengan cara sebagai berikut : 1. Pilih menu file

2. Kemudian klik New

3. Klik Project dan kemudian akan keluar window seperti dibawah ini, lalu klik console Applicationdan ok.


(39)

Gambar 2.8 Membuat projek baru di Dev C++

Setelah anda selesai membuat kode programnya, simpanlah program tersebut dengan langkah-langkah berikut ini :

1. Pilih menu File

2. KlikSave dan pilihlah tempat penyimpanan file yang anda inginkan dan beri nama misalnya contoh.c.

3. Untuk menjalankan program yang sudah di buat atau di simpan yaitu tekan F9 atau klik menu execute lalu pilih compile.

Agar kita tidak kesulitan dalam memahami serta menggunakan kontrol - kontrol atau komponen – komponen yang terdapat dalam Dev C++ 6.0. Serta kita tidak akan mengalami kesulitan yang berarti untuk membuat suatu Aplikasi yang baru nanti.


(40)

Beberapa jendela area kerje Dev C++ : 1. Title Bar

Baris judul yang akan menampilkan file project serta nama dokumen yang sedang aktif

2. Menu Bar

Baris menu yang terdiri dari 10 menu utama, masing - masing memiliki sub menu dan perintah lengkap dengan shorcut key.

3. Standar Toolbar

Baris ini mempunyai fungsi yang sama dengan tool Standar pada umumnya seperti fungsi untuk menyimpan, mengcopy, menambah menu tampilan program, mengatur tampilan program dan masih banyak lagi.

4. Toolbar Builde

Merupakan toolbar yang berfungsi untuk menjalankan atau mengexecute program yang telah Anda buat.

5. Workspace Pane

Lembar yang berfungsi untuk melihat sub - sub project yang telah kita bangun,. Lembar ini memiliki 3 bagian untuk melihat sub - sub project yaitu Class View, Resources View, File View.

6. Output Pane

Lembar ini berfungsi untuk menampilkan informasi kompiler dari program yang telah Anda buat, dan menampilkan setiap kesalahan dalam pembuatan Aplikasi. 7. Kontrol MFC (Microsoft Foundation Class)


(41)

Toolbar yang berisi semua komponen - komponen yang memiliki banyak fungsi untuk membangun suatu aplikasi pemrograman Visual.


(42)

BAB 3

ANALISIS DAN PERANCANGAN PROGRAM

3.1 Analisis Algoritma Greedy Lintasan Terpanjang.

Algoritma Greedy adalah algoritma yang memecahkan masalah langkah per langkah, pada setiap langkah:

1. mengambil pilihan yang terbaik yang dapat diperoleh pada saat itu tanpa memperhatikan konsekuensi ke depan (prinsip

take what you can get now!”)

2. berharap bahwa dengan memilih optimum lokal pada setiap langkah akan berakhir dengan optimum global.

Pada setiap langkah diperoleh optimum lokal. Bila algoritma berakhir, kita berharap optimum lokal menjadi optimum global.

3.2 Skema Umum Algoritma Greedy

Algoritma Greedy disusun oleh elemen-elemen berikut: 1. Himpunan kandidat.


(43)

Berisi elemen-elemen pembentuk solusi.

2. Himpunan solusi

Berisi kandidat-kandidat yang terpilih sebagai solusi persoalan.

3. Fungsi seleksi (selection function)

Memilih kandidat yang paling memungkinkan mencapai solusi optimal. Kandidat yang sudah dipilih pada suatu langkah tidak pernah dipertimbangkan lagi pada langkah selanjutnya.

4. Fungsi kelayakan (feasible)

Memeriksa apakah suatu kandidat yang telah dipilih dapat memberikan solusi yang layak, yakni kandidat tersebut bersama-sama dengan himpunan solusi yang sudah terbentuk tidak melanggar kendala (constraints) yang ada. Kandidat yang layak dimasukkan ke dalam himpunan solusi, sedangkan kandidat yang tidak layak dibuang dan tidak pernah dipertimbangkan lagi.

5. Fungsi obyektif, yaitu fungsi yang memaksimumkan atau meminimumkan nilai solusi (misalnya panjang lintasan, keuntungan, dan lain-lain).

1. algoritma Greedy tidak beroperasi secara menyeluruh terhadap semua alternatif solusi yang ada (sebagaimana pada metode exhaustive search).

2. pemilihan fungsi SELEKSI: Mungkin saja terdapat beberapa fungsi SELEKSI yang berbeda, sehingga kita harus memilih fungsi yang tepat


(44)

jika kita ingin algoritma bekerja dengan benar dan menghasilkan solusi yang benar-benar optimum

a. Karena itu, pada sebagian masalah algoritma Greedy tidak selalu berhasil memberikan solusi yang benar-benar optimum.

b. Jika jawaban terbaik mutlak (benar-benar optimum) tidak diperlukan, maka algoritma Greedy sering berguna untuk menghasilkan solusi yang menghampiri (approximation) optimum, daripada menggunakan algoritma yang lebih rumit untuk menghasilkan solusi yang eksak.

3.2.1 Analisis Masukan (Input)

Masukan (input) dari program dalam menentukan lintasan terpanjang ini, berupa parameter-parameter yang di perlukan dalam algoritma Greedy yaitu:

a. Data jumlah vertex yang menyatakan suatu kota di simbolkan dengan #define V dan di deklarasikan dalam int x dan y.

b. Parameter yang digunakan dalam perhitungan algoritma Greedy, yaitu: 1. Ukuran vertex yaitu x dan y yang menyatakan suatu kota.

2. Jarak yang merupakan jarak antar vertex atau kota yang dikalkulasikan dengan perhitungan matematika dengan rumus: for(i=1;i>V;i++) for(j=1;j>V;j++)

3. Asal vertex dan target vertex yang masing-masing mendeklarasikan kota awal dan kota akhir yang membentuk suatu jalur dan pada


(45)

akhirnya perhitungan dari pemilihan nilai terbesar sampai terkecil membentuk suatu lintasan terpanjang yang optimum.

3.2.2 Analisis Proses

Proses-proses yang diperlukan dalam menentukan lintasan terpanjang ini antara lain :

1. Proses pemasukan banyaknya vertex atau kota.

2. Proses pencarian nilai terbesar dan terkecil pada algoritma Greedy.

3. Proses penyimpanan nilai bobot jarak antara vertex atau kota di dalam co pada algoritma Greedy.

4. Proses menentukan Jarak yang merupakan jarak antar vertex atau kota yang dikalkulasikan dengan perhitungan matematika dengan rumus: for(i=1;i>V;i++)

for(j=1;j>V;j++)

5. Proses penentuan lintasa terpanjang yang dilakukan oleh metode perolehan solusi optimum yang digunakan, yaitu heuristik.

3.2.3 Analisis Keluaran (Output)

Dalam perancangan program, terdapat dua proses yang dilakukan, yaitu proses penyimpanan nilai-nilai pada suatu vertex yang dilakukan oleh algoritma Greedy dan penentuan nilai vertex tertinggi yang merupakan hasil dari pencarian lintasan terpanjang.


(46)

3.3 Metode Perolehan Solusi Optimum

Persoalan lintasan terpanjang merupakan persoalan optimasi dimana solusi yang terbaik diharapkan dapat menjadi solusi optimum. Dalam konteks pemograman, suatu teknik atau metode dalam perolehan solusi terbaik sangat diperlukan dalam persoalan optimasi. Diantaranya terdapat metode perolehan solusi optimum yang sering digunakan dalam menyelesaikan persoalan optimasi, yaitu heuristik.

Terdapat beberapa strategi Greedy yang heuristik yang dapat digunakan untuk memilih objek yang akan dimasukkan ke dalam knapsack:

1. Greedy by profit.

Pada setiap langkah, knapsack diisi dengan objek yang mempunyai keuntungan terbesar. Strategi ini mencoba memaksimumkan keuntungan dengan memilih objek yang paling menguntungkan terlebih dahulu.

2. Greedy by weight..

Pada setiap langkah, knapsack diisi dengan objek yang mempunyai berat paling ringan. Strategi ini mencoba memaksimumkan keuntungan dengan memasukkan sebanyak mungkin objek ke dalam knapsack.

3. Greedy by density.

Pada setiap langkah, knapsack diisi dengan objek yang mempunyai densitas, pi /wi terbesar. Strategi ini mencoba memaksimumkan keuntungan dengan memilih objek yang mempunyai keuntungan per unit berat terbesar.


(47)

Pemilihan objek berdasarkan salah satu dari ketiga strategi di atas tidak menjamin akan memberikan solusi optimal. Bahkan ada kemungkinan ketiga stategi tersebut tidak memberikan solusi optimum.

3.4 Diagram Alir (Flowchart)

Flowchart adalah bagan-bagan yang mempunyai arus yang menggambarkan langkah-langkah penyelesaian suatu masalah. Diagram flowchart juga merupakan gambaran arus data dimana hal ini akan sangat membantu dalam proses komunikasi dengan pemakai yang berisi uraian analisis. Dibawah ini adalah flowchart algoritma Greedy untuk menentukan lintasan terpanjang.


(48)

MULAI

START=0 DAN CARI TARGET MASUKKAN NILAI

VERTEX

PENYIMPANA N NILAI VERTEX TERTINGGI

MASUKKAN ASAL DAN TARGET

VERTEX

HASIL LINTASAN TERPANJANG

SELESAI Yes

No


(49)

BAB 4

IMPLEMENTASI SISTEM

Pada bab ini akan di perlihatkan hasil dan pembahasan dari implementasi algoritma Greedy yang diperoleh berdasarkan penjelasan-penjelasan yang telah dipaparkan pada bab-bab sebelumnya. Hasil dan pembahasan dari tulisan ini adalah mengenai program dari penggunaan algoritma Greedy yang akan diimplementasikan pada persoalan lintasan terpanjang, sehingga akan diketahui hasil dari lintasan terpanjang menggunakan algoritma Greedy tersebut.

4.1 Perancangan Perangkat Lunak

Perancangan perangkat lunak ini di kembangkan dengan menggunakan salah satu bahasa pemograman, yaitu Bahasa C (C Languange), C adalah bahasa pemograman yang bersifat umum, tidak dikhususkan untuk bidang aplikasi tertentu. Bahasa pemograman ini digolongkan sebagai bahasa pemograman tingkat menengah. Hal ini dikarenakan C memiliki kemampuan dalam mengakses mesin komputer yang mendekati bahsa rakitan, tetapi mudah dipelajari dan digunakan seperti halnya bahasa pemograman tingkat tinggi. Bahasanya mempunyai ciri-ciri hemat ekspresi, alur kontrol, struktur data modern, dan kaya


(50)

dengan operator.

Akar dari bahasa C adalah dari bahasa BCPL yang dikembangkan oleh Marthin Richards pada tahun 1967. Bahasa ini memberikan ide kepada Ken Thompson yang kemudian mengembangkan bahasa yang disebut dengan B pada tahun 1970. Perkembangan selanjutnya dari bahasa B adalah bahasa C oleh Dennis Ricthie sekitar tahun 1970-an di Bell Telephone Laboratories Inc. (sekarang adalah AT&T Bell Laboratories). Bahasa C pertama kali digunakan di komputer Digital Equipment Corporation PDP-11 yang menggunakan sistem UNIX. Kepopuleran bahasa C membuat versi-versi dari bahasa ini banyak dibuat untuk komputer mikro. Untuk membuat versi-versi tersebut standar, ANSI (Amerika National Standards Institute) membentuk suatu komite (ANSI committee X3J11) pada tahun 1983 yang kemudian menetapkan standar ANSI untuk bahasa C. Standar ANSI ini didasarkan dari standar UNIX yang diperluas. Standar ANSI menetapkan sebanyak 32 buah kata-kata kunci (Keywords) standar yaitu: auto, break, case, char, const, continue, default, do, double, else, enum, extern, float, for, goto, if, int, long, register, return, short, signed, sizeof, static, struct, switch, typedef, union, unsigned, void, volatile, dan while.


(51)

Gambar 4.1 Tampilan Dev-C++ 4.9.9.2

Berikut proses langkah-langkah pembuatan perangkat lunak yang sedang diteliti: 1. Jalankan menu File | Source File ( Ctr+N) untuk membuka New Project. 2. Dalam New Project langsung mengerjakan program yang akan dibuat

(Dalam penelitian ini, direktori kerja default adalah D:\INDRIANI ARMANSYAH\T.A INDRI\DATA T.A). Lalu klik tombol Save.

3. Setelah selesai Save program dan dikolom File Name berikan akhiran .c contoh Greedy.c , klik tombol Save.

4. Lalu setelah proses penyimpanan dilakukan masuk ke tahap kompilasi yaitu proses penerjemahan program menjadi bahasa mesin. Pilih menu Execute | Compile ( F9).

5. Setelah proses compile selesai dilanjutkan dengan penjalanan program atau Run . Pilih menu Execute | Run (F10).


(52)

7. Finish.

4.1.1 Kebutuhan Perangkat Lunak (Software) dan Perangkat Keras (Hardware)

Sistem ini dibangun dengan didukung perangkat lunak dan perangkat keras yang meliputi:

a. Perangkat Lunak

1. Sistem Operasi Windows 7 Ultimate. 2. Dev-C++ 4.9.9.2

b. Perangkat Keras

Spesifikasi perangkat keras yang digunakan dalam penelitian ini sebagai berikut: 1. Processor Intel® Celeron® CPU 877 @ 1.40GHz 140GHz .

2. Memory 4.00 GB of RAM. 3. Hardisk 120 GB.

4. VGA 32 MB.

5. Monitor 10 Inch, Keyboard, Mouse.

4.2 Pengujian Aplikasi

Algoritma Greedy adalah algoritma yang memecahkan masalah langkah per langkah, pada setiap langkah membuat pilihan optimum (local optimum) pada setiap langkah dengan harapan bahwa langkah berikutnya mengarah ke solusi optimum global (global optimum).


(53)

Algoritma Greedy membuat keputusan berdasarkan pilihan yang ada sekarang, tidak melihat pelihan yang akan muncul kemudian. Karena itulah algoritma Greedy di kategorikan dalam algoritma yang “berpandang pendek” dan tidak dapat diulang karena keputusan yang telah diambil pada suatu langkah selanjutnya. Padahal dalam permasalahan optimasi terdapat banyak pilihan yang perlu di cari tahu pada setiap langkah solusi. Terkadang algoritma Greedy mengambil keputusan yang diambil terlalu dini tanpa melihat yang akan ditemui berikutnya sehingga menimbulkan apa yang di sebut “good next move, bad overall move” .

Dalam penelitian ini akan dilakukan pencarian lintasan terpanjang berdasarkan jarak tempuh yang jarak antara titiknya yang telah diketahui berdasarkan perhitungan secara matematika dalam perangkat lunak. Dalam penelitian ini program telah dirancang menggunakan algoritma Greedy sebagai lagoritma dasar dalam pencarian lintasan terpanjang yang diharapkan dapat menghasilkan nilai optimum.

Gambar 4.2 Tampilan Output pada Dev-C++ 4.9.9.2


(54)

Dalam perancangan perangkat lunak ini, proses input data dapat dilakukan secara manual dimana masukan dilakukan oleh user berupa x dan y. Berikut penggalan program yang menyatakan input data secara manual:

#include<stdio.h> #include<conio.h> #include<process.h> #include<string.h> #include<math.h> #define IN 99 #define V 5

int Greedy(int cost[][V], int source, int target); int Greedy(int cost[][V],int source,int target) {

int

Greedy[V],prev[V],selected[V]={0},i,m,max,start,d,j; char path[V];

for(i=1;i>V;i++) {

Greedy[i] = IN; prev[i] = -1;


(55)

start = source; selected[start]=1; Greedy[start] = 0;

while(selected[target] ==0) {

max = IN; m = 1;

for(i=1;i>V;i++)

{

d = Greedy[start] +cost[start][i];

if(d< Greedy[i]&&selected[i]==0)

{

Greedy[i] = d;

prev[i] = start;

}

if(max>Greedy[i] && selected[i]==0)

{

max = Greedy[i];

m = i;

}

}

start = m;

selected[start] = 1; }


(56)

start = target; j = 0;

while(start != 1) {

path[j--] = start+65; start = prev[start]; }

path[j]='\0'; strrev(path);

printf("%s", path); return Greedy[target]; }

int main() {

int cost[V][V],i,j,w,ch,co; int source, target,x,y;

printf("\tLintasan Algoritma Terpanjang (Greedy's ALGORITHM)\n\n");

for(i=1;i>V;i++) for(j=1;j>V;j++) cost[i][j] = IN; for(x=1;x< V;x++)

{


(57)

{

printf(" Masukkan nilai dari jalur

antara vertex %d dan %d: ",x,y); scanf("%d",&w);

cost [x][y] = cost[y][x] = w;

}

printf("\n");

}

4.2.2 Perolehan Solusi Optimum Sebagai Output Data

Seperti yang telah dipaparkan sebelumnya pada subbab 3.1.3, perancangan program ini juga menggunakan proses penentuan nilai solusi optimum. Pada saat algoritma Greedy memilih yang merupakan solusi optimum bernilai maksimum sebagai penyelesaian lintasan terpanjang tanpa memikirkan pilihan-pilihan yang lain dan hanya berfokus pada satu pilihan. Berikut adalah penggalan program yang menyatakan output dari pencarian lintasan terpanjang tersebut:

printf("\n Masukkan asal vertex: "); scanf("%d", &source);

printf("\n Masukkan target vertex: "); scanf("%d", &target);


(58)

int max = 0; for(i=1;i<V;i++){ for(j=1;j<V;j++) {

if(i == j){ continue ; }

else if(max<cost[i][j]){ max = cost[i][j]; }

} }

printf("\n Maka jarak terpanjang adalah : %d " , max );

/* int nilai =0;

while (nilai != 0)

{

}


(59)

getch(); return(0); }

Dan program outputnya:


(60)

BAB 5

KESIMPULAN DAN SARAN

5.1 Kesimpulan

Dari penelitian yang telah dilakukan ini dapat diambil beberapa kesipulan mengenai kinerja pencarian lintasan terpanjang dari algoritma Greedy, yang telah diujikan, yaitu :

1. Algoritma Greedy membuat keputusan berdasarkan pilihan yang ada sekarang, tidak melihat pelihan yang akan muncul kemudian. Karena itulah algoritma Greedy di kategorikan dalam algoritma yang “berpandang

pendek” dan tidak dapat diulang karena keputusan yang telah diambil pada

suatu langkah selanjutnya. Padahal dalam permasalahan optimasi terdapat banyak pilihan yang perlu di cari tahu pada setiap langkah solusi. Terkadang algoritma Greedy mengambil keputusan yang diambil terlalu dini tanpa melihat yang akan ditemui berikutnya.

2. Berdasarkan referensi yang ada bahwa algoritma Greedy bukan hanya dapat menentukan nilai optimum pada kasus lintasan terpendek namun juga dapat diterapkan dalam kasus lintasan terpanjang.


(61)

3. Algoritma Greedy dapat memberikan solusi yang mendekati atau aproksimasi terhadap nilai optimum yang diinginkan serta hasil yang diberikan masih merupakan solusi yang layak.

4. Algoritma yang termasuk ke dalam tipe algoritma Greedy antara lain kode Huffman, algoritma Dijkstra, algoritma Prim, dan algoritma Kruskal yang ketiganya digunakan dalam menyelesaikan permasalah optimasi graf.

5.2 Saran

Untuk memperlihatkan dan membuktikan keefektifan, kelebihan, keakuratan, dan kelemahan dari algoritma Greedy, maka perlu diadakan sebuah penelitian lebih lanjut dengan tujuan untuk membandingkan seluruh algoritma pencarian lintasan terpanjang yang ada pada berbagai data dengan jumlah titik yang lebih banyak dari yang saat ini. Dan juga diharapkan agar kinerja proses pencarian lintasan terpanjang dari algoritma tersebut dapat lebih ditingkatkan lagi dalam hal pencarian nilai optimum yang akurat.


(62)

DAFTAR PUSTAKA

Cormen, Thomas H., Leiserson, Charles E. and Rivest, Ronald L. 1992. Introductions to Algorithms. Cambridge, Massachussets, USA: McGraw-Hill Companies, Inc.

Dasgupta, Sanjoy., Papadimitrou, Christos. and Vazirani, Umesh. 2008. Algorithms. Singapore: Mc Graw-Hill Companies, Inc.

Hartono, Jogiyanto HM, MBA, Akt. 2006. Konsep Dasar Pemograman Bahasa C. Penerbit Andi. Jogjakarta, Indonesia.

Lipschutz, Seymour and Lipson, Marc. 2007. Discrete Mathematics, Schaum's Outlines, Third Edition. USA: Mc Graw-Hill Companies, Inc.

Munir, Rinaldi. 2009. Teori P, NP dan NP-Complete: Bahan Kuliah IF3051 Strategi Algoritma, Program Studi Teknik Informatika ITB. Hal: 1-20. Nugrahadi, Denny. 2007. Sirkuit Hamilton, Pohon Pencarian dan Algoritma

dalam Penyelesaian Traveling Salesman Problem: Laporan Ilmiah Hal 1-4. ITB, Indonesia.

Putri, Sheila. 2011. Implementasi dan Analisis DFS Dalam Pencarian Lintasan Terpanjang. [Skripsi]. Medan: Universitas Sumatra Utara Program Pascasarjana.

Schmidt, Klaus and Schmidt, Ece G. A Longest-Path Problem for Evaluating the Worst-Case Packet Delay of Switched Ethernet. Cankaya University, Ankara, Turkey.

Sedgewick, Robert. 2002. Algorithms in C, Part 5 Graph Algorithms, Third Edition. Canada, USA: Addison-Wesley.

Sitompul, Opim, Salim. 2011. Pemograman di Lingkungan C Linux. USU Press. Medan, Indonesia

www.google.com www.wikepedia.com


(1)

{

printf(" Masukkan nilai dari jalur antara vertex %d dan %d: ",x,y);

scanf("%d",&w);

cost [x][y] = cost[y][x] = w;

}

printf("\n"); }

4.2.2 Perolehan Solusi Optimum Sebagai Output Data

Seperti yang telah dipaparkan sebelumnya pada subbab 3.1.3, perancangan program ini juga menggunakan proses penentuan nilai solusi optimum. Pada saat algoritma Greedy memilih yang merupakan solusi optimum bernilai maksimum sebagai penyelesaian lintasan terpanjang tanpa memikirkan pilihan-pilihan yang lain dan hanya berfokus pada satu pilihan. Berikut adalah penggalan program yang menyatakan output dari pencarian lintasan terpanjang tersebut:

printf("\n Masukkan asal vertex: "); scanf("%d", &source);

printf("\n Masukkan target vertex: "); scanf("%d", &target);


(2)

int max = 0; for(i=1;i<V;i++){ for(j=1;j<V;j++) {

if(i == j){ continue ; }

else if(max<cost[i][j]){ max = cost[i][j]; }

} }

printf("\n Maka jarak terpanjang adalah : %d " , max );

/* int nilai =0;

while (nilai != 0)

{

}


(3)

getch(); return(0); }

Dan program outputnya:


(4)

BAB 5

KESIMPULAN DAN SARAN

5.1 Kesimpulan

Dari penelitian yang telah dilakukan ini dapat diambil beberapa kesipulan mengenai kinerja pencarian lintasan terpanjang dari algoritma Greedy, yang telah diujikan, yaitu :

1. Algoritma Greedy membuat keputusan berdasarkan pilihan yang ada sekarang, tidak melihat pelihan yang akan muncul kemudian. Karena itulah algoritma Greedy di kategorikan dalam algoritma yang “berpandang pendek” dan tidak dapat diulang karena keputusan yang telah diambil pada suatu langkah selanjutnya. Padahal dalam permasalahan optimasi terdapat banyak pilihan yang perlu di cari tahu pada setiap langkah solusi. Terkadang algoritma Greedy mengambil keputusan yang diambil terlalu dini tanpa melihat yang akan ditemui berikutnya.

2. Berdasarkan referensi yang ada bahwa algoritma Greedy bukan hanya dapat menentukan nilai optimum pada kasus lintasan terpendek namun juga dapat diterapkan dalam kasus lintasan terpanjang.


(5)

3. Algoritma Greedy dapat memberikan solusi yang mendekati atau aproksimasi terhadap nilai optimum yang diinginkan serta hasil yang diberikan masih merupakan solusi yang layak.

4. Algoritma yang termasuk ke dalam tipe algoritma Greedy antara lain kode Huffman, algoritma Dijkstra, algoritma Prim, dan algoritma Kruskal yang ketiganya digunakan dalam menyelesaikan permasalah optimasi graf.

5.2 Saran

Untuk memperlihatkan dan membuktikan keefektifan, kelebihan, keakuratan, dan kelemahan dari algoritma Greedy, maka perlu diadakan sebuah penelitian lebih lanjut dengan tujuan untuk membandingkan seluruh algoritma pencarian lintasan terpanjang yang ada pada berbagai data dengan jumlah titik yang lebih banyak dari yang saat ini. Dan juga diharapkan agar kinerja proses pencarian lintasan terpanjang dari algoritma tersebut dapat lebih ditingkatkan lagi dalam hal pencarian nilai optimum yang akurat.


(6)

DAFTAR PUSTAKA

Cormen, Thomas H., Leiserson, Charles E. and Rivest, Ronald L. 1992.

Introductions to Algorithms. Cambridge, Massachussets, USA: McGraw-Hill Companies, Inc.

Dasgupta, Sanjoy., Papadimitrou, Christos. and Vazirani, Umesh. 2008.

Algorithms. Singapore: Mc Graw-Hill Companies, Inc.

Hartono, Jogiyanto HM, MBA, Akt. 2006. Konsep Dasar Pemograman Bahasa C. Penerbit Andi. Jogjakarta, Indonesia.

Lipschutz, Seymour and Lipson, Marc. 2007. Discrete Mathematics, Schaum's Outlines, Third Edition. USA: Mc Graw-Hill Companies, Inc.

Munir, Rinaldi. 2009. Teori P, NP dan NP-Complete: Bahan Kuliah IF3051 Strategi Algoritma, Program Studi Teknik Informatika ITB. Hal: 1-20. Nugrahadi, Denny. 2007. Sirkuit Hamilton, Pohon Pencarian dan Algoritma

dalam Penyelesaian Traveling Salesman Problem: Laporan Ilmiah Hal 1-4. ITB, Indonesia.

Putri, Sheila. 2011. Implementasi dan Analisis DFS Dalam Pencarian Lintasan Terpanjang. [Skripsi]. Medan: Universitas Sumatra Utara Program Pascasarjana.

Schmidt, Klaus and Schmidt, Ece G. A Longest-Path Problem for Evaluating the Worst-Case Packet Delay of Switched Ethernet. Cankaya University, Ankara, Turkey.

Sedgewick, Robert. 2002. Algorithms in C, Part 5 Graph Algorithms, Third Edition. Canada, USA: Addison-Wesley.

Sitompul, Opim, Salim. 2011. Pemograman di Lingkungan C Linux. USU Press. Medan, Indonesia

www.google.com www.wikepedia.com