Như những người khác đã lưu ý, bạn có thể sử dụng O (n) counting sort. Tuy nhiên có một số vấn đề khác mà bạn cần xem xét. Giả sử bạn đang lưu trữ các số nguyên 32 bit, vì vậy inte 100GB ~ 27e9.
Nếu tất cả các số nguyên đều giống nhau, thì nó sẽ xuất hiện ~ 27e9 lần, lớn hơn 32 bit int. Do đó, bộ đếm của bạn sẽ phải là số nguyên 64 bit.
Với 2GB RAM, bạn chỉ có thể lưu trữ ~ 125e6 bộ đếm trong RAM cùng một lúc. Nếu chúng ta không thể thực hiện bất kỳ giả định về sự phân bố của số nguyên, chúng ta sẽ có thể sở để:
- cá nhân tăng các quầy trên HD, hoặc
- bỏ qua tất cả các số nguyên chúng ta gặp phải không có trong mảng truy cập chúng tôi hiện đã lưu trữ trong RAM.
Tôi nghĩ tùy chọn thứ hai tốt hơn. Vì chúng tôi cần ~ 4e9 bộ đếm 64 bit và chỉ có thể lưu trữ 2GB, chúng tôi sẽ cần phải chạy toàn bộ mảng ~ 16 lần. Tùy chọn đầu tiên rõ ràng là không tốt nếu chúng ta xem xét việc gặp phải một chuỗi các số nguyên như 0,1 < < 31,0. Các bộ đếm này sẽ không được lưu trữ trong RAM cùng một lúc và do đó ít nhất phải ghi 2 HD.
Bởi vì điều này, tôi nghĩ về kích thước cụ thể của vấn đề (100GB), sắp xếp N-way merge sẽ tốt hơn, vì điều này chỉ yêu cầu đọc toàn bộ log_2 (100) ~ 8 lần.
Tuy nhiên, nếu người phỏng vấn ngay lập tức thay đổi câu hỏi thành "mảng 10TB, vẫn còn 2GB RAM", thì việc đếm sắp xếp sẽ dễ dàng giành chiến thắng.
đây có phải là một loại Bài tập về nhà không? và đặt một số mã mà bạn đã thử? – FosterZ
có thể trùng lặp của [Cách sắp xếp chuỗi giá trị 100 GB.] (Http://stackoverflow.com/questions/2566459/how-to-sort-100gb-worth-of-strings) – Gabe
Xem thêm http: // stackoverflow. com/questions/134158/how-would-you-sort-1-triệu-32-bit-số nguyên-in-2mb-of-ram/3961223 và http://stackoverflow.com/questions/3961245/how-to- phân loại-hàng-of-hàng-of-data-in-a-file-với-ít-ít-bộ nhớ – Gabe