如何存储 50,000 个英语单词,以便尽可能少地占用内存
本文关键字:尽可能 内存 英语单词 何存储 存储 | 更新日期: 2023-09-27 18:32:35
我必须在内存中存储~50,000个英语单词,我想知道在内存占用(和加载速度)方面最好的数据结构是什么。会是特里吗?如何将其序列化为文件?还有比这更好的吗?
从本质上讲,一旦将~50,000个单词加载到内存中,我只需要检查该单词是否存在。
好吧,根据您提供的指南,一个简单的List
会更好。
获取时间显然比Trie
或Dictionary
慢,但是
"就内存占用(和加载速度)而言"
它将需要很少的内存开销,并且加载速度更快(因为没有构建索引/前缀数据结构)。
有关一些内存比较详细信息,请参阅此博客文章(在 JavaScript 中,但仍适用)。
根据这个答案,字典类就是你需要的。根据 MSDN 文档,应使用 TryGetValue 方法来访问数据:
如果代码经常尝试访问,请使用 TryGetValue 方法 不在字典中的键。使用此方法更多 比捕获项抛出的 KeyNotFoundException 更有效 财产。
是的,尝试听起来不错。对于序列化,您有两种选择:
- 使用原始单词列表并重建 trie。我猜它应该足够快,但你可能想分析它。
- 只需对类型使用正常的 .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