繁体   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