9 Schoolbook, operasi perkalian yang dilakukan
adalah 4 kali. Selain
menambah banyaknya
operasi jumlah, algoritme ini juga memerlukan variabel
yang lebih
banyak untuk
melakukan perhitungan. Algoritme Karatsuba satu iterasi
adalah sebagai berikut
Input : a,b
∈ dengan k koefisien, p
Output :
=
ab 1. for i 0 to k – 1 do
2. D
i
a
i
b
i
mod p
3. end for 4. for i 0 to k – 1 do
5. for j i+1 to k – 1 6. D
i,j
a
i
+ a
j
b
i
+ b
j
mod p
7. end for 8. end for
9. c D
10. i 1 11. for i 0 to 2k – 3 do
12. c
i
0
13. if i ganjil, maka 14. for n i – i2 to i
15. l i – n 16. c
i
c
i
+ D
l,n
- D
l
– D
n
17. end for 18. else
19. for n i – i2 + 1 to i 20. l i – n
21. c
i
c
i
+ D
l,n
- D
l
– D
n
22. end for 23. c
i
c
i
+ D
i2
24. end if 25. end for
26. c
2k – 2
D
k-1
Mahfouz 2004 mengatakan bahwa salah satu hal yang mempengaruhi kecepatan
algoritme Karatsuba adalah rasio antara waktu eksekusi operasi kali dan waktu eksekusi
operasi jumlah. Rasio yang diperlukan agar algoritme
ini lebih
cepat dibandingkan
algoritme Schoolbook adalah lebih besar dari 3. Contoh untuk m = 3
misal r adalah rasio r = T
mul
T
add
T
mul
= waktu operasi kali T
add
= waktu operasi tambah kompleksitas waktu algoritme Schoolbook
T
SB
= 9T
mul
+ 4T
add
= 9r + 4 T
add
Sedangkan kompleksitas algoritme Karatsuba T
KA
= 6T
mul
+ 13T
add
= 6r + 13 T
add
Agar algoritme Karatsuba lebih cepat, maka T
SB
T
KA
9r + 4 T
add
6r + 13 T
add
9r - 6r 13 – 4 3r 9
r 3
d. Kuadrat
Operasi kuadrat pemangkatan dua adalah sebuah bentuk khusus dari perkalian. Operasi
kuadrat dapat dituliskan sebagai perkalian dengan
=
. Operasi ini didefinisikan secara khusus karena memberikan
suatu keuntungan dalam efisiensi operasi. Hasil dari operasi kali polinomial berderajat dua
dan adalah
az = +
+ bz =
+ +
=
= +
+
+
+ +
+
+
+ Jika
=
, maka hasilnya menjadi
=
= +
+
+
+ +
+
+
+ =
+
2
+
2 +
+
2
+ Perkalian dengan 2 dapat dilakukan dengan
pergeseran ke kiri sebanyak 1 bit. Dengan begitu, jumlah operasi kali menjadi lebih sedikit
dan waktu operasinya pun menjadi lebih cepat. Implementasi algoritmenya adalah sebagai
berikut
Input : a
∈ dengan k koefisien, p
Output :
=
a
2
1. for i 0 to k – 1 do 2. D
i
a
i
b
i
mod p
3. end for 4. c
D 5. i 1
6. for i 0 to 2k – 3 do 7. c
i
0
8. if i ganjil, maka 9. for n i – i2 to i
10. c
i
c
i
+ c
l
c
n
1 mod p
11. end for 12. else
13. for n i – i2 + 1 to i 14. c
i
c
i
+ c
l
c
n
1 mod p
15. end for 16. c
i
c
i
+ D
i2
10
17. end if 18. end for
19. c
2k – 2
D
k-1
e. Reduksi
Perkalian dua polinomial berderajat m pada umumnya
akan menghasilkan
polinomial berderajat 2m. Oleh karena itu, perlu dilakukan
reduksi OEF untuk memastikan hasil perkalian cz
∈
. Rumus reduksi dalam aritmetika OEF reduksi dalam
adalah ≡
+ +
Algoritme reduksi pada adalah sebagai
berikut
Input : c dengan k koefisien, m,
Output : = c mod f memastikan c ∈
1. if k m maka 2. n 0
3. for i m to k – 1 do 4. if = 2 maka
5.
+ 1
6. else 7.
+
8. end if 9. n n + 1
10. end for 11. end if
f. Pemangkatan
Fungsi ini merupakan fungsi pemangkatan pada OEF. Algoritme yang digunakan pada
fungsi ini adalah left to right exponentiation. Algoritme ini bekerja dengan menggunakan
nilai biner dari bilangan pemangkatnya k. Algoritme ini melakukan proses perkalian
polinomial sebanyak n dimana n adalah banyaknya bit k yang bernilai 1 dan melakukan
operasi kuadrat sebanyak t dimana t adalah panjang bit k. Algoritmenya adalah sebagai
berikut
Input : a
∈
, m, , k
Output : = mod f
1. c 1 2. n banyaknya bit bilangan k
3. while n 0 do 4. c c
2
mod f
5. if
[ ]
== 1 maka
6. c c.a mod f 7. end if
8. n n – 1 9. end while
Pada penelitian ini, diimplementasikan dua fungsi pangkat. Pertama adalah fungsi pangkat
yang operasi kali-nya menggunakan algoritme Schoolbook dan kedua adalah fungsi pangkat
yang operasi kali-nya menggunakan algoritme Karatsuba.
g. Invers
Invers dari
∈
, a ≠ 0, adalah
menemukan suatu
∈
sehingga ≡
1 mod f. Hankerson et al. 2004 dan Baley dan Paar 1998 menyebutkan bahwa Metode
yang paling cepat dan relatif efisien untuk menemukan invers dari polinomial
adalah algoritme Invers Itoh dan Tsujii ITI.
Algoritme ini
relatif sederhana
untuk diimplementasikan karena hanya memerlukan
beberapa operasi perkalian untuk menurunkan invers dalam
menjadi invers dalam subfield .
Algoritme tersebut menghitung =
mod f dengan
=
−
1
−
1 =
+
⋯
+ +
+ 1
≡ 1 mod maka ∈
Untuk melakukan perhitungan efisien
=
⋯
mod f digunakan pemetaan Frobenius :
→ didefinisikan dengan
=
. Jika
= +
⋯
+ +
+
Maka
:
→
+
⋯
+ +
mod f Dengan
bantuan pemetaan
Frobenius tersebut, penghitungan
dapat dilakukan secara
efisien menggunakan
algoritme addition–chain. Dalam penelitian ini, pemetaan
Frobenius hanya dilakukan sampai i = 2. Hal ini ditujukan untuk menyederhanakan algoritme
addition–chain secara
umum. Algoritme
addition–chain sendiri adalah sebagai berikut
Input : a
∈ ,
p, m, , n, c Output :
b =
=
⋯
mod f
1. div m 1 2. if m genap lakukan
3. t
1
11 4. b t
1
5. if div 1 lakukan 6. t
2
t
1
. a mod f
7. while div 1 do 8. t