Một tệp có chứa số lượng lớn (ví dụ.10 tỷ) các chuỗi và bạn cần phải tìm các chuỗi trùng lặp. Bạn có sẵn N hệ thống. Bạn sẽ tìm thấy các bản sao như thế nàoTìm các chuỗi trùng lặp trong một tệp lớn
Trả lời
Tách tệp thành các phần N. Trên mỗi máy, nạp càng nhiều phần vào bộ nhớ càng tốt, và sắp xếp các chuỗi. Viết các khối này vào dung lượng lưu trữ trên máy đó. Trên mỗi máy, hợp nhất các khối thành một dòng duy nhất, sau đó hợp nhất luồng từ mỗi máy vào một luồng có chứa tất cả các chuỗi theo thứ tự sắp xếp. So sánh từng chuỗi với chuỗi trước đó. Nếu chúng giống nhau, nó trùng lặp.
Để hợp nhất các đoạn thành một dòng, bạn sẽ phải tải tất cả các bản ghi trong bộ nhớ. Đối với tệp bản ghi 1 triệu, tất cả các bản ghi 1 triệu sẽ phải nằm trong bộ nhớ ở bước hợp nhất cuối cùng trong thuật toán ở trên phải không? Nếu có, thì đánh bại mục đích. –
@AndyDufresne "Để hợp nhất các đoạn thành một dòng, bạn sẽ phải tải tất cả các bản ghi trong bộ nhớ." Không, bạn sẽ không. Bạn chỉ cần đủ bộ nhớ để tải chuỗi tiếp theo từ mỗi đoạn cùng một lúc, để so sánh chúng. Khi so sánh đã được thực hiện, chuỗi tiếp theo sẽ chiếm không gian bộ nhớ đó. – erickson
Tôi không hiểu thuật toán hợp nhất của bạn. Giả sử chúng ta có 1 triệu bản ghi và chỉ có 5k bản ghi có thể được nạp vào bộ nhớ. Từ những gì tôi đã hiểu, đầu tiên tôi cần phải chia nhỏ tập tin thành từng phần với 5K bản ghi. Sau đó sắp xếp tất cả các bản ghi trong mỗi tệp bản ghi 5k và ghi lại. Để hợp nhất hai tệp bản ghi 5k, tôi sẽ phải tải 10k bản ghi trong bộ nhớ phải không? Nếu đây không phải là ý của bạn, bạn có thể giải thích các bước để tìm bản ghi trùng lặp trong tệp bản ghi 1 triệu với giới hạn bộ nhớ chỉ tải 5k bản ghi. –
Câu trả lời của erickson có lẽ là câu trả lời có thể xảy ra bởi bất kỳ ai đặt câu hỏi này.
Bạn có thể sử dụng mỗi máy N như một cái xô trong một Hashtable:
- cho mỗi chuỗi, (nói chuỗi số i theo thứ tự) tính toán một hàm băm vào nó, h.
- gửi các giá trị của i và h tới số máy n để lưu trữ, trong đó n = h% N.
- từ mỗi máy, truy xuất danh sách tất cả giá trị băm mà đã nhận được nhiều hơn một chỉ mục với danh sách các chỉ mục.
- kiểm tra tập hợp các chuỗi có giá trị băm bằng nhau để xem liệu chúng có thực sự bằng nhau hay không.
Thành thật mà nói, với 10 tỷ chuỗi, bạn có thể làm điều này một cách đáng tin cậy trên 1 PC. Các hashtable có thể chiếm một cái gì đó như 80-120 GB với một băm 32 bit, tùy thuộc vào thực hiện hashtable chính xác. Nếu bạn đang tìm kiếm một giải pháp hiệu quả, bạn phải cụ thể hơn một chút về "máy", bởi vì nó phụ thuộc vào dung lượng lưu trữ của mỗi máy và chi phí tương đối của truyền thông mạng.
- 1. Tìm các từ trùng lặp trong chuỗi regex C/W
- 2. tìm kiếm các bản lặp dài lặp đi lặp lại trong một chuỗi lớn
- 3. Xóa các hàng trùng lặp khỏi một tệp lớn trong Python
- 4. Xóa chuỗi trùng lặp trong mảng chuỗi
- 5. Tìm hàng trùng lặp trong excel
- 6. Tệp .java trùng lặp trong Eclipse
- 7. Tìm mục trùng lặp trong một cột Oracle SQL
- 8. Tìm các mục trùng lặp trong Bộ sưu tập
- 9. Tệp trùng lặp trong Amazon S3
- 10. Tìm hàng trùng lặp/lặp lại trong phân cấp sql
- 11. xóa chuỗi trùng lặp và chuỗi trống
- 12. Làm cách nào để tìm các kết quả trùng lặp trùng lặp với regexp?
- 13. Git: Tìm các đốm màu trùng lặp (tệp) trong cây này
- 14. Xóa các hàng trùng lặp
- 15. Tìm dòng trùng lặp trong một tệp và đếm số lần mỗi dòng được sao chép?
- 16. Cách tìm các dòng trùng lặp trên 2 tệp khác nhau? Unix
- 17. C#: Tìm kiếm chuỗi lớn các chuỗi khác
- 18. Hỗ trợ khung Akka để tìm các thư trùng lặp
- 19. Tìm hàng trùng lặp với PostgreSQL
- 20. Làm thế nào bạn có thể loại bỏ các ký tự trùng lặp trong một chuỗi?
- 21. Xóa các chuỗi trùng lặp khỏi danh sách
- 22. truy vấn sql để tìm các bản ghi trùng lặp
- 23. Xóa các khai báo CSS trùng lặp trên nhiều tệp
- 24. Giá trị trùng lặp vì chuỗi SQL?
- 25. Xử lý các khóa trùng lặp trong một cây AVL
- 26. Xóa các ký tự trùng lặp khỏi chuỗi
- 27. Mảng tìm nạp MySQL thêm các giá trị trùng lặp?
- 28. Tệp trùng lặp trong tệp được xây dựng theo Gradle
- 29. Tham chiếu chuỗi có trùng lặp không?
- 30. xóa bỏ trùng lặp khỏi chuỗi trong PHP
Đây có phải là bài tập về nhà không? Điều này nghe có vẻ như bài tập về nhà. – SoapBox