• Tidak ada hasil yang ditemukan

2.1 Pengertian Algoritma - Menentukan Minimum Spannning Tree Menggunakan Algoritma Kruskal Dengan Bahasa Pemrograman C

N/A
N/A
Protected

Academic year: 2019

Membagikan "2.1 Pengertian Algoritma - Menentukan Minimum Spannning Tree Menggunakan Algoritma Kruskal Dengan Bahasa Pemrograman C"

Copied!
25
0
0

Teks penuh

(1)

BAB 2

LANDASAN TEORI

Bab ini akan menjelaskan masalah-masalah teoritis yang berkaitan dalam pembuatan program menentukan Minimum Spanning Tree menggunakan algoritma Kruskal dengan bahasa pemrograman C

2.1 Pengertian Algoritma

(2)

2.2 Sejarah Graf

Menurut catatan sejarah, masalah jembatan Konigsberg adalah masalah yang pertama kali mengggunakan graf (tahun 1736). Di kota Konigsberg (sebelah timur negara bagian Prussia, Jerman), sekarang bernama kota Kaliningrad, terdapat sungai Pregal yang mengalir mengitari pulau Kneiphof lalu bercabang menjadi dua buah anak sungai. Ada tujuh buah jembatan yang menghubungkan daratan yang dibelah oleh sungai tersebut. Masalahnya adalah apakah mungkin melalui ketujuh buah jembatan itu masing-masing tepat satu kali, dan kembali lagi ke tempat semula? Tahun 1736, seorang matematikawan Swiss, L.Euler, adalah orang pertama yang berhasil menemukan jawaban masalah itu dengan pembuktian yang sedrhana. Ia memodelkan masalah ini ke dalam graf. Daratan (titik-titik yang dihubungkan oleh jembatan) dinyatakannya sebagai titik(noktah) – yang disebut simpul(vertex)- dan jembatan dinyatakan sebagai garis yang disebut(edge). Karena tidak semua simpul berderajat genap, maka tidak mungkin dilakukan perjalanan beberapa sirkuit(yang dinamakan sirkuit Euler) pada graf tersebut.

2.3 Teori Graf

(3)

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 bilangan 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)

2.3.1 Graf Sederhana (Simple Graph)

(4)

2.3.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.

2.3.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 produksi, dan sebagainnya.

(5)

2.4 Pohon(Tree)

Graf terhubung yang tidak mengandung sirkuit disebut pohon. Diantara sekian banyak konsep dalam teori graf, konsep pohon (tree)mungkin merupakan konsep yang paling penting, karena terapannya yang luas dalam berbagai ilmu komputer, yang telah mengkaji pohon secara intensif sebagai objek matematika.

Dalam kehidupan sehari-hari, orang telah lama menggunakan pohon untuk menggambarkan hirarkhi. Misalnya, pohon silsilah keluarga, struktur organisasi, organisasi pertandingan, dan lain-lain. Para ahli bahasa menggunakan pohon untuk menguraikan kalimat, yang disebut pohon parsing (parse tree).

2.5 Pohon Merentang

(6)

G T1 T2 T3 T4

Gambar 2.1Graf lengkap G dan empat buah pohon merentangnya, T1, T2, T3,

dan T4

(7)

2.6 Graf Berlabel

Hubungan antara titik-titik dalam graf kadang-kadang perlu diperjelas. Hubungannya tidak cukup hanya menunjukkan titik-titik mana yang berhubungan langsung, tetapi juga seberapa kuatkah hubungan itu. Sebagai contoh, andaikata suatu graf menyatakan “peta” suatu daerah. Titik-titik graf menyatakan kota-kota di daerah

tersebut. Garis-garis dalam graf menyatakan jalan yang menghubungkan kota-kota tersebut. Informasi tentang peta daerah sering kali perlu diperjelas dengan mencantumkan juga jarak (yang dinyatakan dengan angka pada garisnya) antara 2 kota yang berhubungan. Informasi tentang jarak itu dibutuhkan karena dalam graf, letak titik dan panjang garisnyatidak menyatakan jarak 2 kota yang sebenarnya seperti halnya dengan peta. Jadi, setiap garis dalam graf berhubungan dengan suatu label yang menyatakan suatu bobot garis tersebut.Label suatu garis dapat dapat diberikan pada graf berarah maupun tidak berarah. Jika diberikan graf tidak berarah, maka grafnya disebut graf berlabel. Sedangkan jika diberikan pada graf berararh, maka grafnya disebut graf berarah berlabel.

2.7 Pohon Merentang Minimum

(8)

minimum mempunyai terapan yang luas dalam praktek. Misalkan Pemerintah akan membangun jalur kereta api yang menghubungkan sejumlah kota, membangun jalur rel kereta api biaya nya mahal, karena itu pembangunan jalur ini tidak perlu menghubungkan langsung dua buah kota, tetapi cukup membangun jalur kereta seperti pohon merentang. Karena di dalam graf mungkin saja terdapat lebih dari satu pohon merentang, harus dicari pohon merentang yang mempunyai jumlah jarak terpendek, dengan kata lain harus dicari pohon merentang minimum.

d

2.8 Aplikasi Minimum Spanning Tree

Aplikasi yang sering dipakai dalam graf berlabel adalah mencari pohon rentang dengan total bobot seminimum mungkin atau disebut pohon merentang minimum. Jika semua jaringan listrik dibuat terlalu banyak maka biaya akan boros. Beberapa

Gambar 2.2 (a) Graf yang menyatakan jaringan jalur rel kereta api. Bobot pada tiap sisi

menyatakan panjang rel kereta api (x 100 km)

(9)

jalur yang menghubungkan 2 kota secara langsung tidak perlu dibuat karena kota-kota tersebut tetap dapat teraliri listrik secara tidak langsung, yaitu dengan melalui kota lain sedemikian hingga total biaya pemasangan jaringan listrik seminimum mungkin. Atau dengan kata lain, mencari pohon rentang dengan total bobot seminimum mungkin. Cara yang paling sederhana adalah dengan mendaftarkan semua pohon rentang yang mungkin dibuat dan menghitung total bobot tiap-tiap pohon rentang. Selanjutnya dipilih pohon rentang dengan total bobot yang paling kecil. Metode itu tidak efisien, terutama pada graf yang cukup besar karena terdapat banyak sekali pohon rentang yang dapat dibuat.

2.9 Algoritma Kruskal

Algoritma Kruskal adalah algoritma dalam teori graph yang menemukan suatu pohon rentang minimum untuk terhubung dalam graf berbobot . Ini berarti menemukan subset dari tepi yang membentuk sebuah pohon yang mencakup setiap titik , di mana berat total dari semua tepi di atas pohon diminimalkan.. Jika grafik tidak terhubung, maka menemukan hutan rentang minimum (pohon rentang minimum untuk setiap komponen terhubung ). Algoritma Kruskal adalah contoh dari algoritma rakus . Algoritma ini pertama kali muncul dalam Prosiding American Mathematical Society , hal 1956. Algoritma lain untuk masalah ini termasuk Algoritma Prim , Reverse-Hapus algoritma , dan algoritma Borůvka's.

(10)

T adalah sisi graf G sedemikian sehingga T adalah pohon. Pada keadaan awal, sisi-sisi sudah diurut berdasarkan bobot membentuk hutan(forest), masing-masing pohon di hutan hanya berupa satu buah simpul. Hutan tersebut dinamakan hutan merentang (spanning forest). Sisi dari graf G ditambahkan ke T jika ia tidak membentuk siklus di T. Pohon adalah graf tak-berarah terhubung yang tidak mengandung sirkuit. Sisi-sisi dari graf sudah diurut menaik berdasarkan bobotnya, yaitu :

1. T masih kosong

2. Pilih sisi e dengan bobot minimum yang tidak membentuk sirkuit di T. Masukkan

e ke dalam T.

3. Ulangi langkah 2 sebanyak n-1 kali.

Contoh 2.1

Carilah pohon merentang minimumnya dengan algoritma Kruskal.

Penyelesaian:

Sisi-sisi graf diurut menaik berdasarkan bobotnya:

Langkah-langkah pembentukan pohon merentang minimum diperlihatkan pada Tabel 2.1.

Bobot pohon merentang minimum ini adalah 10 + 25 + 15 + 20 + 25 = 105

Sisi (1,2) (3,6) (4,6) (2,6) (1,4) (3,5) (2,5) (1,5) (2,3) (5,6)

(11)

Langkah Sisi Bobot Pohon Merentang

Tabel 2.1 Pembentukan pohon merentang minimum dengan algoritma Kruskal

(12)

Ada satu lagi algoritma yang membangun pohon merentang minimum yang hampir mirip dengan algoritma Kruskal yaitu algoritma Prim. Dibawah ini akan dijelaskan tentang algoritma Prim.

2.10 Algoritma Prim

Misalkan T adalah pohon merentang yang sisi-sisinya diambil dari graf G. Algoritma Prim membentuk pohon merentang minimum langkah per langkah. Pada setiap langkah kita mengambil sisi e dari graf G yang mempunyai bobot minimum dan bersisian dengan simpul-simpul di dalam T tetapi etidak membentuk sirkuit di dalam T. Cara mencari Algoritma Prim :

1. Ambil sisi dari graf G yang berbobot minimum, masukkan ke dalam T.

2. Pilih sisi e yang mempunyai bobot minimum berisikan simpul di T, tetapi e tidak membentuk sirkuit di T. Masukkan e ke dalam T.

3. Ulangi 2 sebanyak n-2 kali.

2.11 Pengertian Komputer

(13)

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:

a. Menerima masukan data

b. Memproses masukan sesuai dengan programnya.

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

2.12 Sejarah Singkat C

Bahasa C merupakan bahasa pemrograman 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 ProgramingLanguage 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.

2.13 Mengenal Pemrograman

(14)

menyelesaikan sebuah persoalan. Agar komputer dapat melaksanakan tugas tersebut, sesorang yang membuat program (disebut programmer) hendaklah mengetahui langkah-langkah yang diperlukan untuk memperoleh penyelesaian yang diinginkan. Langkah-langkah untuk menyelesaikan suatu persoalan ini disebut algoritma. Instruksi yang ditulis dalam bahasa pemrograman itu disebut source code atau source program, instruksi tersebut yang dapat dibaca oleh manusia(human-readable).

2.14 Pembahasan Bahasa Pemrograman C

Dibawah ini adalah contoh sederhana program menggunakan bahasa C, beserta penjelasan kode program :

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 fungsi-fungsi yang ada pada program yang akan dibuat pada baris-baris bawahnya. File yang diikutsertakan bernama stdio.h yang terletak di suatu direktori pada instalasi DevC++.

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

(15)

2. Pada baris selanjutnya terdapat int main(). Ini merupakan judul fungsi utama program yang bernama fungsi main() yang mengembalikan nilai berupa integer(bilangan bulat negatif ataupun positif). Mengenai tipe data integer akan dibahas di bagian-bagian berikutnya. Fungsi main() ini adalah fungsi yang wajib ada di setiap kode program yang ditulis menggunakan bahasa C. Tanda { merupakan tanda 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 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.

(16)

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>

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.2Tabel 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

(17)

Suatu program harus menyimpan nlai-nilai tertentu pada memorinya untuk digunakan selama pemrosesan komputasi program. Ukuran tempat penyimpanan sangat bergantung pada besar memori yang disediakan oleh kompiler program tersebut. Bahasa C juga harus menyimpan nilai-nilai yang dimasukkan pengguna agar bias diroses 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.3 Keywords 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.

(18)

Tipe data ini mampu menampung semua nilai numeric mulai dari bilangan 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.4Ukuran 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.5 Tipe data bilangan pecahan

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

Tabel 2.6Tipe data non-numerik

(19)

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.14.2 Escape Character pada Bahasa C

(20)

Tabel 2.7 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)

2.15 Dev C++

(21)

Gambar 2.4Tampilan 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

(22)

Gambar 2.5 Tampilan membuat project baru

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

2. Kemudian klik New

(23)

Gambar 2.6Cara Menyimpan Program

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.

(24)

Gambar 2.7Jendela area kerja Dev C++

Beberapa jendela area kerja 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

(25)

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)

Gambar

Gambar 2.1 Graf lengkap G dan empat buah pohon merentangnya, T1, T2, T3,
Gambar 2.2  (a) Graf yang menyatakan jaringan jalur rel kereta api. Bobot pada tiap sisi
Tabel 2.1 Pembentukan pohon merentang minimum dengan algoritma Kruskal
Gambar 2.3 Struktur Program C
+7

Referensi

Dokumen terkait

4.11Menyusun teks lisan dan tulis, untuk menyatakan dan menanyakan tentang tindakan/ kegiatan/kejadian tanpa perlu menyebutkan pelakunya dalam report text,

Jl. Dasa Darma No. Raya Narogong No. RSIA SRITINA) Jl. Imam Bonjol No. 80 Cikarang Barat - Bekasi. Kaliabang Tengah No. Cikarang Utara Bekasi Jawa Barat T. Raya Harapan Indah,

Dari sisi wisata, daerah gunung muria ini memiliki beberapa wisata alam yang berdekatan dengan lokasi museum, sehingga wisatawan juga dapat mengunjungi wisata

Hasil penelitian ini berujung pada beberapa pertanyaan besar yaitu, (1) Apakah prestasi belajar siswa sekolah unggulan diakibatkan oleh kemampuan guru dalam mengajar

Untuk menjawab rumusan masalah dan hipotesis yang telah dikemukakan terhadap peningkatan sikap peduli lingkungan antara siswa yang memperoleh pembelajaran dengan

Sarana belajar lengkap yang ada di sekolah tidak memberikan pengaruh yang lebih baik terhadap hasil belajar dibandingkan sarana belajar tidak lengkap bagi siswa yang

Membandingkan jumlah ekspresi TNF-α, IL-1, dan IL-10 pada lesi dan non-lesi kulit dengan pemeriksaan imunohistokimia, dan hubungan jumlah ekspresi TNF-α, IL-1, dan

Penganggaran merupakan rencana manajemen yang mengandung implikasi perlunya komitmen dan tanggung jawab untuk mencapai angka yang ditetapkan dalam anggaran,