首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在一个小的空间里安装一个大单词词典,对准确性的影响最小?

如何在一个小的空间里安装一个大单词词典,对准确性的影响最小?
EN

Stack Overflow用户
提问于 2016-05-03 18:17:36
回答 2查看 159关注 0票数 1

我试图实现一个字玩游戏使用的微控制器,它只允许30 to的数据。为此,我需要从允许单词的特定字典中查找单词,该字典在未压缩时大小几乎为4MB。

我不需要每次都给出正确的答案,这样我就可以在准确性上妥协。有什么方法可以使在30 of的空间内以最小的精度()安装一个4MB的字典?

我已经尝试过使用优化的‘trie’数据结构(如建议的这里 ),使用压缩的trie生成器这里,它将大小从4MB降到740 KB,但我想不出一种方法使其更小,而又不丢弃大量的单词。

“trie”总是能给我正确的答案。是否有一种的方法,通过与精确的交换来缩小尺寸,并制定出一种结构,在大多数情况下可能给我正确的答案?也许我可以用一个机器学习模型或者其他与之相关的东西?

我知道这几乎是不可能的。但是游戏的设计并不需要精确的答案。即使是25%的准确度也是合理的。

在字典符合那么大的尺寸之前,我可以省略最长的单词。但在这种情况下,这可能不是最好的方法。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-05-03 20:47:05

不幸的是,我必须同意这里出现的协商一致意见。我已经编写了一些类似的软件(一个拼字游戏机器人),所以我引用了我的代码并进行了一些计算。我使用SOWPODS字典,它实际上比您所描述的要小得多-- 267,751个单词,未压缩的占2707014字节。

使用trie数据结构对于实现AI来玩像拼字游戏这样的游戏至关重要,这不仅是因为它减少了内存中字典的大小,还因为它的基本结构大大降低了搜索功能的计算复杂度。当你尝试可能的排列,你可以立即停止,一旦你击中一片叶子在trie。我之所以提到这一点,是因为如果您试图为此使用Arduino,您将不可避免地需要确保代码在速度方面非常高效。

但是,为了使用trie来确保合理的性能,这也意味着您需要在节点之间建立连接,在32位架构上进行简单的实现,这些链接将占用每个节点4个字节。您可能会实现更高级的逻辑,以减少节点存储偏移量,每个偏移量为2个字节(2^15用来指向内存中的偏移量,并将额外的位作为该节点是否代表一个单词的指示)。但即使如此,这也意味着您需要trie来拥有15K节点(实际上,因为这是合理的,所以您也需要一些代码。:)

我试着限制单词的最大大小,看看有什么必要使节点数量下降到足够远……坏消息是,你只能存储4个字符的长度!以下是每个最大大小的节点数:

代码语言:javascript
运行
复制
15: 589315
14: 572754
13: 546969
12: 508959
11: 456252
10: 387321
9: 304186
8: 212237
7: 126700
6: 63605
5: 25776
4: 8208

因此,从根本上说,当你减少字典的大小时,使用更复杂的算法就不再有价值了。只是没有足够的内存让它正常工作。

为了响应使用机器学习模型的想法,我的经验是,构建一个能够达到某种合理精度的功能模型通常需要相当大的内存,而获得合理的性能需要中等功能的硬件,即使只有执行预测。(培训非常昂贵,但你可以离线完成。)

甚至从磁盘中读取数据库也是不可能的,这取决于所需的效率。缓存只能将您带到目前为止。

老实说,我认为@TypeKatz的建议是最合理的。Arduino并不是为这类应用程序设计的,所以最好的方法是将计算成本高、内存密集型的处理卸载到外部设备上。您可以在串口上使用附加设备,或者投资于Wifi sheild,并与附近的服务器进行通信。

不管怎样,祝你好运!

票数 1
EN

Stack Overflow用户

发布于 2016-05-03 18:31:50

在一个30 4MB的空间中安装一个4MB的字典,以最小的准确性损失?

字典文件很可能是每行一个单词的格式,对吗?这是一种非常有效的存储单词列表的方法。

所以我想说,不,4MB的数据永远不会,永远不适合在30 So的空间内。没有压缩,没有有效存储,现在没有,永远没有。

想想看: 4MB实际上是你30 of限制大小的100倍以上。显然,您必须在磁盘上遍历字典,也许还需要缓存结果。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37011529

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档