数据压缩方案,数学

时间:2011-01-10 20:59:21

标签: math compression

我有大约42,000个24个随机数的列表,全部在[0,255]范围内。例如,第一个列表可能是[32,15,26,27,... 11]。第二个列表可能是[44,44,18,19,...... 113]。如何从每个列表中选择一个数字(这样我最终会得到一个大约42,000个数字的新列表),这样这个新列表最容易使用ZIP压缩?

- 这个问题与数学,数据压缩有关

2 个答案:

答案 0 :(得分:1)

ZIP文件格式使用DEFLATE作为其压缩算法。因此,您需要考虑该算法的工作原理并选择数据,以便算法易于压缩。根据维基百科文章,有两个压缩阶段。第一个使用LZ77来查找重复的数据部分,并用短引用替换它们。第二个使用Huffman coding来获取剩余数据并去除整个块中的冗余。这称为熵编码 - 如果信息不是非常随机(具有低熵),则代码用短符号替换常见事物,增加熵。

通常,具有大量重复运行的列表(即[111,2,44,93,111,2,44,93 ...])将在第一遍中压缩得很好。在其他随机内容中有大量重复数字的列表(即[111,34,43,50,111,34,111,111,2,34,22,60,111,98,2],其中34和111经常出现)将在第二遍。

要找到合适的数字,我认为最简单的方法就是对每个列表进行排序,然后合并它们,保持合并排序,直到获得42000个输出数字。你会在他们发生的时候得到跑步。这不是最佳的,你可能在每个输入列表中都有255,而你会错过使用这种技术,但这很容易。

另一种方法是将数字直方图编码为256个区间。突出的任何箱子都表示应该分组的数字。在那之后,我想你必须搜索序列。同样,对输入进行排序可能会使这更容易。

我刚刚注意到你有一个约束,你必须从每个列表中选择一个数字。因此,在这两种情况下,您都可以对每个列表进行排序,然后删除重复项。

此外,可以使用树生成霍夫曼代码,因此我想知道是否有一些神奇的树结构可以将数字放入其中,这将自动给出正确的答案。

答案 1 :(得分:0)

这让我觉得NP-complete,但我无法证明这一点。在外面,有大约7.45e + 57968(!)可能的配置进行测试。您似乎不能提前选择退出特定配置,因为不可压缩的初始部分可能会在以后大大压缩。

我对“良好”压缩的最佳猜测是计算整个百万元素集中每个数字的出现次数,并从每个列表中选择出现次数最多的数字。例如,如果每个列表中都有42,那么选择它只会为您提供一个包含42,000个相同值实例的可压缩数组。