我有字符串矢量和必須檢查如果向量中的每個元素的存在5000個字的給定列表。 除了兩個嵌套循環的普通方法,有沒有更快的方式來做到這一點在C + +?快速字符串搜索?
快速字符串搜索?
回答
你應該把字符串列表到std::set。這是一個針對搜索進行優化的數據結構。查找給定元素是否在集合中是一種比迭代所有條目快得多的操作。
當您已經在使用C++ 11時,您還可以使用std::unordered_set,因爲它是作爲散列表實現的,所以查找速度更快。
這應該是針對學校/大學的:準備好解釋這些數據結構如何加快速度。當你的導師要求你解釋你爲什麼使用他們時,「互聯網上的一些人告訴我」在課本中不太可能爲你贏得一張貼紙。
哈哈,不,如果這是爲了學校,會提到它。 這是我的一個usaco問題代碼的一部分。 – ofey
你可以把單詞列表中的std::unordered_set。然後,對於向量中的每個元素,只需測試它是否在O(1)的unordered_set中。你會有一個預期的O(n)複雜性(看看評論,看看爲什麼它只是預期)。
這並不完全是事實。必須計算每個字符串的散列值,並且必須至少比較一次字符串。每一個都與字符串總數無關(在預期的情況下),但值得一提的是。雖然最糟糕的情況極不可能,但保持正確並說*預期*時間爲O(1)是很好的風格。 – delnan
你完全正確。結果我改變了我的答案。謝謝。 –
你可以排序的載體,那麼你可以用一個「循環」解決這個問題(採取了你的字典是太排序),這意味着爲O(n)在排序的成本不計。
所以,你有一個字符串矢量,具有一個或多個字,每個字符串,你有一個載體,這是一個字典,你應該確定哪些單詞在字符串中的向量也都在字典?字符串的矢量是一個煩惱,因爲你需要看每個單詞。我首先創建一個新的矢量,將每個字符串拆分爲單詞,並將每個單詞推入新的矢量。然後對新矢量進行排序並通過std::unique
算法運行以消除重複。然後對字典進行排序。然後通過std::set_intersection
同時運行範圍寫的結果。
- 1. 快速搜索數組中的字符串並返回索引
- 2. 快速搜索許多字符串的許多字典鍵
- 3. 快速搜索字典
- 4. 快速搜索
- 5. 用於在字符串中搜索子字符串的快速算法
- 6. 在Mysql數據庫中搜索字符串的速度更快
- 7. Mongo中的快速子字符串搜索
- 8. 快速動態模糊搜索C#中的100k +字符串#
- 9. 尋找更快速的方式來執行字符串搜索
- 10. 快速搜索C++中的字符串排序列表
- 11. 快速字符串搜索像startsWith()不等於()
- 12. 類似的子字符串快速搜索
- 13. 在Visual Studio 2015項目中快速搜索多個字符串
- 14. 如何快速搜索字符串內巨大數組的值?
- 15. 如何快速搜索Excel文件中的字符串
- 16. 加快字符串搜索算法
- 17. 搜索字符串的最快方法?
- 18. 子串的快速範圍 - 帶通配符的搜索字符串
- 19. 快速查詢不搜索,搜索速度慢,但在SSMS中快速搜索
- 20. Magento快速搜索
- 21. Android快速搜索
- 22. MySQL全文搜索:需要快速插入和快速搜索
- 23. 從字符串快速startIndex
- 24. AnyObject以快速字符串
- 25. 查找字符串快速
- 26. 按序列號搜索會比搜索字符串更快嗎?
- 27. 與列表搜索和設置搜索相比,爲什麼字符串搜索速度最快?
- 28. 與快速搜索搜索插件
- 29. 快速搜索字詞數組
- 30. 快速搜索字典中的鍵
是它擺在首位,而不是一個列表來填充關聯容器的選擇嗎? –
是否可以對5000個單詞列表進行排序?如果是,那麼在排序列表中,您可以在向量中查找字符串。 – Satyajit
你希望字符串匹配*一個完整的*在你的設置,或者是它足夠的組中的一個*包含*一個你正在尋找? –