Tôi đang tìm kiếm các thuật toán sắp xếp có thể hoạt động trên một lượng lớn dữ liệu, tức là có thể hoạt động ngay cả khi toàn bộ tập dữ liệu không thể được giữ trong bộ nhớ chính cùng một lúc.
Ứng cử viên duy nhất mà tôi tìm thấy cho đến nay là sắp xếp hợp nhất: bạn có thể triển khai thuật toán theo cách nó quét tập dữ liệu của bạn tại mỗi hợp nhất mà không cần giữ tất cả dữ liệu trong bộ nhớ chính cùng một lúc. Sự thay đổi của loại hợp nhất tôi có trong tâm trí được mô tả trong bài viết này trong phần Sử dụng với các ổ đĩa băng .
Tôi nghĩ rằng đây là một giải pháp tốt (với độ phức tạp O (nx log (n)) nhưng tôi tò mò muốn biết liệu có các thuật toán sắp xếp khác (có thể nhanh hơn) có thể hoạt động trên các tập dữ liệu lớn không phù hợp với bộ nhớ chính hay không.
BIÊN TẬP
Dưới đây là một số chi tiết, theo yêu cầu của câu trả lời:
- Dữ liệu cần được sắp xếp theo định kỳ, ví dụ một lần trong một tháng. Tôi không cần phải chèn một vài bản ghi và sắp xếp dữ liệu tăng dần.
- Tệp văn bản ví dụ của tôi là khoảng 1 GB văn bản UTF-8, nhưng tôi muốn giải quyết vấn đề nói chung, ngay cả khi tệp đó là 20 GB.
- Nó không có trong cơ sở dữ liệu và do các ràng buộc khác, nó không thể.
- Dữ liệu được người khác đổ vào dưới dạng tệp văn bản, tôi có mã riêng để đọc tệp văn bản này.
- Định dạng của dữ liệu là một tệp văn bản: các ký tự dòng mới là dấu phân cách bản ghi.
Một cải tiến có thể có trong đầu tôi là chia tệp thành các tệp đủ nhỏ để sắp xếp trong bộ nhớ và cuối cùng hợp nhất tất cả các tệp này bằng thuật toán tôi đã mô tả ở trên.