Độ phức tạp của tính toán biến đổi Fourier rời rạc?


18

Độ phức tạp (trên RAM số nguyên tiêu chuẩn) của việc tính toán biến đổi Fourier rời rạc tiêu chuẩn của một vectơ số nguyên là gì?n

Thuật toán cổ điển cho các biến đổi Fourier nhanh , không phù hợp [1] được quy cho Cooley và Tukey, thường được mô tả là chạy trong thời gian . Nhưng hầu hết các phép toán số học được thực hiện trong thuật toán này bắt đầu bằng các gốc đơn vị thứ phức tạp , là (đối với hầu hết ) không hợp lý, do đó việc đánh giá chính xác trong thời gian không đổi là không hợp lý. Vấn đề tương tự phát sinh với thuật toán thời gian ngây thơ (nhân với ma trận Vandermonde của các gốc phức tạp của sự thống nhất).n n O ( n 2 )O(nlogn)nnO(n2)

Thậm chí không rõ làm thế nào để thể hiện chính xác đầu ra của DFT (dưới bất kỳ hình thức hữu ích nào). Nói cách khác, không rõ ràng rằng DFT điện toán là thực sự có thể!

Vì vậy, giả sử chúng ta chỉ cần bit chính xác trong mỗi giá trị đầu ra. Sự phức tạp của việc tính toán biến đổi Fourier rời rạc, như là một hàm của ? (Để cụ thể, hãy thoải mái cho rằng là lũy thừa của )n b n 2bnbn2

Hay mọi trường hợp của "FFT" trong tài liệu thực sự có nghĩa là " biến đổi lý thuyết số nhanh "? [2]

Xem các câu hỏi liên quan của tôi về sự phức tạp của việc loại bỏ Gaussiancác con đường ngắn nhất của Euclide .

[1] Nó thực sự nên được gọi (một số tiền tố của) thuật toán Gauss-Runge-König-Yates-Stumpf-Danielson-Lánczos-Cooley-Tukey.

[2] Và nếu vậy, tại sao hầu hết các sách giáo khoa chỉ mô tả thuật toán số phức?


1
Tôi nghĩ đó là quan điểm của anh ấy: về lý thuyết bạn không phải lo lắng về , nhưng trong bất kỳ triển khai THỰC TẾ nào, bạn phải lo lắng về điều đó và lỗi có thể xảy ra. b
Suresh Venkat

1
Trên thực tế đây là một câu hỏi hay, mỗi bit chính xác bổ sung thêm vào cường độ tín hiệu (nhân với 2 ). Vì vậy, tôi nghĩ rằng câu hỏi sẽ hữu ích nhất nếu kích thước từ trung gian có thể được mở rộng! 3dB2
so với

3
Phân tích tính toán đã xem xét điều này, và các câu hỏi liên quan. Bài viết này tạo ra một sự phức tạp ràng buộc cho việc tính toán biến đổi Fourier trong khuôn khổ hiệu ứng Loại II của Weirauch. Các ràng buộc là nó là tuyến tính trong việc trình bày đầu vào (vô hạn, có giá trị thực). Cả đầu vào và đầu ra đều được xác định các tham số chính xác của wrt trong hệ thống này, vì vậy có thể có một cách để dịch cái này sang mô hình RAM.
Aaron Sterling

3
Hãy xem Phương pháp A trong bài viết của Schönhage và Strassen về phép nhân số nguyên. Nó sử dụng các biến đổi Fourier phức tạp với độ chính xác giới hạn. Tôi nghĩ rằng, nó cũng được mô tả trong Knuth Vol. 2.
Markus Bläser

2
Markus, Aaron: chuyển đổi thành câu trả lời?
Suresh Venkat

Câu trả lời:


9

Câu trả lời này là một biến thể của phân tích thuật toán đầu tiên ("Methode A") của Schönhage và Strassen để nhân các số nguyên dài.

Giả sử chúng ta muốn tính toán một FFT có độ dài . Chia tỷ lệ đầu vào của bạn sao cho tất cả các giá trị nhỏ hơn 1. Trước tiên chúng ta giả sử rằng chúng tôi tính toán với số học điểm cố định m -bit ( m bit sau điểm nhị phân). Hãy δ = 2 1 / 2 - m là ( "phức tạp") đơn vị của vị trí nhất. Hãy ω = exp ( 2 π i / K ) .K=2kmmδ=21/2mω=exp(2πi/K)

1) Người ta có thể tính xấp xỉ sao cho | ω j - ω j | ( 2 k - 1 ) δ cho tất cả 0 j K - 1 . Điều này có thể được thực hiện trong thời gian O ( K M ( m ) ) trong đó M ( m ) là thời gian cần thiết để nhân số m -bit. (xem Knuth Tập 2, tái bản lần thứ 3, trang 309).ωj|ωjωj|(2k1)δ0jK1O(KM(m))M(m)m

Nếu RAM nguyên tiêu chuẩn có nghĩa là chi phí logarit, thì . Nếu RAM nguyên tiêu chuẩn có nghĩa là RAM từ, thì M ( m ) = O ( m ) . (Schönhage và Strassen hiển thị trong "Methode A" làm thế nào để giảm thời gian tuyến tính phép nhân số m -bit thành m nhân với số bit O ( log m ) . Việc sau có thể được thực hiện với chi phí đơn vị.)M(m)=O(mlogm)M(m)=O(m)mmO(logm)

2) Các cổ điển Cooley-Tukey FFT tính hoạt động của hình thức . Chúng tôi sử dụng m -bit cố định điểm số học, những opertions trở thành một ' = t r u n c một t e ( b ' + ω ' j c ' ) . Nếu chúng ta biết b 'c ' lên đến một lỗi của ε , chúng tôi nhận một ' lên đến một lỗi của 2 ε + 2a=b+ωjcma=truncate(b+ωjc)bcϵa .2ϵ+2kδ

3) Sử dụng cảm ứng, nó rất dễ dàng để thấy rằng chúng tôi có được kết quả cuối cùng với lỗi . Để có được độ chính xác b cuối cùng, m k + log k + b + O ( 1 ) . (2k1)2kδbmk+logk+b+O(1)

4) Do đó thời gian chạy cuối cùng là .O(KkM(k+b))

Điều này cũng sẽ hoạt động với các số dấu phẩy động: 1) vẫn có thể được thực hiện với số học điểm cố định, 2) cũng đúng với các số dấu phẩy động.


Trong số học điểm cố định, tôi nghĩ, nó thậm chí có thể được thực hiện nhanh hơn. Trước tiên, chúng tôi giảm tính toán của FFT thành phép nhân đa thức bằng thủ thuật của Bluestein. Độ dài của các hệ số cần thiết để có được độ chính xác mong muốn phải là . Sau đó, chúng tôi giảm phép nhân đa thức thành phép nhân số nguyên dài. (Nối các hệ số cho một số dài và tách chúng bằng khối zero chiều dài O ( k + b ) .) Chiều dài của các số nguyên là O ( K ( k + b ) ) .O(k+b)O(k+b)O(K(k+b))


Vì vậy, từ điểm (4), đặt K = n và b = O (log n) và giả sử chúng ta đang chạy trên RAM từ, chúng ta sẽ có thời gian chạy là . Đúng? O(nlog2n)
Jeffε

Đúng. Thuật toán thứ hai thậm chí mang lại , giả sử rằng độ chính xác O ( k + b ) là đủ. (Tôi không thấy bất kỳ điểm nào tại sao điều này là không đủ, nhưng tôi đã không làm chi tiết.)O(nlogn)O(k+b)
Markus Bläser

2
BTW, nếu nhỏ như O ( log n ) , thì thuật toán đầu tiên cũng cho thời gian chạy O ( n log n ) kể từ M ( O ( log n ) ) = 1 . bO(logn)O(nlogn)M(O(logn))=1
Markus Bläser

Tôi tình cờ xem cuốn sách của Aho, Hopcroft và Ullman về "Thiết kế và phân tích thuật toán" và họ thảo luận về thuật toán trong mô hình bit và một số chi tiết liên quan.
Chandra Chekuri

Nhưng theo tôi nhớ, họ chỉ thảo luận về "FFT lý thuyết số" trong mô hình bit.
Markus Bläser

8

Đây không phải là một câu trả lời hoàn chỉnh, nhưng tôi có thể chỉ cho bạn một số giấy tờ có liên quan và cũng giải thích một phần lý do tại sao không dễ dàng để trích xuất một câu trả lời cho câu hỏi cụ thể của bạn từ tài liệu.

Hãy để tôi bắt đầu bằng cách hỏi, tại sao bạn muốn biết câu trả lời cho câu hỏi này? Thông thường, những người thấy mình quan tâm đến loại vấn đề này là những người phải đối mặt với việc thực sự thực hiện FFT hiệu suất cao cho một ứng dụng thực tế. Những người như vậy ít quan tâm đến sự phức tạp tiệm cận trong một số mô hình tính toán lý tưởng hóa hơn là tối đa hóa hiệu suất dưới các ràng buộc phần cứng và phần mềm cụ thể của họ. Ví dụ: các nhà phát triển Biến đổi Fourier nhanh nhất ở phương Tây viết trong bài báo của họ:

Sự lựa chọn tốt nhất phụ thuộc vào chi tiết phần cứng như số lượng thanh ghi, độ trễ và thông lượng của hướng dẫn, kích thước và tính kết hợp của bộ nhớ cache, cấu trúc của đường ống xử lý, v.v.

Đây là những vấn đề mà các nhà lý thuyết thường không muốn hờn dỗi, nhưng chúng có tầm quan trọng rất lớn trong việc triển khai thực tế. Nếu một nhà lý thuyết tuyên bố, "Tôi đã tìm ra độ phức tạp bit không triệu chứng tốt nhất tuyệt đối trong mô hình RAM," người thực hành có thể nói, "Thật tuyệt", nhưng có thể thấy kết quả lý thuyết đó vô dụng cho mục đích của mình.

Phải nói rằng, tôi nghĩ rằng đặt cược tốt nhất của bạn là nhìn vào tài liệu phân tích số. Ví dụ, TASche và Zeuner đã xem xét kỹ về tính ổn định số của thuật toán FFT. Điều này có thể vẫn không chính xác như bạn muốn, bởi vì sự đồng thuận chung giữa các học viên dường như là để đạt được một số lượng chính xác nhất định, cách tiếp cận thực tế tốt nhất là tính toán trước một số con số gọi là "các yếu tố xoay vòng" với độ chính xác cao. Nếu bạn chỉ thực hiện một FFT, thì đây sẽ không phải là cách tiếp cận nhanh nhất vì bạn không được khấu hao chi phí tính toán trước một lần của bạn qua một số lượng lớn các tính toán FFT. Tuy nhiên, phân tích của họ về lỗi vòng trong trường hợp xấu nhất vẫn có liên quan đến câu hỏi của bạn.


11024100

1
Tôi quan tâm như một câu hỏi lý thuyết thuần túy, vì lợi ích của học bổng chính xác và trung thực. Nó khá phổ biến để đọc "và ở đây chúng tôi sử dụng một FFT, như mọi người đều biết chạy trong thời gian O (n log n)" ở giữa một thuật toán kết hợp thuần túy, được phân tích theo thuật ngữ của con trỏ và O (log n ) -bit số học số nguyên. Trong thực tế, nếu tích chập số nguyên có thể được thực hiện trong thời gian O (n log n) bằng cách sử dụng một biến thể nhỏ của FFT, thì điều này có lẽ được tha thứ nhưng vẫn cẩu thả. Nếu không, bất kỳ schmuck nghèo nào cố gắng thực hiện thuật toán sẽ nhận được TRẢ LỜI SAU.
Jeffε

Và tất nhiên, tôi không mong đợi câu trả lời cho câu hỏi của mình có bất kỳ tác động nào trong thực tế.
Jeffε

2
Jeff, liên quan đến học bổng trung thực, không đủ để nói rằng FFT yêu cầu các hoạt động vòng O (n log n)? Đó là cách tự nhiên để đo độ phức tạp của thuật toán FFT. Tôi không thấy động lực để chuyển đổi mọi thứ thành một mô hình tính toán cụ thể. Có một số định lý mà bạn đang cố gắng chứng minh ở đâu là rất quan trọng để theo dõi số lượng bit chính xác? Đối với schmuck tội nghiệp của bạn, tôi không mua rằng anh ta sẽ nhận được "câu trả lời sai." Trong bất kỳ triển khai thực tế nào, câu hỏi bạn đặt ra ở đây rất khó có thể là mối quan tâm chính.
Timothy Chow

O(nlogn)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.