곱셈


10

나는 여기를 보고 있었고 , 두 개의 비트 숫자의 곱셈에 가장 적합한 런타임 은 O ( n log n 2 O ( log n ) 임을 알았지 만 O ( n 로그 n ) .nO(nlogn2O(logn)O(nlogn)

결국, 우리 는 O ( n log n ) 런타임 에서 차수 두 다항식을 곱하는 방법을 알고 있습니다. 그러나 다항식을 곱하는 것은 두 개의 n 비트 수 를 곱하는 것과 같습니다 . 따라서 우리는 O ( n log n ) 에 두 개의 n 비트 수 를 곱하는 알고리즘을 가지고 있습니다 . 이제 발생할 수있는 유일한 문제는 캐리 (carry)이지만 각 단계에서 O ( n ) 시간 에 문제를 해결 하여 끝까지 가장 오른쪽 비트와 왼쪽 이웃에서 간단히 이동할 수 있습니다. 즉, 우리의 런타임은 O ( n log nnO(nlogn)nnO(nlogn)O(n) .O(nlogn)

새로운 발견을 했습니까? 아니면 위키 백과 페이지가 구식입니까? 아니면 실수가 있을까요?


정도에서 곱셈 두 다항식에 ""우리가 알고있는 "하는 방법은 무엇입니까 에서 O ( N 로그 N ) "런타임은?nO(nlogn)

답변:


8

@DavidRicherby가 이미 지적했듯이, 복잡성에 대한 여러 가지 측정 방법이 혼합되어 혼란이 발생합니다. 그러나 조금 자세히 설명하겠습니다.

일반적으로 임의의 링에 대한 다항식 곱셈 알고리즘을 연구 할 때 알고리즘이 사용하는 링의 산술 연산 수에 관심이 있습니다. 특히, 일부 (계산적, 단일) 고리 n 보다 작은 차수의 두 다항식 f , g R [ X ] 가 주어지면 Schönhage-Strassen 알고리즘은 O ( n log n log log n ) 곱셈과 R의 덧셈이 필요합니다 f g R [ X ] 를 계산하기 위해Rf,gR[X]nO(nlognloglogn)RfgR[X]하여, 대략 인접한 에 통일성 번째 시근을 R은 약간 큰 링 얻는 D R을 고속 푸리에 변환하여 위에 다음과 D 의 생성물 컴퓨팅, D를 .nRDRDD

반지가 포함 된 경우 통일 번째 루트, 다음이를 가속화 할 수있다 O ( N 로그 N ) 에서 작업 R을 고속 푸리에을 통해 직접 변환을 사용하여 R . 보다 구체적으로, ZC 보다 O ( n log n ) 링 연산을 사용하여이 작업을 수행 할 수 있습니다 (복소수에 대한 정확한 산술이 필요하다는 사실은 무시).nO(nlogn)RRZCO(nlogn)

고려할 수있는 다른 방법은 작업의 비트 복잡성입니다. 그리고 이것은 비트 길이 의 두 정수를 곱할 때 우리가 관심을 갖는 것 입니다. 여기에서 프리미티브 연산은 두 자리를 곱하고 더하기 (carry 포함)입니다. 따라서 Z에 두 개의 다항식을 곱할 때 계산 중에 발생하는 숫자에 일정한 수의 기본 연산을 사용하여 곱할 수 없다는 사실을 실제로 고려해야합니다. 이것과 Zn > 2n 번째 기본 단위의 근본 이 없다는 사실 은 O ( n log n )를 적용 하지 못하게합니다.nZZnn>2O(nlogn)연산. 만약 고려하여이를 극복 링에서 계수 Z /2 N + 1 제품 다항식의 계수를 초과하지 않으므로,이 바인딩. 거기에서 ( n 이 2의 거듭 제곱 일 때 ) 2n 번째 근본으로 2 의 합동 클래스를 가지며, 계수 곱셈 알고리즘을 재귀 적으로 호출하여 총 O ( n log n을 얻을 수 있습니다. log log n ) 원시 (즉, 비트) 연산. 그런 다음 정수 곱셈으로 넘어갑니다.f,gZ/2n+1n2nO(nlognloglogn)

링 연산과 프리미티브 연산의 차이점의 중요성을 잘 보여주는 예를 들어, 다항식을 평가하는 두 가지 방법, Horner 방법과 Estrin 방법을 고려하십시오. 호너 방법 다항식 평가 몇몇 X Z를 식별 이용하여 F를 ( X ) = ( ... ( F N X + F , N - 1 ) X + ... + ... ) +f=i=0nfiXixZ 까지 에스 트린의 방법 스플릿 동안 F 의 두 부분으로 H = N / 2 Σ는 i가 = 1 F를 N / 2 + I X I L = N / 2 Σ= 0 F X , 즉 H는 정도의 조건을 포함 > n / 2 L 정도n / 2 ( n 가정

f(x)=((fnx+fn1)x++)+f0
f
H=i=1n/2fn/2+iXi
L=i=0n/2fiXi
H>n/2Ln/2 단순성을 위해 2의 거듭 제곱입니다).

에프(엑스)

에프(엑스)=H(엑스)엑스/2+(엑스)

+로그

/2/2Ω(2)영형()영형(로그)=영형~()>0


9

영형(로그)영형(2로그로그)영형(로그)


5
나는 이것이 문제 라고 생각하지 않습니다 . 숫자가 "x"가 기본 인 다항식 ( 예 : 2)으로 생각되면 일반적으로 일정 시간에 0도 다항식 (기본보다 작은 수)을 곱할 수 있습니다 . 문제는 O (n * log n) 알고리즘이 FFT를 사용하고 FFT 알고리즘 내에 무의식적으로 더 큰 숫자가 나타날 수 있다는 것입니다.
jkff
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.