我有一個不會更改的大型靜態二進制文件(10GB)。字符串出現在另一個字符串中的次數
我希望能夠輸入小字符串(每個15字節或更低),然後確定哪個字符串是最不頻繁的。
我明白,如果沒有真正搜索整個二進制文件,我無法完全確定這一點,所以我知道這將是一個近似值。
構建一個樹/哈希表是不可行的,因爲它需要大約256^15字節,這是ALOT。
我有大約100GB的磁盤空間和8GB RAM將專門用於此任務,但我似乎無法找到任何方式來實現此任務,而不會實際上通過該文件。
我有儘可能多的時間,因爲我想準備大二進制文件,然後我需要決定哪些是最不頻繁的字符串很多次。
任何想法?
謝謝! 丹尼爾。
(順便說一句:如果它很重要,我使用Python)
你確定你真的想要近似嗎?取決於這是什麼類型的文件,不完整的抽樣可能是相當具有誤導性的。 – Thilo 2013-04-21 06:41:16
也許可以構建一個包含儘可能多的前綴的散列表,因爲您可以負擔得起存儲空間?您可以修剪不再出現的樹木。我不會稱之爲「逼近」,但可能是「上限」,並保證檢測不出現的字符串。 – Thilo 2013-04-21 06:45:26
我將不得不每次運行算法大約20,000次,以決定大約15個字符串(以選擇理想的字符串)。 (大10gb文件將始終保持不變)。 關於哈希表和前綴 - 我想過。我將回答這個問題作爲對下面提出的答案的評論 – Avenger 2013-04-21 07:00:37