如何存储 50,000 个英语单词,以便尽可能少地占用内存



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

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

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

获取时间显然比TrieDictionary慢,但是

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

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

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

根据这个答案,字典类就是你需要的。根据 MSDN 文档,应使用 TryGetValue 方法来访问数据:

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

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

  1. 使用原始单词列表并重建 trie。我猜它应该足够快,但你可能想分析它。
  2. 只需对类型使用正常的 .NET 序列化并将其转储到文件中即可。但是,这可以防止其他语言的程序读取它。

建议使用 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

最新更新