簡體   English   中英

快速字符串搜索?

[英]Fast string search?

我有一個字符串向量,必須檢查向量中的每個元素是否存在於5000個單詞的給定列表中。 除了兩個嵌套循環的普通方法之外,有沒有更快的方法在C ++中執行此操作?

您應該將字符串列表放入std :: set 它是為搜索而優化的數據結構。 查找給定元素是否在集合中是一種比迭代所有條目快得多的操作。

當你已經在使用C ++ 11時,你也可以使用std :: unordered_set ,它更快地進行查找,因為它是作為哈希表實現的。

這應該適用於學校/大學:准備好解釋這些數據結構如何變得更快。 當你的導師要求你解釋你使用它們的原因時,“互聯網上的一些人告訴我”不太可能在課本上給你一個貼紙。

您可以將單詞列表放在std :: unordered_set中 然后,對於向量中的每個元素,您只需要測試它是否在O(1)中的unordered_set中。 你會有一個預期的復雜性O(n)(看看評論,看看為什么它只是預期)。

你可以對矢量進行排序,然后你可以用一個“循環”解決這個問題(你的字典也被排序),這意味着O(n)不計入排序成本。

所以你有一個字符串向量,每個字符串都有一個或多個單詞,你有一個字典的向量,你應該確定字符串向量中的哪些單詞也在字典中? 字符串向量是一個煩惱,因為你需要查看每個單詞。 我首先創建一個新的向量,將每個字符串分成單詞,然后將每個單詞推入新的向量。 然后對新向量進行排序並通過std::unique算法運行它以消除重復。 然后對字典進行排序。 然后通過std::set_intersection運行兩個范圍來寫入結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM