我有一个算法,我已经创建了一个庞大的字符串集(字典)。现在我有另一个巨大的字符串流连续到达,需要查找是否存在于字典中。到目前为止,我能够实现这个场景。现在我希望如果任何字符串到达两次或多次,我需要将其标记为“现有”而不再搜索。我们怎样才能做到这一点?如果不以某种方式存储已解析的字符串,我无法想到任何方式。如果我们存储已经解析过的字符串然后检查每个字符串是否提前,那将是一个开销,它会破坏优化的意图。有什么想法吗?
答案 0 :(得分:2)
您不需要检查每个字符串,以便判断您之前是否曾见过。这种问题通常用hash table解决,它会让你知道一个元素是否在常量时间内在表中(好吧,它可以,但它取决于实现)。
或者您可以使用Bloom Filter,它可以快速告诉您是否还没有看到某个项目,尽管它有误报的缺点。即它可靠地告诉你是否有东西不在集合中,但是告诉你“可能”,否则你必须进行进一步的检查。
答案 1 :(得分:1)
哈希表的使用是最好的解决方案。它具有优化的功能,以便快速处理这项工作。将每个字符串简单地添加到hhashtable会给你一个隐含的检查。
答案 2 :(得分:0)
保持字符串数组排序。搜索将是O(log N)而不是O(N),这会带来巨大的性能提升。