【发布时间】:2014-03-17 17:41:25
【问题描述】:
我有大约 200 万个字符串,我需要在 1 TB 的文本数据中搜索每个字符串。搜索所有这些并不是最好的解决方案,所以我正在考虑一种更好的方法来为所有字符串创建像 trie 这样的数据结构。换句话说,其中的每个节点都是一个单词的 trie。我想问一下,有没有什么好的算法、数据结构或库(C++)可以用于这个目的?
让我在这个问题上更具描述性,
例如,我有这些字符串: s1-“我爱你” s2-“你好吗” s3-“怎么了老兄”
我有很多文本数据,例如: t1-“嗨,我叫 Omid,我喜欢电脑。你们好吗?” t2-“你的每一个愿望都会实现,他们告诉我……” t3 t4 . . . t10000
然后我想考虑每个文本并搜索它们上的每个字符串。最后,对于这个示例,我只想说:t1 包含 s1,仅此而已。 我正在寻找一种有效的方法来搜索字符串,但不是每次都愚蠢地搜索每个字符串。
【问题讨论】:
-
我建议您形成一个字符串的哈希映射(无序映射),表示该字符串存在于您的哈希映射中。然后遍历您的文本并继续检查每个单词的哈希图,无论它是否存在。
-
基本问题:这是您只做一次的事情,还是您需要经常做的事情?如果您需要经常执行此操作,您要搜索的字符串、要搜索的文本或两者都在搜索之间更改吗?
-
re Abhishek Bansal:你的意思是一袋字?如果是,我应该说我可以找到我想要搜索的所有字符串单词。然后在迭代过程中,我会搜索每个单词,如果没有找到,那么将忽略许多字符串进行搜索。但是当您说哈希图时,我并没有关注您。为什么?这就是你的意思吗?
-
re Jerry:嗯,我需要在大量文本中迭代地搜索所有句子。但整个过程只需要完成一次。
-
这是 DNA 数据吗?我希望它不是书面文本,因为非常大的书籍都在兆字节范围内(圣经 4MB,莎士比亚全集:2MB)?如果你真的在尝试构建下一个谷歌并且已经收集了大部分互联网,那么你在寻找什么?
标签: c++ string search trie large-text