Jurnal Evolusi Volume 5 No 1 - 2017 - evolusi.bsi.ac.id Analisa Algoritma Faktor Persekutuan Terbesar (FPB) Menggunakan Bahasa Pemrograman C++ Fitri Dwi Lestari Program Studi Manajemen Informatika, AMIK BSI Pontianak [email protected] Abstrak - The algorithm is said to be good if the algorithm can minimize the need for time and space . One type of algorithm that there is an algorithm to find the value of Greatest Common Divisor (GCD). Greatest Common Divisor (GCD) of two numbers is the largest positive integer that can divide two numbers depleted tersebut.Ada some algorithms that I use to find the value of the GCD as the Euclidean algorithm , the algorithm Stein , Brute Force algorithm , and the algorithm Dijkstra Algorithm Bishops . In this paper the authors analyze some of the algorithms used in the calculation of Greatest Common Divisor (GCD)and made in the programming language C ++ . Of some existing algorithms on calculation GCD numbers , Brute Force algorithm is quite efficient algorithms are used because we are not using complex calculations . Keywords: Algorithms, FPB, Euclidean algorithm, Stein Algorithm, Brute Force Algorithm, Dijkstra's algorithm, Bishops Algorithm Abstrak - Algoritma dikatakan baik jika algoritma dapat meminimalkan kebutuhan ruang dan waktu. Salah satu jenis algoritma yang ada algoritma untuk menemukan nilai Divisor umum Greatest (GCD). Greatest Divisor Umum (GCD) dari dua angka adalah bilangan bulat positif terbesar yang dapat membagi dua nomor habis tersebut.Ada beberapa algoritma yang saya gunakan untuk menemukan nilai GCD sebagai algoritma Euclidean, algoritma Stein, algoritma Brute Force, dan algoritma Dijkstra algoritma Uskup. Dalam tulisan ini penulis menganalisis beberapa algoritma yang digunakan dalam perhitungan Divisor umum Greatest (GCD) dan dibuat dalam bahasa pemrograman C ++. Dari beberapa algoritma yang ada pada nomor perhitungan GCD, Brute Force algoritma ini cukup efisien algoritma yang digunakan karena kita tidak menggunakan perhitungan yang rumit. Kata kunci: Algoritma, FPB, Algoritma Euclidean, Algoritma Stein, Algoritma Brute Force, Algoritma Dijkstra, Algoritma Bishop atau tahapan-tahapan yang diberikan untuk menyelesaikan suatu pekerjaan atau suatu masalah secara cepat,mudah, dan efisien. Untuk mencari sebuah FPB (Faktor Persekutuan Terbesar) dari dua buah bilangan bulat, kita dapat menggunakan beberapa algoritma diantaranya: 1. Algoritma Euclidean 2. Algoritma Stein 3. Algoritma Brute Force 4. Algoritma Dijkstra 5. Algoritma Bishops Tujuan dari penelitian ini yaitu untuk mengetahui algoritma mana yang paling mudah penggunaannya dan perhitungan yang paling singkat dalam suatu FPB (Faktor Persekutuan Terbesar), serta di buat dalam bahasa pemrograman C++. PENDAHULUAN Seperti yang diketahui bersama bahwa algoritma merupakan suatu pemecahan masalah yang sering digunakan dalam kehidupan sehari-hari, algoritma juga biasanya dijadikan alternatif pencarian /perhitungan yang banyak digunakan dalam bentuk program, karna dianggap lebih efektif dan efisien. Salah satu permasalahan yang dapat dipecahkan dengan pencarian algoritma suatu bilangan yaitu perhitungan FPB (Faktor Persekutuan Terbesar). Faktor Persekutuan Terbesar (FPB) merupakan dua bilangan bulat positif terbesar yang dapat membagi habis kedua bilangan tersebut. Dalam bahasa Inggris FPB biasa juga dikenal dengan Greatest Common Divisor (GCD). Dari perhitungan dua buah bilangan tersebut dicari persekutuan terbesar yang akan menjadi hasil akhir dari dua bilangan tersebut. Dalam memecahkan suatu masalah pencarian nilai terbesar dibutuhkan sebuah algoritma penyelesaian secara komputasi. Algortima merupakan kumpulan beberapa instruksi atau perintah yang dibuat secara jelas dalam penyelesaian suatu masalah. Kumpulan instruksi atau perintah yang dimaksud dibentuk dari suatu bahasa pemrograman yang dapat dimengerti oleh komputer. Kumpulan instruksi atau perintah tersebut berupa langkah-langkah 1. ISSN : 2338 – 8161 1.1 Algoritma Algoritma pada dasarnya merupakan alur pikiran dalam menyelesaikan suatu pekerjaan, dan dituangkan dalam bentuk tertulis yang dapat dimengerti oleh orang lain Menurut Utami dan Sukrisno (2005:20), “Algortima adalah spesifikasi urutan langkah untuk melakukan pekerjaan tertentu atau metode dan tahapan sistematis dalam program.” 63 Jurnal Evolusi Volume 5 No 1 - 2017 - evolusi.bsi.ac.id Dengan menggunakan besaran kompleksitas waktu/ruang algoritma, kita dapat menentukan laju peningkatan waktu (ruang) yang diperlukan algoritma dengan meningkatnya ukuran masukan n(1). [4] Setiap algoritma memiliki dua buah ciri khas yang dapat digunakan sebagai parameter pembanding, yaitu jumlah proses yang dilakukan dan jumlah memori yang digunakan untuk melakukan proses. Jumlah proses ini dikenal sebagai kompleksitas waktu yang disimbolkan dengan T(n), diukur dari jumlah tahapan komputasi yang dibutuhkan untuk menjalankan algoritma sebagai fungsi dari ukuran masukan n, dimana ukuran masukan (n) merupakan jumlah data yang diproses oleh sebuah algoritma. Sedangkan jumlah memori dikenal sebagai kompleksitas ruang yang disimbolkan dengan S(n), diukur dari memori yang digunakan oleh struktur data yang terdapat didalam algoritma sebagai fungsi dari masukan n. Dengan menggunakan kompleksitas waktu atau kompleksitas ruang, dapat ditentukan laju peningkatan waktu atau ruang yang diperlukan algoritma, seiring dengan meningkatnya ukuran masukan (n). Dalam setiap algoritma, terdapat berbagai jenis operasi, di antaranya : a. Operasi baca tulis. b. Operasi aritmatika (+ - / *) c. Operasi pengisian nilai (assignment) d. Operasi pengaksesan elemen larik e. Operasi pemanggilan fungsi ataupun prosedur Menurut Rinaldi (2007:4), “Algoritma merupakan prosedur komputasi yang terdefinisi dengan baik yang menggunakan bebebrapa nilai sebagai masukan dan menghasilkan beberapa nilai yang disebut keluaran atau lebih detailnya disimpulkan bahwa algortima adalah deretan langkah komputasi yang mentransformasikan masukan menjadi keluaran.” Menurut Donald Kunth dalam buku Suarga (2012:4), Sebuah algorima juga harus memenuhi kriteria sebagai berikut: 1. Input Suatu algoritma memiliki input atau kondisi awal sebelum dilaksanakan, bisa berupa nilai-nilai peubah yang diambil dari himpunan kusus. 2. Output Suatu algoritma akan mengahsilkan output setelah dilaksanakan atau algoritma akan mengubah kondisi awal menjadi kondisi akhir, dimana nilai output diperoleh dari nilai input yang telah diproses melalui algoritma. 3. Definiteness Langkah-langkah yang dituliskan dalam algoritma terdefinisi dengan jelas sehingga mudah dilaksanakan oleh pengguna algoritma. 4. Finiteness Suatu Algoritma harus memberi kondisi akhir setelah jumlah langkah yang terbatas jumlahnya dilakukan terhadap setiap kondisi awal atau input yang diberikan. 5. Effectiveness Setiap langkah dalam algoritma bisa dilaksanakan dalam suatu selang waktu tertentu sehingga pada akhirnya didapatkan suatu yang diharapkan. 6. Generality Setiap langkah alhoritma berlaku untuk setiap himpunan input yang sesuai dengan persoalan yang diberikan, tidak hanya untuk himpunan tertentu. Bedasarkan kodisi dari kompleksitas algortima ada 3 kondisi yang dilihat dari beberapa kasus yaitu : a. Kondisi Best Case Waktu tempuh yang bernilai minimum dari suatu fungsi F(N) untuk setiap input atau disebut juga suatu keadaan yang terbaik dari suatu proses di dalam algoritma. b. Kondisi Worst Case Waktu tempuh yang bernilai maksimum dari suatu fungsi F(N) untuk setiap input atau keadaan ini disebut juga dengan keadaan analog terburuk. 1.2 Kompleksitas Algoritma Terdapat dua macam kompleksitas algoritma, yaitu Kompleksitas waktu dan kompleksitas ruang. Kompleksitas waktu disimbolkan dengan T(n) dan kompleksitas ruang S(n). Kompleksitas waktu, T(n), diukur dari jumlah tahapan komputasi yang dibutuhkan untuk menjalankkan algoritma sebagai fungsi dari ukuran masukan n. Komplesitas ruang, S(n) diukur dari memori yang digunakan oleh struktur data yang terdapat di dalam algoritma sebagai fungsi dari ukuran masukan n. ISSN : 2338 – 8161 c. Kondisi Avarage Case Merupakan suatu keadaan dari suatu waktu tempuh yang equivalen dengan nilai eksperimentasi dari fungsi F(N) untuk setiap input.[5] 1.3 FPB (Faktor Persekutuan Terbesar) Menurut Erna (2011:7), “FPB adalah singkatan dari Faktor Persekutuan Terbesar. 64 Jurnal Evolusi Volume 5 No 1 - 2017 - evolusi.bsi.ac.id Karena sisa terakhir adalah nol maka FPB dari 275 dan 51 adalah sisa sebelumnya yaitu 1. Faktor Persekutuan Terbesar (FPB) dari dua bilangan adalah bilangan bulat positif terbesar yang dapat membagi habis kedua bilangan tersebut. Dalam bahasa Inggris FPB biasa juga dikenal dengan Greatest Common Divisor (GCD).” FPB(797, 522); 797 =1.522 + 275 522=1.275 + 247 1.4 Algoritma Euclidean Algoritma Euclidean adalah metode yang efisien untuk menghitung pembagi umum terbesar (FPB) dari dua bilangan bulat tanpa meninggalkan sebuah sisa. Algoritma Euclidean juga memiliki aplikasi teoritis dan praktis. Algoritma ini adalah elemen kunci dari algoritma RSA, sebuah enkripsi public-key metode yang luas digunakan dalam perdagangan elektronik. Hal ini digunakan untuk memecahkan persamaan Diophantine, Algoritma Euclidean juga dapat digunakan dalam metode rantai untuk mencari akar Sturm nyata dari polinomial, dan dalam beberapa algoritma faktorisasi bilangan bulat yang modern. Konsep dari Algoritma Euclidean ini adalah menghitung bilangan yang lebih besar (m) dibagi dengan bilangan yang lebih kecil (n). Hasil sisa pembagian m dan n disimpan dalam sebuah bilangan r. Kemudian m diisi dengan nilai n dan n diisi dengan nilai r. Jika hasil sisa pembagian m dan n belum nol maka lakukan terus perulangan pembagian hingga sisanya nol. 1. Jika n=0 maka m adalah FPB(m,n); stop. Tetapi jika n ≠ 0 Lanjutkan ke langkah 2. 2. Bagilah m dengan n dan misalkan r adalah sisanya. 3. Ganti nilai m dengan nilai n dan nilai n dengan nilai r, lalu ulang kembali ke langkah 1. [4] 275 =1.247 + 28 247 =1.28+ 23 28 = 1.23 + 5 23 = 4. 5 + 3 5 = 1. 3 + 2 3 = 1. 2 + 1 2 = 1.1 + 1 1 = 1.1 + 0 Karena sisa terakhir adalah nol maka FPB dari 797 dan 522 adalah sisa sebelumnya yaitu 1. 1.5 Algoritma Stein Algoritma Stein(Algoritma FPB Biner) adalah algoritma yang menghitung pembagi umum terbesar dari dua bilangan bulat nonnegatif dengan menerapkan identitas-identitas secara berulang kali.[3] Konsep algoritma ini dipakai identitas yang berulang sebagai berikut: 1. gcd(0, v) = v, karena bilangan apapun membagi 0 dan v adalah bilangan terbesar yang membagi v. Sama halnya, gcd(u, 0) = u. gcd(0, 0) tidak dapat didefinisikan. 2. Jika u and v keduanya genap, maka gcd(u, v) = 2·gcd(u/2, v/2), karena 2 adalah pembagi keduanya. 3. Jika u genap dan v ganjil, maka gcd(u, v) = gcd(u/2, v), karena 2 bukan pembagi keduanya. Sama halnya, jika u ganjil dan v genap, maka gcd(u, v) = gcd(u, v/2). 4. Jika u dan v keduanya ganjil, dan u ≥ v, maka gcd(u, v) = gcd((u−v)/2, v). Jika keduanya ganjil dan u < v, maka gcd(u, v) = gcd((v-u)/2, u). Ini merupakan kombinasi satu langkah dari algoritma Euclid, yang menggunakan pengurangan setiap langkah, dan sebuah aplikasi dari langkah 3. Pembagian oleh 2 menghasilkan sebuah integer karena perbedaan dari dua angka ganjil adalah genap. 5. Ulangi langkah 3–4 sampai u = v, (atau satu langkah lagi) sampai u = 0. Dalam kasus ini, hasilnya adalah 2kv, di mana k Contoh: FPB (275,51); 275=5.51+ 20 51 = 2.20 + 11 20 = 1.11 + 9 11 = 1.9 + 2 9 = 4.2 + 1 2 = 1.1 + 1 1 = 1.1 + 0 ISSN : 2338 – 8161 65 Jurnal Evolusi Volume 5 No 1 - 2017 - evolusi.bsi.ac.id adalah faktor dari 2 yang ditemukan di langkah 2. [4] Contoh: Mencari FPB(2132, 2541); 1. FPB(2132, 2541) 2. FPB(2132, 2541) 3. FPB(1066, 2541) 4. FPB(533, 2541) 5. FPB(533, 1004) 6. FPB(533, 502) 7. FPB(533, 201) 8. FPB(166,201) 9. FPB(83,201) 10. FPB(83,59) 11. FPB(12,59) 12. FPB(6,59) 13. FPB(3,59) 14. FPB(3,28) 15. FPB(3,14) 16. FPB(3,7) 17. FPB(3,2) 18. FPB(3,1) 19. FPB(1,1) 2 1 GCD = 1 1.7 Algoritma Dijkstra Algoritma ini dikembangkan oleh Dijkstra yang merupakan ahli matematika Belanda dan seorang ilmuwan komputer . Konsep algoritma ini adalah : jika m > n , maka GCD ( m-n, n ) . dan jika m<n, maka GCD (M, N-M) Algoritma ini dikatakan baik bahwa ia menggunakan algoritma struktur data rekursi [1] Algoritma: For m,n>0, GCD(m,n)= m if m=n GCD(m-n,n) Maka FPB(2132, 2541 )=FPB(1,1)=1. 1.6 Algoritma Brute Force Brute force adalah sebuah pendekatan yang lempang (straightforward) untuk memecahkan suatu masalah (problem statement) dan definisi konsep yang dilibatkan Algoritma brute force memecahkan masalah dengan sangat sederhana, langsung, dan dengan cara yang jelas (obvious way) meskipun bukan merupakan solusi yang paling mangkus. Algoritma ini digunakan untuk menghitung bilangan bulat positif mulai dari n hingga kebawah sampai menemukan satu bilangan yang dapat membagi m dan n secara merata. Algoritma: 1- Gunakan dua bilangan positif m,n , dimana m<n. 2- Nilai i = m. 3- While (m mod i <> 0 or n mod i <> 0) do i=i-1; GCD = i; .[1] N I 4 11 4 N GCD 250 100 GCD (250,100) 150 100 GCD (150,100) 50 100 GCD (50,100) 50 50 GCD (50,50) 1.8 Algoritma Bishop’s Konsep dari algoritma Bishop’s ini adalah jika angka bilangan besar dan kecil keduanya kelipatan k , maka besar - kecil merupakan kelipatan dari k. Catatan: besar - kecil lebih kecil dari yang besar , jadi kami telah mengurangi masalah dan lebih mudah untuk dipecahkan. Algoritma: 1. Masukkan dua bilangan bulat positif x,y 2. While ( x <> y ) If (x>y) then X=x-y Else { temp = y y=x x=temp } Return(x) [1] 3 ISSN : 2338 – 8161 Contoh : m FPB = 5 Contoh : M if m>n 66 Jurnal Evolusi Volume 5 No 1 - 2017 - evolusi.bsi.ac.id Contoh: X Y 50 60 60 50 10 50 50 10 40 10 30 10 20 10 10 10 Gambar 1. Implementasi Program Algoritma Euclidean 3.1.2 Algoritma Stein Berikut adalah penerapan algoritma Stein menggunakan antar muka bahasa pemrograman C++, perhitungan menggunakan algoritma Stein pada C++: FPB = 10 1.9 Pemrograman C++ Menurut Joni dan Raharjo (2011:3) mengemukakan bahwa bahasa C merupakan bahasa yang powerful dan fleksibel yang telah terbukti dapat menyelesaikan programprogram besar seperti pembuatan system operasi, pengolah kata, pengolahan gambar (seperti pembuatan game) dan juga pembuatan kompilator untuk bahasa pemrograman baru. Joni dan Raharjo (2011:3) mengemukakan bahwa bahasa C merupakan bahasa yang portabel sehingga dapat dijalankan di beberapa sistem operasi yang berbeda. Sebagai contoh program yang kita tulis dalam sistem operasi Windows dapat kita kompilasi di dalam sistem operasi Linux dengan sedikit ataupun tanpa perubahan sama sekali. Gambar 2. Implementasi Program Algoritma Stein 3.1.3. Algoritma Brute Force Berikut adalah penerapan algoritma Brute Force menggunakan antar muka bahasa pemrograman C++, perhitungan menggunakan algoritma Brute Force pada C++: Gambar 3. Implementasi Program Algoritma Brute Force 3.1.4. Algoritma Dijkstra Berikut adalah penerapan algoritma Dijkstra menggunakan antar muka bahasa pemrograman C++, perhitungan menggunakan algoritma Dijkstra pada C++: PEMBAHASAN Pada pembahasan ini akan membahas tentang implementasi algoritma yang digunakan dalam perhitungan FPB dengan menggunakan bahasa pemrograman C++ . 3.1 Implementasi Program 3.1.1 Algoritma Euclidean Berikut adalah penerapan algoritma euclidean menggunakan antar muka bahasa pemrograman C++, perhitungan menggunakan algoritma Euclidean pada C++: 2. Gambar 4. Implementasi Program Algoritma Dijkstra ISSN : 2338 – 8161 67 Jurnal Evolusi Volume 5 No 1 - 2017 - evolusi.bsi.ac.id 2010/Makalah0910/MakalahStrukdis0910032.pdf , Diakses 20 Januari 2016) [6] Suarga. 2012. Algoritma dan Pemrograman. Yokyakarta: Andi. [7] Utami,Sukrisno. 2005. 10 Langkah Belajar Logika dan Algoritma Menggunakan Bahasa C dan C++ di GNU/Linux. Yokyakarta: Andi [8] Widhaprasa. 2007. Penerapan Algoritma Brute Force Dalam Mencari Faktor Prima Pada Suatu Bilangan (http://informatika.stei.itb.ac.id/~rinaldi.mu nir/Stmik/20102011/Makalah2010/MakalahStima2010103.pdf, Diakses 19 Januari 2016) 3.1.5. Algoritma Bishops Berikut adalah penerapan algoritma Bishops menggunakan antar muka bahasa pemrograman C++, perhitungan menggunakan algoritma Bishops pada C++: Gambar 4. Implementasi Program Algoritma Bishops 3. KESIMPULAN Dari hasil analisis tiap algoritma dalam menghitung nilai FPB dapat disimpulkan: 1. Diantara lima algoritma dalam proses perhitungan Faktor Persekutuan Terbesar (FPB), algoritma Brute Force adalah algoritma yang sederhana dan mudah untuk dipahami, karna proses perhitungannya hanya mencari sisa bagi antara dua bilangan bulat positif. 2. Algoritma Stein memerlukan perhitungan yang kompleks dan cukup rumit untuk dipahami dibandingkan dengan algoritma lainnya. 3. Dari kompilasi yang dilakukan menghasilkan output yang sama tetapi dengan proses yang berbeda dari setiap algoritma yang digunakan. 4. DAFTAR PUSTAKA [1] Altarawneh. 2011 . A Comparison of Several Greatest Common Divisor(GCD) Algorithms. Volume 26-No.5, Juli 2011 (http://www.ijcaonline.org/volume26/numb er5/pxc3874253.pdf, Diakses 20 Januari 2016) [2] Himawati,Erna. 2011. Menghitung Faktor Persekutuan Terbesar(FPB) dan Kelipatan Persekutuan Terkecil (KPK). Jakarta: Be Champion. [3] Joni, Budi Raharjo. 2011. Pemrograman C dan Implementasinya. Bandung: Informatika. [4] Okharyadi. 2007. Kompleksitas Algoritma Euclidean dan Stein(FPB Biner)(http://informatika.stei.itb.ac.id/~rinal di.munir/Matdis/20112012/Makalah2011/Makalah-IF20912011-077.pdf, , Diakses 20 Januari 2016) [5] Ryan Rheinadi. 2010. Analisis Algoritma Bubble Sort (http://informatika.stei.itb.ac.id/~rinaldi.mun ir/Matdis/2009ISSN : 2338 – 8161 68