|
|
1
13
见麦克罗伊 "Development of a Spelling List" 在 his pubs page 关于小型计算机拼写检查的经典老论文,其中的约束与你列出的约束出奇地吻合。详细分析了词缀剥离和两种不同的压缩方法:布隆滤波器和相关方案霍夫曼编码稀疏比特集;我可能更喜欢Bloom过滤器,而不是他选择的方法,这种方法以巨大的速度代价挤出了更多的kB。 ( 编程珠玑 关于这篇论文有一个简短的章节。) 另请参阅全文搜索系统中用于存储词典的方法,例如。 Introduction to Information Retrieval 与上述方法不同,这没有误报。 |
|
|
2
5
布隆过滤器( http://en.wikipedia.org/wiki/Bloom_filter 和 http://www.coolsnap.net/kevin/?p=13 )是一种数据结构,用于在某些拼写检查器中以非常紧凑的方式存储词典单词。然而,存在误报的风险。 |
|
|
3
4
我建议使用带衬垫的后缀树。单词表压缩良好,查找时间极佳。 |
|
|
4
2
综上所述:
我本来打算建议使用布隆过滤器,但这些过滤器有非零的误报。
相反,Programming Pearls谈到了一组类似的要求(
这采取了茎收缩的方法: 例如:send是root,因此可以添加预修复和后修复:
|
|
|
5
2
将单词存储为7位格式的连续后缀,可以获得30%以上的压缩比。我不知道这叫什么,但它可以很有效地转化为树结构。 前任。: a+n+d+s|an+d+y|和+es+roid 是26个字符,相比之下: 一 一 广告 像 和 任何 安第斯山脉 安卓 这是33。 考虑到以7位内容存储时12.5%的压缩比,压缩总量约为31%。当然,压缩比取决于单词列表的大小和内容。 将其转换为26根树结构可能会导致查找速度比将明文子字符串与平面文件进行比较更快。 仔细想想,如果你只使用26个字符加上两个分隔符,你可以用5位完成所有事情,这本身就是37.5%的压缩,使上述示例的压缩率超过50%。 |
|
|
6
2
我认为你最好的选择是 Compressed Suffix Tree / Compressed Suffix Array 。您可以在上面的链接中找到丰富的信息。这是一个正在进行的研究领域,确实非常有趣。 |
|
|
7
1
我不是这方面的专家,但不是 prefix tree 这几乎是标准的解决方案?它只存储一次单词的常见前缀。 |
|
|
8
1
对于纯压缩 Maximum Compression 该网站提供了一些4MB英语单词表的结果,最好的程序将其压缩到400KB左右。用于文本/单词压缩的其他一些压缩资源是 Hutter Prize page 以及 Large Text Compression Benchmark . |
|
|
9
0
高德纳提到 "Patricia trie" 在……里面 The Art of Computer Programming vol. 3 我从未在任何实际工作中使用过它,但也许这会有所帮助。 编辑:你的RAM限制是什么?如果你有比ROM更多的RAM,也许ROM中的数据压缩(需要解压缩到RAM中)是正确的选择。我想,如果你有一个中等但不是大量的RAM,从技术上讲,你也可以将数据结构的一部分作为压缩的blob存储在内存中,并使用最近最少使用的缓存来保存其中的几个blob,然后在不在缓存中时动态解压缩相应的blob。 |
|
|
feasega · 聚合物模拟-2个节点之间的最短路线,适用于所有节点 1 年前 |
|
|
Alisa Petrova · 在有向图中更改一对顶点以创建循环 1 年前 |
|
|
b39b332d · 使用C++标准库实现高效间隔存储 1 年前 |
|
ABGR · 二叉树的直径——当最长路径不通过根时的失败案例 1 年前 |
|
|
EpicAshman · 数独棋盘程序中同一列和同一行出现两次的数字 1 年前 |