繁体   English   中英

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

[英]How to store 50,000 English words so that it takes as little memory as possible

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

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

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

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

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

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

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

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

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

提出了一个Dictionary对象。 阅读以下内容:

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

为什么字典比哈希表更受青睐?

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

http://msdn.microsoft.com/zh-CN/library/xfhwa508.aspx

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

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

是的,这样做听起来很不错。 对于序列化,您有两种选择:

  1. 使用原始单词列表并重建特里。 我猜它应该足够快,但是您可能需要对其进行概要分析。
  2. 只需使用普通的.NET序列化类型并将其转储到文件即可。 但是,这可以防止其他语言的程序读取它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM