2010-12-11 55 views
2

我有一個40MB(在這種情況下內存太大)我想要做的字符串列表「開始」查詢來提取匹配。任何人都知道這個數據結構很好?現有os操作系統實現的獎勵點數。如果事物已經存在,我會願意犧牲「開始於」完全匹配。基於磁盤的刻錄機聽起來很理想。超快速「開始」從磁盤查詢

+0

字符串是否有相同的長度?填充所有長度最長的一個會是一個問題? – thejh 2010-12-11 20:48:34

+0

什麼是字符串源的結構/體系結構?它是一個40GB的行分隔文本文件?這是垃圾郵件製作嗎? ;) – pstanton 2010-12-11 20:54:57

+1

它只有40 MB而不是GB,他們是個人條款。這基本上只是對一個術語(<40個字符)進行超快速存在檢查。我甚至可以爲此使用sql或lucene,但由於數據將是靜態的,我認爲我可以做得更好。 – ghempton 2010-12-11 21:03:59

回答

1

不能提出任何現有的庫,但我處理類似問題之前。如果您不打算動態修改列表,並且可以對文件中的字符串進行排序(用於二進制搜索),這很容易。

讓我們將您的40Mb分成幾乎相同大小的1000個塊,並保留內存中每個塊的第一個字符串。這將是一個包含1000個字符串的數組。他們是有序的,因爲原始列表是有序的。
當您需要執行查詢時,可以在該數組上使用二進制搜索。這會告訴你哪個塊結果字符串在哪裏。然後,您可以從磁盤讀取該塊(大約40kb)並搜索其內容。例如,如果數組的值爲["andrew", "brian", "donald", "john"],並且您搜索前綴"cris",那麼您知道所有的Cristophers和Cristians都在第二個塊中。