Thuật toán nhân dựa trên biến đổi Fourier nhanh

Một phần của tài liệu tổ chức dữ liệu cho lớp thuật toán chia để trị và ứng dụng (Trang 47 - 50)

Phương pháp nhân các số nguyên lớn sử dụng FFT trên các trường hữu hạn đã được khám phá bởi Shonhage và Strassen và được mô tả chi tiết bởi Knuth. Biến đổi FFT (FastFourierTransform) có thể được sử dụng trong phép nhân các số nguyên lớn. Trong thuật toán nhân chuẩn, các số nguyên được biểu diễn bằng các kí hiệu vị trí. Cách biểu diễn này cũng giống với việc các đa thức được biểu diễn bằng các cơ số [8, 9].

Ví dụ: 348 = 3x2 + 4x + 8 với x = 10. Tương tự, 857 = 8x2 + 5x + 7 với x = 10. Để nhân 348 cho 857, chúng ta có thể nhân các đa thức lại với nhau trước:

(3x2 + 4x + 8)(8x2 + 5x + 7) = 24x4 + 47x3 + 105x2 + 68x + 56 Và sau đó tính toán kết quả của đa thức với x = 10

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

24(10)4 + 47(10)3 + 105(10)2 + 68(10) + 56 = 298236

Như vậy 348*857 = 298236. Nếu chúng ta có thể nhân các đa thức nhanh thì cũng có thể nhân các số nguyên lớn nhanh. Để nhân hai đa thức, ta sử dụng phép biến đổi Fourier rời rạc. Trước hết ta phải xem xét các khái niệm sau đây:

Bậc của x trong một trường k bất kì kí hiệu wk(x) là

Nghiệm đơn vị: một phần tử thuộc trường k bất kỳ có tính chất , với n là một số nguyên nào đó được gọi là nghiệm đơn vị.

Nghiêm đơn vị nguyên sơ bậc n: đối với n là một số nguyên dương, với và , t là số nguyên dương và t < n, khi đó được gọi là nghiêm đơn vị nguyên sơ bậc n.

Đầu tiên, ta phải tính giá trị các đa thức tại các nghiệm đơn vị, sau đó lần lượt nhân những giá trị đó với nhau và cuối cùng nội suy để có được các hệ số của đa thức kết quả. Thuật toán FFT cho phép tính giá trị của một đa thức (cho trước bậc s – 1) tại s nghiệm đơn vị với độ phức tạp tính toán O(slogs). Tương tự, bước nội suy cũng có độ phức tạp tính toán O(slogs).Một đa thức được xác định bởi các hệ số của nó.

Giả sử A(x) là một đa thức bậc – 1:

Với là nghiệm đơn vị nguyên sơ bậc , thuật toán FFT có thể được sử dụng để tính giá trị đa thức này tại với độ phức tạp tính toán O( log ). Nói cách khác, thuật toán FFT tính vectơ

để có được các hệ số của đa thức, với i = 0,1,.., -1. Những giá trị này cũng định nghĩa duy nhất đa thức A(x). Cho trước những giá trị thì các hệ số Ai với i = 0,1,.., –1 có thể tìm được bằng cách sử dụng biến đổi Fourier ngược:

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

Trong đó và là các nghịch đảo của và và ngược lại. Thuật toán nhân đa thức sử dụng các thủ tục con này. Với các đa thức a(x) và b(x)

Và a = (as-1as-2…a0), b = (bs-1bs-2…b0) được biểu diễn trong cơ số W, trong đó . Lấy = 2s sao cho là lũy thừa của 2. Cho trước là nghiệm đơn vị nguyên sơ bậc , thuật toán sau tính toán tích t = (tl-1, tl-2…t0).

Thuật toán FFT tính toán phép nhân số nguyên:

Thuật toán FFT FFT (A, B) {

Bước 1. Đi tìm và với i = 0,1,…, - 1 bằng FFT. Bước 2: Nhân từng điểm ta có được

Bước 3: Nội suy bằng cách tìm trên sử dụng FFT

Bước 4: trả về các hệ số (tl-1, tl-2,…,t0)

}

Hình 3.11Thuật toán nhân FFT

Thuật toán nhân số nguyên ở trên hoạt động đối với một trường bất kỳ trong đó và một nghiệm đơn vị nguyên sơ bậc tồn tại. Ở đây, câu hỏi đặt ra là trường nào được sử dụng. FFT ban đầu được phát triển cho trường số phức tuy nhiên có những khó khăn tính toán khi sử dụng số phức trên máy tính.Vào năm 1971, Pollard chỉ ra và nghiệm đơn vị nguyên sơ bậc của tất cả các trường có thể sử dụng. Chúng ta chỉ tập trung vào các trường hữu hạn vì máy tính chỉ có thể thực hiện các phép tính hữu hạn. Trường được lựa chọn là trường Galois gồm có p phần tử, với p là một số nguyên tố và p – 1 chia hết cho . Điều này dựa trên cơ sở lý thuyết rằng nếu p là số nguyên tố và p – 1 chia hết cho thì

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

thuộc GF(p)GF(p) có một nghiệm đơn vị nguyên sơ bậc . May mắn thay, không khó để tìm những số nguyên tố p như vậy.

Ví dụ:

Ta có sấp xỉ 180 số nguyên tố p = 2rs + 1 < 231 với r 20. Bất kì số nguyên tố nào như vậy cũng có thể được sử dụng để tính toán FTT với kích thước 220. Các phần tử sinh của chúng cũng có thể được tìm thấy trong một lượng thời gian hợp lý. Danh sách sau là 10 số nguyên tố lớn nhất có dạng p = 2rs + 1 231

– 1 với r > 20 và chính là nghiệm đơn vị nhỏ nhất của chúng.Nghiệm đơn vị nguyên sơ bậc có thể dễ dàng được tính toán từ sử dụng . Thêm vào đó, các phép tính mod p FFT có thể được tính toán dễ dàng. Có rất nhiều số nguyên tố Fourier, ví dụ số nguyên tố p sao cho FFT tồn tại đối với phép toán số học modulo p. Hơn nữa, tồn tại một thuật toán hiệu quả để xác định những số nguyên tố như vậy dựa vào những phần tử sinh của chúng. Từ những phần tử sinh này, các nghiệm đơn vị nguyên sơ có thể dễ dàng được tính toán. Ta chứng minh được rằng tích của hai số nguyên k-bit có thể được tính toán với độ phức tạp O(klok log logk) phép toán trên bit.

(adsbygoogle = window.adsbygoogle || []).push({});

Một phần của tài liệu tổ chức dữ liệu cho lớp thuật toán chia để trị và ứng dụng (Trang 47 - 50)