我要尋找以下情況最好的數據結構: 在我來說,我將有成千上萬的字符串,但在這個例子中,我明顯的原因要使用兩種。假設我有字符串「水」和「沃爾特」,我需要的是當字母「W」輸入兩個字符串被找到,並且當「Wat」輸入「水」時唯一的結果。我做了一個研究,但是我仍然不確定哪個是這個案例的正確數據結構,如果我不確定這會浪費時間,我不想執行它。所以基本上我現在的想法是「Trie」或「Suffix Tree」。看起來「Trie」會做到這一點,但正如我所說的,我需要確定。另外,實現不應該是一個問題,所以我只需要知道正確的結構。如果有更好的選擇,也請隨時告訴我。正如你可以猜到,像Dictionary/MultiDictionary這樣的普通結構不會工作,因爲這將是一個記憶殺手。我也計劃實施緩存來限制內存消耗。我很抱歉沒有代碼,但我希望我能得到答案。先謝謝你。數據結構進行搜索字符串
回答
你應該用戶Trie
。嘗試是已知最快的排序算法(burstsort)之一的基礎,它也用於拼寫檢查,並用於使用文本完成的應用程序。你可以看到詳細信息here。
謝謝大家,我的Trie現在工作很好。 –
實際上,如果你想要做的自動提示,然後存儲高達3-4個字符就足夠了。 我的意思是建議爲,當用戶鍵入「A」或「AB」或「ABC」和他類型的「ABCD」或更多的字符,你可以使用開始「ABCD」使用C#語言支持LAMDA表達式map.keys的時刻。
因此,我建議建立一個地圖,如: 地圖<焦炭,<地圖<焦炭,地圖<焦炭,設置<串>>>>>地圖; 因此,如果用戶輸入「a」,則查找地圖[a]並找到所有的孩子。
這看起來非常不現實和限制,我需要實現我自己的結構,因爲它必須使用3-4個類(1個抽象)。 –
基本上,如果你想在一個簡單的方法來實現,那麼你可以使用C#語言提供的結構,如LAMDA表達式來過濾根據您的需求是這樣的數據:
map.keys.select(K => {返回k.startsWith (「USER_INPUT」);因爲他們迭代收集和我提到,我將有成千上萬的條目}
不確定確切的語法 –
BVMR
Lambda表達式是緩慢的關於您的文章=>這種方式是內存殺手,形象。它與成千上萬的長字符串,這是我的第一個想法,但經過一些計算後,它顯示自己非常非常糟糕的想法。 –
- 1. 字符串索引的數據結構?
- 2. 用於搜索字符串的更快數據結構
- 3. 使用jsonpath進行字符串搜索
- 4. 使用OQL進行字符串搜索
- 5. 通過RAW數據類型進行字符串範圍搜索
- 6. 二進制搜索字符串數組
- 7. 二進制搜索字符串數組
- 8. 使用ASCII字符和進行二進制搜索字符串?
- 9. 搜索三數據結構
- 10. Python:解析字符串到子字符串進行搜索
- 11. 對非結構化字符串進行Boost正則表達式搜索
- 12. 數字搜索字符串
- 13. 在結構數組中搜索字符串
- 14. 如何搜索結構數組中的字符串?
- 15. 彈性搜索結構化數據的嵌套字段搜索
- 16. 數據包中的字符串搜索
- 17. 搜索字符串數據庫
- 18. 在數據庫中搜索字符串
- 19. 根據字符串列表進行近似搜索
- 20. 根據Python中的搜索詞對字符串進行分區?
- 21. 使用通配符進行快速搜索的表數據結構
- 22. 字符串搜索數組
- 23. 搜索字符數組串
- 24. 字符串數據結構支持追加,前插和搜索操作
- 25. 搜索MySQL數據庫的字符串架構
- 26. 春數據 - 蒙戈DB - 在多個搜索 - 字符串包含搜索結果
- 27. Java SQL數據庫搜索WHERE結果CONTAINS(字符串)
- 28. 字符串的最佳數據結構
- 29. Java樹字符串數據結構
- 30. 字符串集合的數據結構
這聽起來像你想建立某種自動完成功能。我會看看是否有一些可以使用的東西,而不是滾動自己的東西。 – Tim
您打算使用泛型? –
我的情況有點特殊,我找不到任何可以解決問題的方法。這裏的解釋很淺。 –