쇤하게-스트라센 알고리즘

Schönhage–Strassen algorithm
쇤하게-스트라센 알고리즘은 정수 곱셈의 고속 푸리에 변환(FFT) 방법을 기반으로 합니다.이 그림은 간단한 FFT 방법을 사용하여 1234 x 5678 = 7006652를 곱한 것입니다.베이스 10은 예시적인 목적으로 베이스w 2를 대신하여 사용됩니다.쇤하게-스트라센은 부정순환 컨볼루션을 사용하여 이를 개선합니다.
1979년 오버울파흐에서 체스를 두는 쇤하게(오른쪽)와 스트라센(왼쪽)

쇤하게-스트라센 알고리즘은 큰 정수에 대한 점근적으로 빠른 곱셈 알고리즘으로, 아놀드 쇤하게 볼커 스트라센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스타일 {\ 결합됩니다.

의사코드

알고리즘에 따라 표준 모듈러 쇤하게-스트라센 곱셈 알고리즘(일부 최적화 포함)은 다음을 통해 확인할 수 있습니다.

  1. 입력 번호 a와 b를 각각 n개의 비트 계수로 나눕니다.

    + 을 사용하여 저장합니다

    의 인코딩을 허용합니다 {\ 2
  2. (2.24)에 따라 두 계수 벡터에 대해 주기적 이동을 수행하여 π의 거듭제곱으로 가중치를 부여합니다.
  3. 를 섞습니다.
  4. 합니다. ω의 거듭제곱은 순환 이동입니다.
  5. Don pointwise : }:= Z /(+ SMUL이 재귀적으로 사용되는 경우 K를 매개 변수로 제공합니다.그렇지 않으면 T3MUL과 같은 다른 곱셈 함수를 사용하고 ({ 2 줄입니다.
  6. ({를 섞습니다.
  7. 제품 {{를 평가합니다.
  8. (2.25)에 따라 ({c_{k})에 적용합니다.θ n 1 이후,θ- -k \^{- \ 다음과 같습니다.
  9. 1/ - {{ 1 2다시 순환 시프트)로 정규화합니다.
  10. 더하고 캐리를 전파합니다.음의 계수를 적절하게 처리해야 합니다.
  11. + 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] 구할 수 있습니다.

레퍼런스

  1. ^ 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.
  2. ^ 카라츠바 곱셈은 약 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.

  3. ^ 퓌러 알고리즘은 점근 복잡도 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) 오픈 소스 라이브러리에서 사용됩니다.참조:

  4. ^ 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.
  5. ^ 이 방법은 INRIA의 ECM 라이브러리에서 사용됩니다.
  6. ^ "ECMNET". members.loria.fr. Retrieved 2023-04-09.
  7. ^ Becker, Hanno; Hwang, Vincent; J. Kannwischer, Matthias; Panny, Lorenz (2022). "Efficient Multiplication of Somewhat Small Integers using Number-Theoretic Transforms" (PDF).
  8. ^ Lüders, Christoph (2014). "Fast Multiplication of Large Integers: Implementation and Analysis of the DKSS Algorithm". p. 26.
  9. ^ Kleinberg, Jon; Tardos, Eva (2005). Algorithm Design (1 ed.). Pearson. p. 237. ISBN 0-321-29535-8.
  10. ^ Gaudry, Pierrick; Alexander, Kruppa; Paul, Zimmermann (2007). "A GMP-based implementation of Schönhage-Strassen's large integer multiplication algorithm" (PDF). p. 6.
  11. ^ S. Dimitrov, Vassil; V. Cooklev, Todor; D. Donevsky, Borislav (1994). "Generalized Fermat-Mersenne Number Theoretic Transform". p. 2.
  12. ^ S. Dimitrov, Vassil; V. Cooklev, Todor; D. Donevsky, Borislav (1994). "Generalized Fermat-Mersenne Number Theoretic Transform". p. 3.
  13. ^ Gaudry, Pierrick; Kruppa, Alexander; Zimmermann, Paul (2007). "A GMP-based Implementation of Schönhage-Strassen's Large Integer Multiplication Algorithm" (PDF). p. 2.
  14. ^ Lüders, Christoph (2014). "Fast Multiplication of Large Integers: Implementation and Analysis of the DKSS Algorithm". p. 28.
  15. ^ R. 크랜달 & C. 포메런스소수 계산적 관점.제2판, 스프링거, 2005.섹션 9.5.6: Schönhage 방법, 502페이지.ISBN 0-387-94777-9
  16. ^ 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.
  17. ^ Gaudry, Pierrick; Kruppa, Alexander; Zimmermann, Paul (2007). "A GMP-based implementation of Schönhage-Strassen's large integer multiplication algorithm" (PDF). p. 7.
  18. ^ Gaudry, Pierrick; Kruppa, Alexander; Zimmermann, Paul (2007). "A GMP-based implementation of Schönhage-Strassen's large integer multiplication algorithm" (PDF). p. 6.
  19. ^ Gaudry, Pierrick; Kruppa, Alexander; Zimmermann, Paul (2007). "A GMP-based implementation of Schönhage-Strassen's large integer multiplication algorithm" (PDF). p. 6.