1

我必须在内存中存储约 50,000 个英文单词,我想知道就内存占用(和加载速度)而言,最好的数据结构是什么。会是特里吗?我如何将其序列化为文件?还有什么比这更好的吗?

本质上,一旦将大约 50,000 个单词加载到内存中,我只需要检查该单词是否存在。

4

4 回答 4

1

好吧,根据您提供的指南,一个简单的List会更好。

获取时间显然会比 a Trieor慢Dictionary,但是

“就内存占用(和加载速度)而言”

它将需要很少的内存开销,并且加载速度更快(因为没有构建索引/前缀数据结构)。

有关一些内存比较的详细信息,请参阅此博客文章(在 JavaScript 中,但仍然适用)。

于 2012-04-30T06:52:37.397 回答
0

根据这个答案,Dictionary类是您所需要的。根据 MSDN 文档,您应该使用TryGetValue方法来访问您的数据:

如果您的代码经常尝试访问不在字典中的键,请使用 TryGetValue 方法。使用此方法比捕获 Item 属性抛出的 KeyNotFoundException 更有效。

于 2012-04-30T06:12:07.667 回答
0

建议使用 Dictionary 对象。阅读这些:

用于只读字典访问的最有效的内存数据结构

为什么字典比哈希表更受欢迎?

有关实施的帮助,请阅读以下内容:

http://msdn.microsoft.com/en-us/library/xfhwa508.aspx

要序列化字典对象或哈希表,请阅读此参考:

http://blogs.msdn.com/b/adam/archive/2010/09/10/how-to-serialize-a-dictionary-or-hashtable-in-c.aspx

于 2012-04-30T06:13:52.887 回答
0

是的,trie 听起来不错。对于序列化,您有两个选择:

  1. 使用原始单词列表并重建 trie。我猜它应该足够快,但你可能想要分析它。
  2. 只需对该类型使用普通的 .NET 序列化并将其转储到文件中。不过,这会阻止其他语言的程序读取它。
于 2012-04-30T06:23:57.603 回答