Thuật toán nhân cơ bản (Standard MultiplicationAlgorithm)[7] xem xét 2 số a và b là 2 số gồm s-chữ số (s-words) được biểu diễn dưới dạng cơ số W như sau:
ở đây, ai, bjtrong khoảng [0, W-1].
Thuật toán thực thi theo các bước cụ thể như sau:
- Tại mỗi bước sẽ thực thi nhân theo từng số bjvới các số aitương ứng - Sau đó thực hiện phép cộng
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
trong đó, tij= (Carry, Sum) của phép nhân ai * bj. Dòng cuối cùng thể hiện giá trị của phép nhân, giá trị này gồm 2s-words.
Dưới đây là chi tiết thuật toán nhân cơ bản:
Thuật toán nhân Standard Multiplication Standard Multiplication (A, B, s)
{
Khởi tạo ti = 0 for all i=0,1,…,2s-1;
For (i = 0; i< s; i++) { C = 0; For (j = 0; j < s; j++) (C, S) = ti+j + aj*bi + C; ti+j = S; ti+s = C; } return (t2s-1, t2s-2,…,t0); };
Hình 3.8Thuật toán nhân chuẩn
Sau đây là ví dụ cụ thể thực thi từng bước của thuật toán cơ bản này cho phép nhân:
a*b = 348 * 857
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
(C, S) = ti+j + aj*bi + C;
Mỗi biến ti+j, aj, bi, C, và S là các số gồm W-bits. Bước này gồm 1 phép nhân (*) 2 số
W-bits và 2 phép cộng (+) với các số gồm W-bits. Vì vậy giá trị lớn nhất cho phép toán tính biểu thức ở bước này là một số 2W-bits:2W– 1 + (2W– 1) (2W– 1) + 2W– 1 = 22W– 1
Dễ thấy, bước tính toán này là bước tính cơ sở nhất trong toàn thuật toán, nên khi cài đặt bước này càng đơn giản, càng hiệu quả thì thuật toán sẽ càng hiệu quả. Thuật toán thực thi s2 lần tính toán cho bước này, và k
s
wvới w là hằng số; vậy thuật toán này có độ phức
tạp là O(k2) (theo toán tử trên bit khi nhân 2 số k-bits với nhau).
Thuật toán nhân cơ bản nhìn chung là đơn giản và dễ cài đặt khi nhân 2 số đủ nhỏ thì cho kết quả gần như tốt bằng các thuật toán tối ưu hơn như Karatsuba-Ofman. Phần tiếp theo luận văn sẽ trình bày thêm 2 thuật toán nhân Karatsuba-Ofman và Thuật toán nhân dựa trên FFT. Đây là 2 thuật toán có độ phức tạp (thời gian/phép toán thực thi) nhỏ hơn nhiều so với thuật toán cơ bản này.