2015-03-01 13 views
19

Khi nhân các số rất lớn, bạn sử dụng phép nhân dựa trên FFT (xem Schönhage–Strassen algorithm). Vì lý do hiệu suất tôi đang lưu vào bộ nhớ đệm các yếu tố xoắn. Vấn đề là đối với số lượng lớn (Gigabyte-sized) Tôi cần các bảng FFT có kích thước 2^30 trở lên, chiếm quá nhiều RAM (16 GB trở lên). Vì vậy, có vẻ như tôi nên sử dụng một thuật toán khác.Cách nhân các số có kích thước terabyte?

Có một phần mềm được gọi là y-cruncher, được sử dụng để tính Pi và các hằng số khác, có thể nhân các số có kích thước terabyte. Nó sử dụng một thuật toán được gọi là Hybrid NTT và một thuật toán khác được gọi là VST (xem A Peak into y-cruncher v0.6.1 trong phần Thuật toán phép nhân VST).

Có ai có thể làm sáng tỏ một số thuật toán này hay bất kỳ thuật toán nào khác có thể được sử dụng cho số nhân với số lượng có kích thước?

+4

Tôi đã bỏ phiếu này là "quá rộng" vì câu trả lời hay cho "cách nhân số nguyên ngoài lõi hoạt động?" có thể sẽ không ngắn. Biết bí mật là một người đóng góp SO tích cực, tuy nhiên, tôi khá vui khi rút lại phiếu bầu của tôi nếu ai đó xảy ra để đưa ra một câu trả lời hay. – tmyklebu

+0

Bạn có muốn biết cách thực hiện 1234567890^2 không? Tôi không biết câu hỏi của bạn là gì. –

+0

Hãy nhớ trong lớp học khi bạn nhân cột, thực hiện và sau đó thêm ... Điều tương tự, nhưng bạn không phải làm điều đó cho mỗi quyền lực của 10 ... chỉ mỗi 2^n (trong đó n là số bit trong loại số nguyên lớn nhất của bạn) – technosaurus

Trả lời

5

FFT có thể được thực hiện trên cùng một mảng với số lượng bộ nhớ bổ sung không đổi (có thể cần phải trao đổi số thông minh). Vì vậy nó có thể được thực hiện trên đĩa cứng là tốt. Trong trường hợp xấu nhất đó là một lần đăng nhập (N) * N lần truy cập đĩa. Nó có vẻ chậm hơn rất nhiều sau đó làm nó trên RAM nhưng độ phức tạp tổng thể vẫn như cũ.

+1

Độ phức tạp có thể vẫn giữ nguyên, nhưng [thời gian đọc thực tế nhiều, chậm hơn nhiều] (https://gist.github.com/jboner/2841832). Đừng quên rằng những yếu tố liên tục quan trọng trong thực tế. – wchargin

+0

đó là nhật ký (N) lần truy cập đĩa cứng tuần tự của toàn bộ mảng, nên nhanh hơn nhiều so với truy cập ngẫu nhiên. nếu bạn thực hiện FFT một cách thông minh (sắp xếp lại số ở đầu). –

+0

Đối với số lớn (> 4 GB), tôi có thể ghép 10 bit hoặc ít hơn thông qua FFT thành một điểm dữ liệu phức tạp (2 đôi = 128 bit), vì vậy tôi phải viết 12,8 lần kích thước của số thực nếu tôi làm FFT trên đó . Điều này sẽ không hiệu quả lắm. – iblue

Các vấn đề liên quan