이 답변은 Schönhage와 Strassen의 긴 정수 곱셈에 대한 첫 번째 알고리즘 ( "방법 A") 분석의 변형입니다.
길이 의 FFT를 계산한다고 가정합니다 . 모든 값이 1보다 작도록 입력의 크기를 조정하십시오. 먼저 비트 고정 소수점 산술 ( 이진 포인트 뒤 비트)로 계산한다고 가정하겠습니다 . 하자 최소한의 위치 ( "복합") 유닛 일. 보자 . m m δ = 2 1 / 2 - m ω = exp ( 2 π i / K )K=2kmmδ=21/2−mω=exp(2πi/K)
1) 하나의 수 계산 근사 등이
| ω ′ j − ω j | 모든 0 ≤ j ≤ K - 1에 대해 ≤ ( 2 k - 1 ) δ . 이것은 시간에 수행 될 수 O ( K M ( m ) ) M ( M은 ) 곱셈하는 데 필요한 시간이다 m의 비트 번호. (Knuth Vol. 2, 3 판, 309 페이지 참조).ω′j|ω′j−ωj|≤(2k−1)δ0≤j≤K−1O(KM(m))M(m)m
표준 정수 RAM 수단 대수 경우 선정 된 후, . 표준 정수 RAM이 워드 RAM을 의미하는 경우 M ( m ) = O ( m ) 입니다. (Schönhage 및 쉬트 라쎈 "메도 A"에서 표시 방법을 선형 시간의 곱셈 줄일 분 에 비트 번호 m을 승산 O ( 로그 m ) 번호 비트. 후자의 단위 비용으로 수행 될 수있다.)M(m)=O(mlogm)M(m)=O(m)mmO(logm)
2) 기존 Cooley-Tukey FFT 형식 의 연산을 계산합니다
. 우리는 m 비트 고정 소수점 산술을 사용하며, 이러한 연산은 a ' = t r u n c a t e ( b ' + ω ' j c ' )가 됩니다. 우리가 알고있는 경우 B ' 및 C ' 의 오류까지를 ε , 우리가 얻을 ' 의 오류로 최대 2 ε + 2a=b+ωjcma′=truncate(b′+ω′jc′)b′c′ϵa′ .2ϵ+2kδ
3) 유도를 사용하면 오류 와 함께 최종 결과를 얻는 것이 쉽습니다 . 결국
정밀도 b 를 얻으려면 m ≥ k + log k + b + O ( 1 ) . (2k−1)⋅2kδbm≥k+logk+b+O(1)
4) 그러므로, 최종 실행 시간은 .O(KkM(k+b))
이것은 부동 소수점 숫자에서도 작동해야합니다. 1) 고정 소수점 산술로 계속 수행 할 수 있으며 2) 부동 소수점 숫자에도 적용됩니다.
고정 소수점 산술에서는 더 빠를 수도 있다고 생각합니다. 먼저 Bluestein의 트릭을 사용하여 FFT 계산을 다항식의 곱셈으로 줄입니다. 원하는 정밀도를 얻는 데 필요한 계수의 길이는 여야합니다 . 그런 다음 다항식의 곱셈을 긴 정수의 곱셈으로 줄입니다. (계수를 긴 수에 더하고 길이 O ( k + b ) 의 0 블록으로 분리합니다 .) 정수의 길이는 O ( K ( k + b ) ) 입니다.O(k+b)O(k+b)O(K(k+b))