이산 푸리에 변환 계산의 복잡성?


18

정수 벡터의 표준 이산 푸리에 변환 을 계산하는 복잡성 (표준 정수 RAM)은 무엇입니까?n

고전 고속 푸리에 변환 알고리즘에 대한 부적절, [1] 쿨리 Tukey에 기인는 일반적으로 실행되는 것으로 설명 시간. 그러나이 알고리즘에서 실행되는 대부분의 산술 연산은 복잡한 번째 근본 단위 (대부분의 경우 )가 비합리적인 것으로 시작하므로 일정한 시간에 정확한 평가는 합리적이지 않습니다. 동일한 문제가 순진한 -시간 알고리즘 (복합 근의 Vandermonde 행렬에 곱함)에서 발생합니다.N N O ( N 2 )O(nlogn)nnO(n2)

DFT의 출력을 정확하게 (유용한 형식으로) 표현하는 방법조차 명확하지 않습니다. 다시 말해, DFT 계산이 실제로 가능하다는 것은 확실하지 않습니다!

따라서 각 출력 값에 비트의 정밀도 만 필요하다고 가정하십시오 . 의 함수로 이산 푸리에 변환을 계산하는 복잡성은 무엇입니까 ? (구체적으로, 이 의 거듭 제곱 이라고 가정하십시오 .)n b n 2bnbn2

아니면 문헌에서 "FFT"의 모든 사례가 실제로 "빠른 수 이론 변환 "을 의미합니까? [2]

가우시안 제거유클리드 최단 경로 의 복잡성에 대한 관련 질문을 참조하십시오 .

[1] 실제로 Gauss-Runge-König-Yates-Stumpf-Danielson-Lánczos-Cooley-Tukey 알고리즘 (일부 접두사)이라고합니다.

[2] 그렇다면 대부분의 교과서에서 왜 복소수 알고리즘 만 설명합니까?


1
나는 이것이 그의 요점이라고 생각합니다. 이론적으로는 에 대해 걱정할 필요가 없지만 실제 구현에서는 그것에 대해 발생할 수있는 오류와 오류에 대해 걱정해야합니다. b
Suresh Venkat

1
실제로 이것은 각각의 추가 정밀도 비트가 신호 강도에 를 더해 ( 곱한 ) 좋은 질문 입니다. 따라서 중개 단어 크기를 확장 할 수 있다면이 질문이 가장 유용 할 것입니다! 23dB2

3
계산 가능한 분석은이 문제와 관련 질문을 고려했습니다. 이 논문 은 Weirauch의 Type II 효과 프레임 워크 내에서 푸리에 변환을 계산하기위한 복잡성을 생성합니다. 한계는 (무한한 실제 값) 입력의 표시에서 선형이라는 것입니다. 이 시스템에서 입력 및 출력 모두 wrt 정밀도 매개 변수로 정의되므로이를 RAM 모델로 변환하는 방법이있을 수 있습니다.
Aaron Sterling

3
정수 곱셈에 관한 Schönhage와 Strassen의 논문에서 방법 A를 살펴보십시오. 한정된 정밀도로 복잡한 푸리에 변환을 사용합니다. 나는 그것이 Knuth Vol. 2.
마르쿠스 BLASER

2
Markus, Aaron : 답변으로 변환?
Suresh Venkat

답변:


9

이 답변은 Schönhage와 Strassen의 긴 정수 곱셈에 대한 첫 번째 알고리즘 ( "방법 A") 분석의 변형입니다.

길이 의 FFT를 계산한다고 가정합니다 . 모든 값이 1보다 작도록 입력의 크기를 조정하십시오. 먼저 비트 고정 소수점 산술 ( 이진 포인트 뒤 비트)로 계산한다고 가정하겠습니다 . 하자 최소한의 위치 ( "복합") 유닛 일. 보자 . m m δ = 2 1 / 2 - m ω = exp ( 2 π i / K )K=2kmmδ=21/2mω=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|(2k1)δ0jK1O(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)bcϵa .2ϵ+2kδ

3) 유도를 사용하면 오류 와 함께 최종 결과를 얻는 것이 쉽습니다 . 결국 정밀도 b 를 얻으려면 m k + log k + b + O ( 1 ) . (2k1)2kδbmk+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))


따라서 (4) 지점에서 K = n 및 b = O (log n)으로 설정하고 RAM이라는 단어를 실행한다고 가정하면 실행 시간은 입니다. 권리? O(nlog2n)
Jeffε

O(nlogn)O(k+b)

2
bO(logn)O(nlogn)M(O(logn))=1

"알고리즘의 설계 및 분석"에 관한 Aho, Hopcroft 및 Ullman의 책을보고 비트 모델의 알고리즘과 관련 문제에 대해 자세히 설명합니다.
찬드라 체 쿠리

그러나 내가 기억하는 한, 그들은 비트 모델에서 "수 이론 FFT"에 대해서만 논의합니다.
Markus Bläser

8

이 답변은 완전한 답변은 아니지만 관련 논문을 소개하고 문헌에서 특정 질문에 대한 답변을 추출하는 것이 쉽지 않은 이유를 부분적으로 설명 할 수도 있습니다.

질문으로 시작하겠습니다. 왜이 질문에 대한 답을 알고 싶습니까? 일반적으로 이러한 종류의 문제에 관심이있는 사람들은 실제로 실제 응용 프로그램을위한 고성능 FFT를 구현하는 사람들입니다. 이러한 사람들은 특정 하드웨어 및 소프트웨어 제약 조건에서 성능을 최대화하는 것보다 이상적인 계산 모델에서 점근 적 복잡성에 덜 신경을 씁니다. 예를 들어, West에서 가장 빠른 푸리에 변환 의 개발자는 다음과 같이 논문을 작성합니다.

최선의 선택은 레지스터 수, 명령 대기 시간 및 처리량, 캐시 크기 및 연관성, 프로세서 파이프 라인 구조 등과 같은 하드웨어 세부 정보에 따라 다릅니다.

이론가들은 일반적으로 자신의 손에 얽매이고 싶지 않은 문제이지만 실제 구현에서는 매우 중요합니다. 이론가가 "RAM 모델에서 절대 최고의 점근 적 비트 복잡도를 알아 냈다"고 선언하면, 실무자는 "좋습니다."라고 말하지만, 이론적 인 결과는 그 목적에 쓸모가 없을 수도 있습니다.

그렇게 말하면서, 당신의 최선의 방법은 수치 분석 문헌을 보는 것입니다. 예를 들어, Tasche와 Zeuner 는 FFT 알고리즘의 수치 안정성을 면밀히 검토했습니다. 실무자들 사이의 일반적인 합의는 주어진 양의 수치 정밀도를 달성하기 위해 " 실질적 요인"이라는 특정 숫자를 높은 정확도 로 미리 계산 하는 것입니다. 만하고 있다면 하나의 FFT를, 다음이 당신이 FFT 연산 많은 수의 위에 한 번 사전 계산의 비용을 법인에게 양도하지 않기 때문에 가장 빠른 방법을 될 수 없습니다. 여전히 최악의 반올림 오차에 대한 분석은 여전히 ​​귀하의 질문과 관련이 있습니다.


11024100

1
나는 정확하고 정직한 장학금에 대한 순수한 이론적 질문에 관심이 있습니다. 포인터 순회와 O (log n의 관점에서 분석 된, 그렇지 않으면 순수한 조합 알고리즘의 중간에 "여기서 우리는 모두가 O (n log n) 시간으로 실행을 알고있는 FFT를 사용한다"라는 내용을 읽는 것이 일반적입니다. ) 비트 정수 산술. 실제로, FFT의 약간의 변형을 사용하여 O (n log n) 시간에 정수 컨벌루션을 수행 할 수 있다면, 이것은 용서할 수 있지만 여전히 조잡합니다. 그렇지 않다면, 알고리즘을 구현하려고하는 빈약 한 schmuck은 잘못된 답변을 얻을 것입니다.
Jeffε

물론, 나는 내 질문에 대한 답변이 실제로 어떤 영향을 미칠 것으로 기대하지 않습니다.
Jeffε

2
정직한 장학금에 관한 한 Jeff는 FFT가 O (n log n) 링 작동을 요구한다고 말하는 것으로 충분하지 않습니까? 이것이 FFT 알고리즘의 복잡성을 측정하는 자연스러운 방법입니다. 모든 것을 하나의 특정 계산 모델로 변환하려는 동기는 보이지 않습니다. 정밀 비트 수를 추적하는 것이 중요한 위치를 증명하려는 정리가 있습니까? 당신의 불쌍한 슈멕에 관해서는, 나는 그가 "오답"을 얻는 것을 사지 않습니다. 실제 구현에서 여기에 묻는 질문은 지배적 인 관심사가 될 가능성이 거의 없습니다.
Timothy Chow

O(nlogn)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.