我必须在内存中存储约 50,000 个英文单词,我想知道就内存占用(和加载速度)而言,最好的数据结构是什么。会是特里吗?我如何将其序列化为文件?还有什么比这更好的吗?
本质上,一旦将大约 50,000 个单词加载到内存中,我只需要检查该单词是否存在。
我必须在内存中存储约 50,000 个英文单词,我想知道就内存占用(和加载速度)而言,最好的数据结构是什么。会是特里吗?我如何将其序列化为文件?还有什么比这更好的吗?
本质上,一旦将大约 50,000 个单词加载到内存中,我只需要检查该单词是否存在。
好吧,根据您提供的指南,一个简单的List
会更好。
获取时间显然会比 a Trie
or慢Dictionary
,但是
“就内存占用(和加载速度)而言”
它将需要很少的内存开销,并且加载速度更快(因为没有构建索引/前缀数据结构)。
有关一些内存比较的详细信息,请参阅此博客文章(在 JavaScript 中,但仍然适用)。
根据这个答案,Dictionary类是您所需要的。根据 MSDN 文档,您应该使用TryGetValue方法来访问您的数据:
如果您的代码经常尝试访问不在字典中的键,请使用 TryGetValue 方法。使用此方法比捕获 Item 属性抛出的 KeyNotFoundException 更有效。
建议使用 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
是的,trie 听起来不错。对于序列化,您有两个选择: