【发布时间】:2012-09-20 17:15:36
【问题描述】:
我有一个小范围内的 n 个整数序列[0,k),并且所有整数都具有相同的频率f(因此序列的大小为n=f∗k)。我现在要做的是压缩这个序列,同时提供 随机访问(第 i 个整数是什么)。实现随机访问的时间不一定是 O(1)。我对以更高的随机访问时间为代价实现高压缩更感兴趣。
我没有尝试过霍夫曼编码,因为它根据频率分配代码(而且我所有的频率都是相同的)。对于这种特殊情况,也许我缺少一些简单的编码。
任何帮助或指点将不胜感激。
提前致谢。
PS:已经在 cs.stackexchange 中询问过,但在这里也要求提供更好的覆盖范围,抱歉。
【问题讨论】:
-
我无法想象如何在压缩它的同时保留保证的 O(1) 随机访问。您是否愿意接受更差的算法性能,而不仅仅是性能为 O(1) 的更差的常数乘数?
-
如果序列是真正随机的,那么你几乎无法压缩它。您可以为 log2(k) 位的每个整数使用最小大小表示,但除此之外,您将受到熵的支配。
-
@evilotto:整数在
[0, k)范围内,因此它们已经处于最小尺寸表示中。然而,我们并不是在谈论任何想象中的随机序列,因为它们都具有完全相同的频率。 -
如果
k = 256并且数据是完全随机的,我希望每个都具有(大部分?)相同的频率。给定每个整数 8 位表示,我会说它是不可压缩的,没有其他冗余来源。 -
所以分布不是随机的(每个数字的频率相同),而是顺序是随机的还是结构化的?例如0 0 0 0 1 1 1 1 2 2 2 2 是可压缩的,但真正随机的重新排列并没有那么多(至少从长远来看)。流中的结构可能会导致更多的压缩,而不仅仅是考虑频率,即使在极其偏斜的分布中也是如此。
标签: algorithm compression