快速字符串搜索
Fast string search?
我有一个字符串向量,必须检查向量中的每个元素是否存在于5000个单词的给定列表中。除了两个嵌套循环的普通方法之外,在C++中还有什么更快的方法可以做到这一点吗?
您应该将字符串列表放入std::集中。这是一个为搜索而优化的数据结构。查找给定元素是否在集合中是一项比迭代所有条目快得多的操作。
当您已经在使用C++11时,您还可以使用std::unordered_set,它的查找速度更快,因为它是作为哈希表实现的。
这是否适用于学校/大学:准备好解释这些数据结构是如何更快地管理的。当你的教练要求你解释你为什么使用它们时,"网上的一些人告诉我"不太可能在课堂上为你赢得贴纸。
您可以将单词列表放在std::unordered_set中。然后,对于向量中的每个元素,您只需要测试它是否在O(1)中的无序集合中。您将具有预期的复杂性O(n)(查看注释以了解为什么只期望它)。
你可以对向量进行排序,然后你可以用一个"循环"(假设你的字典也被排序)来解决这个问题,这意味着O(n)不计入排序成本。
因此,您有一个字符串向量,每个字符串都有一个或多个单词,您有了一个字典向量,您应该确定字符串向量中的哪些单词也在字典中?字符串的矢量是一个烦恼,因为你需要查看每个单词。我会从创建一个新的向量开始,将每个字符串拆分为单词,并将每个单词推入新的向量中。然后对新矢量进行排序,并通过std::unique
算法运行它以消除重复。然后把字典分类。然后通过std::set_intersection
运行两个范围以写入结果。
相关文章:
- 在对象数组中搜索字符串并返回相应值的函数
- 在 QTextEdit 中搜索字符串
- C++ 中用于搜索字符串模式的正则表达式
- 如何在文件中搜索字符串并打印包含该字符串的行
- 搜索字符串是否至少包含一次从 0 到 9 的所有数字的最有效方法
- 从文件中提取的数据中的C 搜索字符串失败
- 在数组中搜索字符串的所有术
- 在 main 中搜索字符串的结尾时出现分段错误,但不在函数C++中搜索
- 在字符串中搜索字符串序列
- c++搜索字符串列表中的特定字符串
- 从文件中读取一行,并在其中搜索字符串(c++)
- 在向量中搜索C++字符串s中的单词
- 在另一个进程的内存中搜索字符串的每个匹配项
- 当搜索字符串有空格时查找字符串
- 在结构向量中搜索字符串C++
- 搜索字符串中的第一个字符不同于"X"
- 搜索字符串(只查找完全匹配的字符串,不忽略大写或小写字符
- 如何在C++中搜索字符串数组
- 替换特定位置后出现的所有搜索字符串
- 搜索字符串以使用递归查找另一个字符串