계산의 복잡성


답변:


12

고속 푸리에 변환을 사용하면 비트 수 에 대한 곱셈을 시간 ~ O ( k ) 로 수행 할 수 있습니다 (여기서 물결표 는 다항식 인수를 무시하고 있음을 나타냅니다 ). 제곱 반복함으로써 계산할 수 N N 2 와 O ( 로그 N ) 승산하고, 각 승산 이하 수가 더 포함 N N 2 거의 가지고 N 2 로그 2 N 비트. 따라서 필요한 총 시간은 ~ O ( n 2 (kO~(k)nn2O(log⁡n)nn2n2log2⁡n .O~(n2(log⁡n)2)=O~(n2)


3

코멘트에 응답하여 편집 계산하는 시간 시간을 계산하기 위해 필요로 분해 될 수 f를 1 ( N ) = N (2) 및 그 수행하는데 필요한 N f를 1 ( N ) . m 비트 수에 n 비트 수 를 곱 하면 School Book 방법에 의해 정확히 m n 시간 이 걸린다고 가정하겠습니다 . 첨가 등은 일정한 시간입니다. 결과적으로 n 2를 계산 하면 log 2 가 걸립니다.f(n)=nn2f1(n)=n2nf1(n)mnmnn2시간log22⁡(n)

을 계산하기 위해 이진 지수를 사용한다고 가정하자 . 이항 지수화는 f ( n ) 계산에서 두 가지 종류의 연산 을 수행합니다. n 2 의 이진 확장에서 현재 비트 가 0인지 1 인지에 따라 현재 곱을 제곱하고 현재 곱에 n을 곱합니다 . 최악의 경우, n 2 는 2의 거듭 제곱이므로 이항 지수는 답에 도달 할 때까지 현재 곱을 반복하여 제곱합니다 .n 2 는 m ′ = ⌈ 2 log 2 ( nf(n)f(n)nn2n2n2 비트 등 squarings의 개수가되도록 m = m ' - 1 . 우리가 아래에서 더 분석하는 경우입니다.m′=⌈2log2⁡(n)⌉m=m′−1

첫 번째 제곱은 시간이 걸리므로 o 1 = 2 log 2 ( n ) -비트 곱이됩니다. 두 번째 제곱은 두 개의 o 1 비트 숫자를 취하고 t 2 = o 2 1 번 실행되므로 o 2 = 2 o 1 비트 곱이됩니다. 계속해서, i 번째 단계는 t i = 4 i − 1 log를 필요로합니다.t1=log22⁡(n)o1=2log2⁡(n)o1t2=o12o2=2o1i시간이고 aoi=2ilog2(n)비트 곱을 출력합니다. 이 프로세스는m번째 단계에서 중지됩니다. 결과적으로 시간이 걸립니다ti=4i−1log22⁡noi=2ilog2⁡(n)m

. Texp=∑[1..m]ti=log22⁡(n)∑[1..m]4i=4m−13log22⁡n

초기 제곱 비용이 포함되면 최대 시간이 필요하다는 것을 알게됩니다

Texp+log22⁡n

노트

  • 나는 계산에서 일부 바닥과 천장을 생략하여 대답에 실질적으로 영향을 미치지 않기를 바랍니다.
  • 엄밀히 말하면 정확한 상한을 위해 기반 분석을 의도적으로 생략했습니다 . O
  • 위의 추론은 또한 왜 이전의 분석에 결함이 있었는지를 분명히합니다. 표기 빠르게하고 느슨한 방식을 사용하고,이를 편리하게, 예를 들어되도록 상수를 생략하고, Σ는 t를 난 마법 된 O ( 로그 없음을 ) . O∑tiO(log⁡n)
  • 곱셈은 ​​항상 FFT와 다른 방법으로 가속화 될 수 있습니다.

1
n 2 계산을 위해 복잡성을 어떻게 얻었 습니까? O(1)n2

4
두 개의 비트 숫자 를 곱하는 데 O ( 1 ) 시간 대신 O ( log n ) 시간이 걸리므 로 이진 지수의 비용으로도 계산해야한다고 말하고 싶습니다. nO(log⁡n)O(1)
— Mark Dominus

2
최종 결과는 비트입니다. O ( log n ) 시간에 n 2 log 2 n 비트 를 계산하는 것은 매우 어렵 습니다. n2log2⁡nn2log2⁡nO(log⁡n)

페어 포인트, 주목할 것
— PKG

1
@ThomasAndrews : 기계 및 비용 모델에 따라 다릅니다. 추가 비용이 일정한 RAM 모델을 가정하는 것은 드문 일이 아닙니다.
— 라파엘
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.