【发布时间】:2017-08-09 18:04:32
【问题描述】:
我正在寻找一个经过验证的 Linux 工具,专门用于:
- 简单的游程编码
- 已排序整数的压缩。
1. 我有一个重复单词的排序列表,每行一个,1.5 Gb 文本文件(6.17 亿行)。有大约 200 个唯一词,长度从 1 到
我可以使用uniq -c“手动压缩”来获得一个 3.4 Kb 的文件,当 gzip 压缩时为 1.2 Kb。然后我可以用一个简单的 awk 函数进行“手动解压”。当然,经过测试、优化、维护的专用工具对于编写我自己的代码来说更可取,更不容易出错,更省时。
gzip --best 给出了一个 1.5Mb 的文件,对于这个特定的问题,这是一个非常糟糕的压缩比。
bzip2 --best 给出了一个 62 Kb 的压缩文件,这很好,但显然不是最佳的压缩率。而且它比简单的uniq -c 花费的时间要长得多。
一个直接实现运行长度编码的简单工具似乎是最佳选择,但我找不到任何标准和可靠的东西。
2. 我有一个正整数的排序列表,每行一个。每个整数大约在 100 万到 3 亿之间。没有算法模式或公式,它们是随机的。但是连续整数之间的差异紧密地分布在 0 到 30 之间,虽然有一个尾巴。
连续整数的差异(或差异的差异)的霍夫曼编码应该提供非常高的压缩比。但我找不到用于排序整数的简单专用工具。
Another SO answer 为这些问题提供了 C 库的链接,但我正在寻找一个维护的、独立的 Linux 二进制文件。
这些都是简单的问题,但我没有时间编写自己的代码、调试、测试、优化等。这是一个更大项目的一小部分。我很惊讶没有专门的 Linux 实用工具来解决这些问题。
【问题讨论】:
-
对于第二个,为什么不写一个简单的脚本来将原始列表映射到它们的连续差异?
-
我当然可以。但是有没有专门为压缩排序整数差而设计的工具可以使用它?例如,我不知道明确实现霍夫曼编码的工具。
-
我不知道,但如果我是你的情况,我会照你说的做。如果两个数字之间的差异在 0-30 的范围内,则压缩该数据集(需要 5 位或更少)会得到很好的结果。
-
您有时间阅读可接受的问题指南吗?具体来说:要求我们推荐或查找书籍、工具、软件库、教程或其他场外资源的问题对于 Stack Overflow 来说是无关紧要的,因为它们往往会吸引固执己见的答案和垃圾邮件。相反,请描述问题以及迄今为止为解决该问题所做的工作。
标签: encoding compression gzip huffman-code