쇤하게-스트라센 알고리즘
Schönhage–Strassen algorithm

쇤하게-스트라센 알고리즘은 큰 정수에 대한 점근적으로 빠른 곱셈 알고리즘으로, 아놀드 쇤하게와 볼커 스트라센이 1971년에 [1]발표했습니다.정수 모듈로n 2+1 위에 고속 푸리에 변환(FFT)을 재귀적으로 적용하여 작동합니다.알고리즘을 사용하여 두 개의 n자리 숫자를 곱하는 런타임 비트 복잡도는 큰 O 표기법에서 O ⋅ log ) \ O n\log n입니다 .
쇤하게-스트라센 알고리즘은 1971년부터 2007년까지 알려진 점근적으로 가장 빠른 곱셈 방법이었습니다.Karatsuba 및 Toom-Cook 곱셈과 같은 오래된 방법보다 점근적으로 더 빠르며, 약 10,000 ~ 100,000개의 [2]소수 자릿수를 초과하는 숫자에 대해 실제로 그것들을 능가하기 시작합니다.2007년, 마틴 퓌러는 더 빠른 점근 [3]복잡성을 가진 알고리즘을 발표했습니다.2019년에 데이비드 하비와 조리스 반 데어 호븐은 다자리 곱셈이 으로O( n O n 복잡성을 가지고 있음을 증명했지만, 그들의 알고리듬은 상상할 수 있는 실제 문제에 대해 불가능하게 느리게 만드는 일정한 요인을 가지고 있습니다(은하 [4]알고리듬 참조).
쇤하게-스트라센 알고리즘의 응용은 대인터넷 메르센 프라임 검색 및 π의 근사와 같은 자체를 위해 수행된 대규모 계산뿐만 아니라 다항식 곱셈을 정수 곱셈으로 줄이는 크로네커 치환을 통한 렌스트라 타원 곡선 인수분해와 같은 실용적인 응용을 포함한다.[5][5][6]
묘사
기저 B의 모든 숫자는 다항식으로 쓸 수 있습니다.
또한, 두 숫자의 곱은 두 다항식의 곱으로 생각할 수 있습니다.
왜냐하면, {\ B ( ): + j ∑ = - { \ {k}=\j):i_{{bi_i}i-i_i-i-i-i의 경우,
NTT가 [7]아닌 원래 버전에서 사용되는 FFT(Fast Fourier Transform)를 컨볼루션 규칙과 함께 사용하면 다음을 얻을 수 있습니다.
- 을를) 반환합니다.
, {\}= 서 는 푸리에 공간의 해당 계수입니다.이는 fft(a * b) = fft(a) ● fft(b)로도 쓸 수 있습니다.
푸리에 변환에서 선형성으로 인해 계수가 동일하며, 이러한 다항식은 계수당 하나의 고유 항으로만 구성되기 때문입니다.
- 및
컨볼루션 규칙: ( Y ) ( ( {\ {
우리는 FFT를 통해 컨볼루션 문제를 제품 문제로 낮췄습니다.
ifft(다항 보간)를 찾아 각 에 대해 원하는 계수를 얻습니다.
알고리즘은 분할 및 정복 전략을 사용하여 문제를 하위 문제로 분할합니다.
모드 N에서의 콘볼루션
(,) : + ( N () jj j j j j j j j j j j j j j j j j j j j j j ( n ) }{_ { + } 서(n ) + ( n ( ) N 2 + 1(} N – N = 1 ( ) N { 2 ( ) N
다음을 허용:
- i ii i{itheta i}} bj' jbj b_}'=\ 여기서 N 은 n번째 루트입니다.
하나는 [8]다음과 같습니다.
- ◦ - k ( ∑ ( i, j ) : i + j = ka b j k + ∑ ( i, j ) : i + j = ka b j + θ n ( i ) : i + j + = ka b j + ∑ ( i , j ) : i + j + = k + ∑ i b \ display \ the ta ^ - k \ left ( \ sum _ j _ j _ j _ j _ j _ j _ j _ j _ j _ j _ i _ i _ j _ j _ j _ i } ) : i θ ) : i _ j _ j _ j _
즉, 가중치 i를 사용한 다음θ - 를 곱할 수 있습니다.
가중치를 사용하는 대신, 재귀의 첫 단계( {{n = N }인 )에서 θ - 1 {displaystyle \}--로 인해 다음을 계산할 수 있습니다.
복소수에서 작동하는 일반 FFT에서는 다음을 사용합니다.
그러나 FFT는 Schönhage-Strassen에서 NTT(숫자 이론 변환)로도 사용할 수 있습니다.이는 유한한 필드에서 숫자를 생성하는 π를 사용해야 한다는 것을 의미합니다(: GF n +) \ ( +
유한 필드 GF(r) 아래의 단일성의 근은 - 1 {\ \^{ 1 또는 {\와 같은 요소입니다. 예를 들어, p는 이며 { 2, ..., p입니다
n + n - {\ -1 }과n+ + 1 )의 2≡- \ \ {2- 1 (+ 2 + 1 )의style - 1은 스타일 \+ 1을 표시합니다.이러한 후보들의 경우, N -은 유한 필드 아래에서 -1을 하므로 우리가 원하는 대로 행동합니다.
그러나 π가 유한 필드의 단일성 루트인 한 동일한 FFT 알고리즘을 사용할 수 있습니다.
FFT/NTT 변환을 찾기 위해 다음을 수행합니다.
첫 번째 제품은 각 k에 대해 에 기여합니다.둘째는 (+ ) N (){\ N으로인해 에 기여합니다
반대로 하는 방법:
- - (- + k) {{\hat {f}}}(\{k+ Ck =f - 1 ( + ) { C_ + k }(\ ^{k^{k})}({k}({
fftone이 정규화 데이터를 사용하는지 여부에 따라 달라집니다.
1에 2-를 곱하여 fft 데이터를 특정 범위로 정규화합니다. 서 n - \ n N () {\ N 여기서 m은 모듈식 곱셈 역수를 사용하여 발견됩니다.
구현내역
모드 N에서 NM = 2 + 1인 이유
쇤하게-스트라센 알고리즘에서, M + N=0≤ ≤ + {\ 0 2}= 의 값을 갖는 이진 트리라고 생각해야 합니다.K [ ] {{ K [을 (를)하면 각 K에 대해 모든+ {\ 쌍을 M개의 다른 그룹으로 그룹화할 수 있습니다.i+ \ i + j = 를 사용하여 ( ) \ 쌍을 컨볼루션을 통해그룹화하는 은 [9]알고리즘에서 고전적인 문제입니다.예를 들어, 총소득과 나는 소득과 j여성 소득이라고 가정합니다. 컨볼루션을 사용하면 원하는 총소득을 기준으로 ( j을 (를) K 그룹으로 그룹화할 수 있습니다.
이를 염두에 N + N = 은깊이 k의 각 하위 작업 그룹에 대해 ( {\j)}을 (를) M k 2 + {\ { 그룹으로그룹화하는 데 도움이 됩니다.
일부 L의 경우 N M + = L + {{ N = + 1 = + 에 주목합니다.이건 페르마 번호야 N + = L + {{ N = + 1 = 을 수행할 때, 우리는 페르마 고리라고 불리는 것을 가지고 있습니다.
일부 페르마 수는 페르마 소수이기 때문에 경우에 따라 계산을 피할 수 있습니다.
물론 동일한 소수 이점으로 사용할 수 있는 다른 N이 있습니다.N - {\= 을하면k + 1 {\ k+의 이진수로 최대 수를 갖게 됩니다. - {{ N = 은 메르센 수이며, 어떤 경우에는 메르센 소수입니다.페르마 N L + { N = 에 대한 자연 후보입니다.
다른 N을 찾아서
다른 N에 대해 여러 가지 모드 계산을 수행하면 정수 곱을 해결하는 데 도움이 될 수 있습니다.중국의 나머지 정리를 사용하여, M을 더 작은 다른 유형의 N으로 나눈 후, 곱셈 xy의 답을 찾을 수 있습니다.
페르마 수와 메르센 수는 일반화된 페르마 메르센 수(GSM)라고 불리는 두 가지 유형의 수에 불과합니다.[11]
이 에서, M_{2,는 페르마 수이고, 은 메르센 수이다.
이 공식은 CRT(중국어 정지 정리)[12]에서 사용할 수 있는 방정식 집합을 생성하는 데 사용할 수 있습니다.
- ( - ) -1 ( ) {\ g{(}\ {n 여기서 는 x 2 n이 존재하는 수이 라고 합니다.
, )n - - ( ) \ g a 여기서 a는 .에서 를생성하는
t {{ N = 이고, 서 1 {\ 1t\ n이면 a (n - ) n - {\}=입니다
특정 N에 대해 K를 선택하는 방법
다음 공식은 [13]효율성을 계산하여 주어진 비트 크기 N에서 적절한 K(N비트를 분할할 그룹 수)를 찾는 데 도움이 됩니다.
E= 은 최외곽 수준에서 비트 크기(N + 에 사용되는 )입니다.K는 에{\{{개의 비트 그룹을 하며 서 K =k입니다.
n은 2/ x {{ n=와 같이 가장 작은 x를 찾아 N, K, k를 통해 발견됩니다.
만약 효율이 % 이상이라고 가정한다면, ≤ n {\ Kn은 나머지 공식에 비해 매우 작습니다.
이는 다음을 의미합니다.어떤 것이 매우 효과적일 때; K는 2 또는 점근적으로 N스타일 {\에 결합됩니다.
의사코드
알고리즘에 따라 표준 모듈러 쇤하게-스트라센 곱셈 알고리즘(일부 최적화 포함)은 다음을 통해 확인할 수 있습니다.
- 입력 번호 a와 b를 각각 n개의 비트 계수로 나눕니다.
+ 을 사용하여 저장합니다
의 인코딩을 허용합니다 {\ 2 - (2.24)에 따라 두 계수 벡터에 대해 주기적 이동을 수행하여 π의 거듭제곱으로 가중치를 부여합니다.
- 와 를 섞습니다.
- 및 를 합니다. ω의 거듭제곱은 순환 이동입니다.
- Don pointwise : }:= Z /(+ SMUL이 재귀적으로 사용되는 경우 K를 매개 변수로 제공합니다.그렇지 않으면 T3MUL과 같은 다른 곱셈 함수를 사용하고 로 ({ 2을 줄입니다.
- 곱 ({를 섞습니다.
- 제품 {{를 평가합니다.
- (2.25)에 따라 를 ({c_{k})에 적용합니다.θ ≡ n 1 이후,θ- -k \^{- \ 다음과 같습니다.
- 를 1/ ≡ - {{ 1 2다시 순환 시프트)로 정규화합니다.
- 를 더하고 캐리를 전파합니다.음의 계수를 적절하게 처리해야 합니다.
- + 2을를) 수행합니다.
- T3MUL = Tom-Cook 곱셈
- SMUL = 쇤하게-스트라센 곱셈
- = FFT/IFFT 평가
추가 연구
구현에 대한 자세한 내용은 소수: 컴퓨터 [15]관점이라는 책을 읽을 수 있습니다.이 변형은 이산 가중 변환을 활용하여 네거티브 순환 컨볼루션을 더 효율적으로 수행한다는 점에서 Schönhage의 원래 방법과 다소 다릅니다.자세한 정보를 제공하는 또 다른 출처는 Knuth의 컴퓨터 프로그래밍 [16]기술입니다.
최적화
이 섹션에서는 Schönhage-Strassen을 구현할 때 여러 가지 중요한 실제 최적화에 대해 설명합니다.
다른 곱셈 알고리즘의 사용, 내부 알고리즘
특정 컷오프 지점 아래에서는 Tom-Cook [17]곱셈과 같은 다른 곱셈 알고리즘을 사용하는 것이 더 효율적입니다.
2 트릭의 제곱근
이 개념은 유한 필드 GF(2n + 2 + 1)에서 2차 n + 2차 2^{n + 2}(2^{n + 2})의 일치의 루트로 2{\displaystyle \mathrm {GF}(2^{n + 2} + 1)를 사용하는 것이다. (이것은 2 n + 2 + 2 + 1) (2 + 2 + 2 + 2 + 1) 디스플레이 스타일의 해법이다,NTT(숫자 이론 변환)의 가중치 값이 평가될 때.정수 곱셈 [18]시간을 10% 절약하는 것으로 나타났습니다.
그랜런드의 속임수
+ m= 2 +({uv및 ( h {\vmod 2 CRT( 잔류 와 하여 정확한 자외선 곱셈 값을[19] 구할 수 있습니다.
레퍼런스
- ^ Schönhage, Arnold; Strassen, Volker (1971). "Schnelle Multiplikation großer Zahlen" [Fast multiplication of large numbers]. Computing (in German). 7 (3–4): 281–292. doi:10.1007/BF02242355. S2CID 9738629.
- ^ 카라츠바 곱셈은 약 O(n 1.의 점근를 가지며, 툼-쿡 곱셈은 약 O( 1의점근 복잡도를 갖습니다 {{^ {46
Van Meter, Rodney; Itoh, Kohei M. (2005). "Fast Quantum Modular Exponentiation". Physical Review. A. 71 (5): 052320. arXiv:quant-ph/0408006. Bibcode:2005PhRvA..71e2320V. doi:10.1103/PhysRevA.71.052320. S2CID 14983569.
다양한 알고리즘 간의 실질적인 교차점에 대한 논의는 다음에서 찾을 수 있습니다: 마그마 V2.9 특징 개요, 산술 섹션 웨이백 머신에서 2006-08-20 보관.
Luis Carlos Coronado Garcia, "Shönhage 곱셈을 통해 RSA 암호화 또는 암호 해독 속도를 높일 수 있습니까?보관", 다름슈타트 공과대학교(2005)
GNU Multi-Precision 라이브러리는 아키텍처에 따라 최소 1728~7808개의 64비트 단어(소수점 33,000~150,000자리)의 값에 사용합니다.참조:
"FFT Multiplication (GNU MP 6.2.1)". gmplib.org. Retrieved 2021-07-20.
"MUL_FFT_THRESHOLD". GMP developers' corner. Archived from the original on 24 November 2010. Retrieved 3 November 2011.
"MUL_FFT_THRESHOLD". gmplib.org. Retrieved 2021-07-20.
- ^ 퓌러 알고리즘은 점근 복잡도 O( ⋅ θ( ∗n).\ O n Fürer, Martin (2007). "Faster Integer Multiplication" (PDF). Proc. STOC '07. Symposium on Theory of Computing, San Diego, Jun 2007. pp. 57–66. Archived from the original (PDF) on 2007-03-05.Fürer, Martin (2009). "Faster Integer Multiplication". SIAM Journal on Computing. 39 (3): 979–1005. doi:10.1137/070711761. ISSN 0097-5397.
퓌러 알고리즘은 기본 다항식 대수 하위 프로그램(BPAS) 오픈 소스 라이브러리에서 사용됩니다.참조:
- ^ Harvey, David; van der Hoeven, Joris (2021). "Integer multiplication in time " (PDF). Annals of Mathematics. Second Series. 193 (2): 563–617. doi:10.4007/annals.2021.193.2.4. MR 4224716. S2CID 109934776.
- ^ 이 방법은 INRIA의 ECM 라이브러리에서 사용됩니다.
- ^ "ECMNET". members.loria.fr. Retrieved 2023-04-09.
- ^ Becker, Hanno; Hwang, Vincent; J. Kannwischer, Matthias; Panny, Lorenz (2022). "Efficient Multiplication of Somewhat Small Integers using Number-Theoretic Transforms" (PDF).
- ^ Lüders, Christoph (2014). "Fast Multiplication of Large Integers: Implementation and Analysis of the DKSS Algorithm". p. 26.
- ^ Kleinberg, Jon; Tardos, Eva (2005). Algorithm Design (1 ed.). Pearson. p. 237. ISBN 0-321-29535-8.
- ^ Gaudry, Pierrick; Alexander, Kruppa; Paul, Zimmermann (2007). "A GMP-based implementation of Schönhage-Strassen's large integer multiplication algorithm" (PDF). p. 6.
- ^ S. Dimitrov, Vassil; V. Cooklev, Todor; D. Donevsky, Borislav (1994). "Generalized Fermat-Mersenne Number Theoretic Transform". p. 2.
- ^ S. Dimitrov, Vassil; V. Cooklev, Todor; D. Donevsky, Borislav (1994). "Generalized Fermat-Mersenne Number Theoretic Transform". p. 3.
- ^ Gaudry, Pierrick; Kruppa, Alexander; Zimmermann, Paul (2007). "A GMP-based Implementation of Schönhage-Strassen's Large Integer Multiplication Algorithm" (PDF). p. 2.
- ^ Lüders, Christoph (2014). "Fast Multiplication of Large Integers: Implementation and Analysis of the DKSS Algorithm". p. 28.
- ^ R. 크랜달 & C. 포메런스소수 – 계산적 관점.제2판, 스프링거, 2005.섹션 9.5.6: Schönhage 방법, 502페이지.ISBN 0-387-94777-9
- ^ Knuth, Donald E. (1997). "§ 4.3.3.C: Discrete Fourier transforms". The Art of Computer Programming. Vol. 2: Seminumerical Algorithms (3rd ed.). Addison-Wesley. pp. 305–311. ISBN 0-201-89684-2.
- ^ Gaudry, Pierrick; Kruppa, Alexander; Zimmermann, Paul (2007). "A GMP-based implementation of Schönhage-Strassen's large integer multiplication algorithm" (PDF). p. 7.
- ^ Gaudry, Pierrick; Kruppa, Alexander; Zimmermann, Paul (2007). "A GMP-based implementation of Schönhage-Strassen's large integer multiplication algorithm" (PDF). p. 6.
- ^ Gaudry, Pierrick; Kruppa, Alexander; Zimmermann, Paul (2007). "A GMP-based implementation of Schönhage-Strassen's large integer multiplication algorithm" (PDF). p. 6.