【发布时间】:2014-08-31 10:32:48
【问题描述】:
我有以下问题。我必须在内存中存储多种语言的唯一单词列表,当然,当我添加新单词时,我必须检查新单词是否已经存在。
当然,这需要非常快,主要是因为字数庞大。
我正在考虑实现Suffix Tree,但我想知道是否有更简单的方法来处理一些已经实现的内部结构。
附:字数≈107.
【问题讨论】:
-
如果不需要找suffix,trie就够了,不需要suffix tree。此外,HashSet 可以以更少的工作量为您提供相当好的性能,在实现更复杂的东西之前进行基准测试并查看它是否足以满足您的需求。 (但要确保这是可修改的,所以如果你在几个月后发现哈希集还不够——你可以在不重写整个项目的情况下切换它)
-
从长远来看,检查具有 10^7 个项目的 HashSet 是否包含某个单词平均需要大约 250ns (插入大约 300ns,所以或多或少相同),在我i7 笔记本电脑。这意味着您可以在单个线程上每秒执行 400 万次此类操作。
-
我最终使用了字典。它是围绕 HashSet 实现的,所以性能很好(几乎和 HashSet 一样)。
标签: c# algorithm unique words suffix-tree