Analisa Algoritma Faktor Persekutuan Terbesar (FPB) - E

advertisement
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 
Download