【问题标题】:linux tools for highest compression of sorted integers用于最高压缩排序整数的 linux 工具
【发布时间】:2017-08-09 18:04:32
【问题描述】:

我正在寻找一个经过验证的 Linux 工具,专门用于:

  1. 简单的游程编码
  2. 已排序整数的压缩。

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


【解决方案1】:

对于 #1,使用 gzip 压缩压缩输出。在另一端,解压两次。 (gzip格式的最大压缩率为1032:1。对于高冗余数据,压缩结果本身是可压缩的。)

对于 #2,如果您没有时间编写一段超级简单的代码来为每个差异写入 5 位(0..30,其中 31 是转义码,后跟下一个没有差异的整数) ,那么你不可能完成你的项目。

【讨论】:

  • 如果您没有时间阅读问题,请不要回答。它明确而明确地说“紧密分布,尽管有尾巴”。它实际上是同一个句子的一部分。因此,它不能从 0 编码到 31。省去你的讽刺,它根本不合适和不成熟。这也不是一个项目或家庭作业,聪明的家伙 - 你真的在这个上打了一千个。
  • 如果您没有时间阅读答案,请不要提问。答案很明确地说“31 是转义码”,因此您将差异 0..30 编码为 5 位,但如果差异大于 30,则输入 31,然后输入您需要表示的任何位你最大的可能整数。
  • @cmo 顺便说一句,击球一千意味着完美。所以谢谢,我猜。
猜你喜欢
  • 1970-01-01
  • 2012-09-21
  • 2010-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-04
相关资源
最近更新 更多