@DavidRicherby ชี้ให้เห็นแล้วความสับสนเกิดขึ้นเนื่องจากการวัดความซับซ้อนที่แตกต่างกันเริ่มสับสน แต่ขอผมอธิบายหน่อย
โดยปกติเมื่อศึกษาอัลกอริธึมสำหรับการคูณพหุนามมากกว่าแหวนโดยพลการหนึ่งจะสนใจจำนวนการดำเนินการทางคณิตศาสตร์ในวงแหวนที่อัลกอริทึมใช้ โดยเฉพาะอย่างยิ่งเมื่อได้รับ (commutative, unitary) ring และ polynomials f , g ∈ R [ X ]ระดับน้อยกว่าn , Schönhage-Strassen algorithm ต้องการO ( n log n log log n )และการเพิ่มเติมในRเพื่อคำนวณf g ∈ R [ X ]Rf,g∈R[X]nO(nlognloglogn)Rfg∈R[X]โดยประมาณติดรากดั้งเดิม -th ของความสามัคคีในการวิจัยจะได้รับบางแหวนขนาดใหญ่D ⊃ Rแล้วโดยใช้จานแปลงฟูเรียกว่าDคำนวณผลิตภัณฑ์ในDnRD⊃RDD
ถ้าแหวนของคุณมีราก -th ของความสามัคคีแล้วนี้สามารถเร่งความเร็วได้ถึงO ( n log n )การดำเนินงานในการวิจัยโดยใช้จานฟูริเยร์แปลงโดยตรงผ่านR โดยเฉพาะอย่างยิ่งในZ ⊂ Cคุณสามารถทำได้โดยใช้การดำเนินงานเสียงเรียกเข้าO ( n log n ) (โดยไม่สนใจข้อเท็จจริงที่ว่านี่จะต้องใช้เลขคณิตที่แน่นอนมากกว่าจำนวนเชิงซ้อน)nO(nlogn)RRZ⊂CO(nlogn)
มาตรการอื่นที่สามารถนำมาพิจารณาได้ก็คือความซับซ้อนของการดำเนินการ และนี่คือสิ่งที่เรากำลังสนใจในเมื่อคูณจำนวนเต็มสองจำนวนของความยาวบิตnที่นี่การดำเนินงานดั้งเดิมจะคูณและเพิ่มสองหลัก (พร้อมส่ง) ดังนั้นเมื่อคูณสองชื่อพหุนามมากกว่าZคุณต้องคำนึงถึงความจริงที่ว่าตัวเลขที่เกิดขึ้นระหว่างการคำนวณไม่สามารถคูณด้วยการดำเนินการดั้งเดิม นี่และความจริงที่ว่าZไม่มีรูตดั้งเดิมของความสามัคคีn -th สำหรับn > 2ทำให้คุณไม่สามารถใช้O ( n log n ) ได้nZZnn>2O(nlogn)ขั้นตอนวิธี คุณเอาชนะสิ่งนี้ได้โดยพิจารณาด้วยค่าสัมประสิทธิ์จากวงแหวนZ / ⟨ 2 n + 1 ⟩เนื่องจากค่าสัมประสิทธิ์ของพหุนามผลิตภัณฑ์จะไม่เกินขอบเขตนี้ มี (เมื่อnคุณมี (ชั้นความสอดคล้องกันของ) อำนาจของทั้งสองเป็น) 2เป็นnราก -th ของความสามัคคีและด้วยซ้ำเรียกอัลกอริทึมสำหรับการคูณค่าสัมประสิทธิ์คุณสามารถบรรลุรวมO ( n log n บันทึกบันทึกn )ดั้งเดิมเช่นบิต) การดำเนินงาน ( จากนั้นจะนำไปสู่การคูณจำนวนเต็มf,gZ/⟨2n+1⟩n2nO(nlognloglogn)
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/2n เป็นพลังของสองเพื่อความง่าย)
f(x)
f(x)=H(x)xn/2+L(x)
nn+logn
n/2n/2Ω(n2)nO(n)O(nlogcn)=O~(n)c>0