我有一个大文件,每行一个单词。整个文件已排序,我现在需要压缩它。我可以简单地使用GZIP,结果会非常好。但是我想知道是否有可能做得更好,因为知道我们正在处理已排序的单词列表。
以下是我的已排序单词列表的片段:
[...]
ABAISSAT
ABAISSATES
ABAISSE
ABAISSEE
ABAISSEES
ABAISSEMENT
ABAISSEMENTS
ABAISSENT
ABAISSER
ABAISSERA
ABAISSERAI
ABAISSERAIENT
ABAISSERAIS
[...]
使用前缀压缩文件会产生比GZIP更好的结果吗?
[...]
ABAISS AT ATES E EE EES EMENT EMENTS ENT ER ERA ERAI ERAIENT ERAIS
[...]
允许我使用我描述的那种压缩来压缩我的单词列表的算法是什么?还有其他想法我如何压缩数据?
P.S。我虽然使用Trie并且我实现了它。 Trie的最终大小是内存几乎与列表本身一样大,加载列表的时间非常长。出于这些原因,我决定不去那条路。
答案 0 :(得分:6)
您似乎在考虑front compression之类的内容,其中每个条目都是条目与前一个条目共享的最左侧字符数的计数,后跟剩余的非共享字符。使用您的数据的示例:
0, ABAISSAT
8, ES
6, E
7, E
etc.
结果仍然需要gzipping(或其他压缩)。
答案 1 :(得分:1)
您可以创建一个函数来计算两个连续单词之间的差异,将其应用于整个列表并将GZIP压缩(也需要将第一个单词保存为起点)。
这个功能会是什么样子?不确定,你必须试验一下。
这个想法是连续单词之间的差异很小(就信息而言)。
这与视频压缩中使用的概念相同(无论如何都是技术之一) - 连续帧将非常相似。