文件包含大量(例如10億)字符串,您需要查找重複的字符串。你有N個系統可用。如何找到重複的文件在大文件中查找重複的字符串
回答
將文件拆分爲N個部分。在每臺機器上,儘可能多地將內容加載到內存中,然後對字符串進行排序。將這些塊寫入該機器的大容量存儲器中。在每臺機器上,將塊合併成單個流,然後將來自每臺機器的流合併到包含按排序順序排列的所有字符串的流中。將每個字符串與前一個比較如果它們相同,則是重複的。
要將塊合併爲單個流,您必須加載內存中的所有記錄。對於一個1mil的記錄文件,所有1mil記錄必須在上述算法的最後一個合併步驟的內存中?如果是的話,那就違背了目的。 – 2012-12-18 07:38:48
@AndyDufresne「要將塊合併爲單個流,您必須加載內存中的所有記錄。」不,你不會的。您只需要足夠的內存一次加載來自每個塊的下一個字符串,以便比較它們。一旦比較完成,下一個字符串將佔用該內存空間。 – erickson 2012-12-18 17:48:18
我不明白你的合併算法。假設我們有1密耳的記錄文件,並且只有5k條記錄可以加載到內存中。根據我的理解,我需要首先將文件分成N份,每份5K記錄。然後對每個5k記錄文件中的所有記錄進行排序並回寫。要合併兩個5k記錄文件,我必須在內存中加載10k記錄嗎? 如果這不是你的意思,你可以解釋一下在1mil記錄文件中找到重複記錄的步驟,只加載5k記錄的內存限制。 – 2012-12-19 09:31:03
埃裏克森的答案可能是任何人設置這個問題的預期。
你可以使用每個N個機組的在一個哈希表中的桶:對於每個字串
- (比方說串號我按順序)計算散列函數就可以了,H。
- 將i和h的值發送到機器編號爲n的存儲器,其中n = h%N,其中來自每個機器的n = h%N
- ,一起檢索收到多於一個索引的所有散列值h的列表,與索引列表。
- 檢查具有相同散列值的字符串集合,以查看它們是否實際相等。
老實說,儘管如此,對於100億個字符串,你可以在1臺PC上做到這一點。哈希表可能會佔用80-120 GB和32位哈希值,具體取決於哈希表的實現方式。如果你正在尋找一個高效的解決方案,你必須更具體一些你的意思是「機器」,因爲它取決於每個人擁有多少存儲空間以及網絡通信的相對成本。
- 1. 在2d字符串數組中查找重複的字符串
- 2. 如何在大字符串中查找重複的短語
- 3. 如何在文件中查找非重複字符串
- 4. 查找字符串中重複子字符串的數量
- 5. 查找字符串中最長的重複子字符串?
- 6. SQL:在字符串中查找連續的重複字符
- 7. 查找重複字符的最長的子字符串中的
- 8. 在.txt文件中查找字符串
- 9. 查找字符串中的第一個非重複字符
- 10. 查找字符串中的重複字符
- 11. Python - 查找非重複字符串列表中的字符
- 12. 查找給定字符串中的所有非重複字符
- 13. 查找4個字符串中最重複的字符
- 14. 索引列表查找字符串中的重複字符(Python)
- 15. 在字符串中查找重複 - 訂單複雜度
- 16. 查找文本文件中出現的最大字符串
- 17. 在C++中查找字符串中的重複條目
- 18. 如何使用VBScript在主字符串中查找重複的子字符串
- 19. 查找文件中的字符串
- 20. 查找文件中的字符串
- 21. 查找文件名中的字符串
- 22. 查找文件中的字符串
- 23. 查找文件中的字符串數
- 24. 查找文件中的字符串C++
- 25. 查找txt文件中的字符串
- 26. 查找文件中的字符串
- 27. 批處理文件在字符串中查找字符串
- 28. 在字符串中查找重複的項目
- 29. 在字符串中查找重複的單詞python
- 30. Java ArrayList,在字符串的一部分中查找重複項
這功課嗎?這聽起來像是作業。 – SoapBox 2010-10-09 18:23:55