Anda di halaman 1dari 3

Euclidean Algorithm

It's been a while since I write, and I kinda miss writing, but, let skip the chit chat and continue to the main problem. :) Algoritma Euclid (Euclidean Algorithm) adalah algoritma untuk menentukan "Greatest Common Divisor (GCD)" atau dalam bahasa Indonesia Faktor Pembagi Terbesar (FPB). Dari nama algoritmanya jelas siapa yang menemukan algoritma ini, seorang matematikawan Yunani yang bernama Euclid. Lalu, apa yang spesial dari Algoritma Euclid? Untuk mencari FPB hal yang mudah kan? Jika diberikan 2 buah nilai integer positif (mis: a dan b dengan a,b > 0), yang perlu dilakukan hanya mengiterasi dari nilai integer terkecil antara a dan b hingga menemukan angka yang dapat membagi habis a dan b. Cukup seperti itu kan? Well, ternyata tidak. Bayangkan jika nilai terkecil dari a dan b tersebut 1000000000 berarti iterasi yang harus dilakukan sangat banyak dan akan menghabiskan waktu yang lebih lama sehingga algoritma dengan pendekatan ini dianggap tidak efisien. Lalu bagaimana dengan Algoritma Euclid? Euclid's Algorithm didasarkan pada konsep FPB dua buah bilangan bulat positif besar dari nol tidak akan berubah walaupun nilai terkecil dari kedua bilangan tersebut digunakan untuk mengurangi nilai yang lainnya. For example, FPB dari 100 dan 85 adalah 5. FPB tersebut tidak akan berubah walaupun nilai 100 diganti dengan nilai 15 (100 -85) karena FPB dari 85 dan 15 adalah 5 juga. Dan jika nilai 85 tersebut diubah menjadi 70 (85 - 15), nilai FPBnya tidak akan berubah, tetap 5 (FPB dari 70 dan 15 adalah 5). Lalu, apa yang akan terjadi jika proses ini diteruskan? Yang terjadi adalah salah satu nilainya akan bernilai o (nol) dan yang satunya lagi akan memiliki nilai yang sama dengan FPB dari kedua nilai tersebut diawal. Berikut ini ilustrasi dari konsep ini (misalkan a = 100 dan b = 85). (a, b) -> (100, 85) -> (85, 15) -> (70, 15) -> (55, 15) -> (40, 15) -> (25, 15) -> (15, 10) -> (15, 5) -> (10, 5) -> (5, 5) -> (5, 0) Dengan melihat hasil akhir dari proses diatas dapat dibuktikan kebenaran konsep dari Algoritma Euclid. Lalu bagaimana penerapannya kedalam algoritma? Perhatikan algoritma berikut ini! Function GCD ( a, b : integer) -> integer while (b 0) do temp <- a mod b a <- b b <- temp return (a) Okay, you may say, "hey, the concept say subtract, why do you put 'mod' operator there? why not minus?". Well, that's simple. Apa yang terjadi jika suatu bilangan (X) dikurangi dengan bilangan lainnya (Y) hingga nilai X lebih kecil nilai Y? Bukankah itu sama saja dengan fungsi mod? That's the answer. Okay, sekarang kita sepakat kalau algoritma itu efisien, tapi apa hanya itu yang bisa dilakukan Euclid's algorithm? Kalau hanya itu yang bisa dilakukan maka Euclid's Algorithm tidak akan begitu spesial. Hal yang membuat Euclid's Algorithm spesial adalah pengembangannya.

Algoritma Euclid telah digunakan untuk menentukan banyak hal seperti RSA Algorithm, Public-Key Encryption, Continued Fraction, Diophantine Algorithm, dan yang lainnya. However, tulisan ini hanya akan membahas 2 jenis pengembangan dari Euclid's Algorithm. Yang pertama ialah Extended Euclid's Algorithm dan yang kedua ialah Diophantine Equation.

Extended Euclidean Algorithm


Extended Euclidean Algorithm jelas merupakan pengembangan dari algoritma Euclid. Tapi persisnya apa yang di selesaikan oleh Extended Euclidean Algorithm? Okay, Fungsi dari Extended Euclidean Algoritm ialah untuk menentukan nilai X dan Y sedemikian sehingga ax + by = gcd(a,b) dengan a,b integer positif lebih besar dari nol, serta x,y merupakan bilangan integer (tidak harus positif). Dengan kata lain, jika a = 100 dan b = 85, maka Extended Euclidean Algorithm digunakan untuk menentukan nilai X dan Y sehingga 100X + 85Y = 5. Lalu, bagaimana algoritmanya bekerja? Secara umum, Extended Euclidean memanfaatkan suatu sifat dari Euclidean Algorithm, yaitu FPB diperoleh melalui pengambilan nilai modulo (sisa bagi), sehingga dengan menyimpan hasil bagi dari a dan b akan ditemukan nilai X dan Y yang dapat membentuk persamaan ax + by = gcd(a,b). Perhatikan tabel berikut ini.

Pada bagian terakhir didapatkan persamaan 100 6 + 85 (-7) = 5, dengan kata lain, jika A = 100 dan B =85, maka X = 6 dan Y = -7 serta GCD(a,b) = 5. Persamaan ini jelas menunjukkan bahwa, dengan menggunakan Euclidean Algorithm persamaan ax + by = gcd(a,b) dapat diselesaikan. Lalu bagaimana penerapan algoritmanya? Perhatikan algoritma berikut! Function ExtendedEuclidAlgorithm ( a, b : integer) -> integer x <- 1; y <- 0 lastX <- 0; lastY <- 1 while (b 0) do modula <- a mod b quotient <- a div b a <- b b <- modula tempX <- lastX tempY <- lastY lastX <- x - quotient*lastX x <- tempX lastY <- y - quotient*lastY

y <- tempY return (x, y, b)

Diophantine Equation
Algoritma yang merupakan pengembangan selanjutnya dari Euclid Algorithm ialah Diophantine Equation. Terdapat beberapa jenis Diophantine Equation, namun yang akan dibahas pada tulisan ini ialah persamaan linear dari Diophantine Equation. Persamaan linear Diophantine Equation merupakan persamaan linear yang menentukan nilai X dan Y sedemikian sehingga AX + BY = C, dengan A, B, C merupakan bilang bulat positir lebih besar dari nol dan X, Y merupakan bilangan bulat (tidak harus positif). Sebagai catatan, terdapat nilai A, B, C yang tidak dapat membentuk Diophantine Equation. Diophantine Equation memanfaatkan kenyataan bahwa jumlah atau selisih yang dibentuk dari dua buah bilangan positif lebih dari nol merupakan kelipatan dari FPB kedua bilangan tersebut. Dengan fakta tersebut dan juga memanfaatkan Extended Euclidean Algorithm Diophantine Equation dapat dibentuk. Algoritma dari Diophantine Equation ialah sebagai berikut! Function DiophantineEquation ( a, b,c : integer) -> integer x <- 1; y <- 0 lastX <- 0; lastY <- 1 while (b 0) do modula <- a mod b quotient <- a div b a <- b b <- modula tempX <- lastX tempY <- lastY lastX <- x - quotient*lastX x <- tempX lastY <- y - quotient*lastY y <- tempY if (c mod b = 0) then return(x*(c div b), y*(c div b)) else output ("Diophanatine Equation Tidak Dapat Dibentuk") So, that's all for today, thank you for reading it. :D

Anda mungkin juga menyukai