Như @DavidR Richby đã chỉ ra, sự nhầm lẫn xuất hiện do các biện pháp phức tạp khác nhau đang bị lẫn lộn. Nhưng hãy để tôi giải thích một chút.
Thông thường, khi nghiên cứu các thuật toán cho phép nhân đa thức trên các vòng tùy ý, người ta quan tâm đến số lượng các phép toán số học trong vòng mà thuật toán sử dụng. Cụ thể, với một số vòng (giao hoán, đơn nhất) và hai đa thức có độ nhỏ hơn , thuật toán Schönhage-Strassen cần phép nhân và phép cộng trong để tính bằng cách, đại khái, nối liền với các gốc nguyên thủy thứ của sự thống nhất với để có được một số vòng lớn hơn và sau đó, sử dụng Fast Biến đổi Fourier quaf , g ∈ R [ X ] n O ( n log n log log n ) R f g ∈ R [ X ] n R D ⊃ R D DRf,g∈R[X]nO(nlognloglogn)Rfg∈R[X]nRD⊃RD, Tính toán các sản phẩm trong .D
Nếu nhẫn của bạn có chứa một gốc -thứ đoàn kết, thì đây có thể được tăng tốc lên đến hoạt động trong bằng Fast Fourier Transform trực tiếp trên . Cụ thể hơn, qua , bạn có thể thực hiện việc này bằng các thao tác vòng (bỏ qua thực tế là điều này sẽ yêu cầu số học chính xác qua các số phức).O ( n log n ) R R Z ⊂ C O ( n log n )nO(nlogn)RRZ⊂CO(nlogn)
Các biện pháp khác có thể được tính đến là độ phức tạp bit của một hoạt động. Và đây là điều chúng tôi quan tâm khi nhân hai số nguyên có độ dài bit . Ở đây, các hoạt động nguyên thủy được nhân lên và thêm hai chữ số (có mang). Vì vậy, khi nhân hai đa thức trên , bạn thực sự cần phải tính đến thực tế là các số phát sinh trong quá trình tính toán không thể được nhân lên bằng cách sử dụng một số lượng lớn các hoạt động nguyên thủy. Điều này và thực tế là không có gốc nguyên thủy thứ của ngăn bạn sử dụng thuật toán . Bạn khắc phục điều này bằng cách xem xétZ Z n n > 2 O ( n log n ) f , g Z / ⟨ 2 n + 1 ⟩ n 2 n O ( n log n log log n )nZZnn>2O(nlogn)f,gvới các hệ số từ vòng , vì các hệ số của đa thức sản phẩm sẽ không vượt quá giới hạn này. Ở đó (khi là lũy thừa của hai), bạn có (lớp đồng dạng của) là gốc thứ của đơn vị và bằng cách gọi đệ quy thuật toán để nhân hệ số, bạn có thể đạt được tổng số ) hoạt động nguyên thủy (tức là bit). Điều này sau đó mang đến nhân số nguyên.Z/⟨2n+1⟩n2nO(nlognloglogn)
Đối với một ví dụ đặc biệt làm nổi bật tầm quan trọng của sự khác biệt giữa các hoạt động vòng và hoạt động nguyên thủy, hãy xem xét hai phương pháp để đánh giá đa thức: phương pháp Horner và phương pháp Estrin. Phương thức của Horner đánh giá một đa thức tại một số bằng cách khai thác danh tính
trong khi phương thức của Estrin chia thành hai phần
và
tức là chứa các điều khoản về mức độ và các điều khoản về mức độf=∑ni=0fiXix∈Z
f(x)=(…(fnx+fn−1)x+…+…)+f0
fH=∑i=1n/2fn/2+iXi
L=∑i=0n/2fiXi
H>n/2L≤n/2(giả sử là lũy thừa của hai, vì đơn giản).
n
Sau đó, chúng ta có thể tính bằng
và áp dụng thuật toán đệ quy.f(x)
f(x)=H(x)xn/2+L(x)
Cái trước, sử dụng phép cộng và phép nhân, được chứng minh là tối ưu cho số lần bổ sung và phép nhân (nghĩa là các phép toán vòng), cái sau cần nhiều hơn (ít nhất là ).nn+logn
Nhưng, ở mức độ hoạt động của bit, người ta có thể (khá dễ dàng) cho thấy trong trường hợp xấu nhất, phương pháp của Horner thực hiện phép nhân số lượng kích thước ít nhất là , dẫn đến nhiều bit các hoạt động (điều này giữ ngay cả khi chúng tôi giả sử rằng hai số -bit có thể được nhân lên trong thời gian ), trong khi sơ đồ của Estrin sử dụng các hoạt động cho một số , cho đến nay, nhanh hơn là không có triệu chứng.n / 2 Ω ( n 2 ) n O ( n ) O ( n log c n ) = ~ O ( n ) c > 0n/2n/2Ω(n2)nO(n)O(nlogcn)=O~(n)c>0