2013-04-27 72 views
0

在我發佈之前,我搜索了這個,但我不能罰款幫助我的東西。 我正在使用java。我有一個300.000字的文件(已按字母排序)。 我想加載這些單詞的結構和搜索,如果一個字,我會通過 存在與否。我想要一些最適合字符串搜索的東西。我已經看到約 嘗試(後綴樹)和紅黑樹(TreeSet - 因爲我只需要鍵和 沒有值 - 在Java中)。最佳搜索數據結構

如果您考慮回答,請提供一些關於您的建議的效率 的解釋。謝謝。

EDIT 結構將通過加載文件被創建,並且不會有任何進一步 添加單詞的。 區分大小寫不是必需的。 我不知道是什麼聲音。我現在知道,但我不知道這是否會有所幫助。 該文件是一個字典(沒有翻譯,只是給定的語言的話)。

+0

是否區分大小寫?你在使用詞幹嗎?你計劃添加更多的單詞嗎?我個人使用嘗試。 – 2013-04-27 18:46:39

+1

如果你不得不使用JDK類,我會去'Set '。您可以通過其一些實現來備份它:「HashSet ','LinkedHashSet '或'TreeSet ',這取決於您在使用」Set 「時的需要。 – 2013-04-27 18:46:56

+0

我不需要,但對我來說會更容易。你爲什麼不把它作爲答案發布?我編輯了我的問題。請提供您的意見。你會如何做到這一點?感謝您的幫助 – alkis 2013-04-27 18:57:28

回答

2

哈希將是您的最佳解決方案。它在不變的時間內搜索到對於logset(n)時間的樹集。

如果您在創建時聲明足夠大的設置,您還可以在常量時間內進行存儲。

http://docs.oracle.com/javase/6/docs/api/java/util/HashMap.html

建立將是時間:N,你需要有包含在一個單獨的結構有序集合。

這是一個優化的解決方案,用於搜索不是用於存儲器或添加數據的重複項。

+1

我建議您鏈接到'HashSet',因爲OP沒有鍵/值對。 – jlordo 2013-04-27 18:54:30

+0

'LinkedHashSet'也可以使用'hashCode's工作。 – 2013-04-27 18:56:25

+0

隨着你的編輯,我會說一個HashMap是足夠的。您創建集合(300.000)的操作,並可以從那裏讀取一個(恆定時間)操作。 – Glyb 2013-04-27 19:02:22