【发布时间】:2014-02-11 19:41:11
【问题描述】:
我正在尝试压缩整数列表,其中:
- 没有负数。
- item的取值范围是[1....28]
- 列表中总共有 2482113 项。
- 目前我使用 5 位 来存储每个数字。
-
“出现”统计如下
- 1 : 1242149
- 2 : 620038
- 3 : 309399
- 4 : 154983
- 5 : 77816
- 6 : 38601
- 7 : 19651
- 8 : 9790
- 9 : 4830
- 10 : 2447
- 11 : 1253
- 12 : 597
- 13 : 303
- 14 : 130
- 15 : 73
- 16 : 23
- 17 : 17
- 18 : 4
- 19 : 4
- 20:2
- 21:1
- 23:1
- 28:1
所以请告诉我压缩这种数据的最佳方法(估计压缩率 - 如果可能的话 - 非常感谢)。
【问题讨论】:
-
“什么是最佳比例”——我们怎么知道?
-
如果列表是一成不变的,从技术上讲,您可以用 0 位逃脱:没有要传输的信息,它始终是您刚刚发布的列表。
-
@delnan,你无法摆脱零位。至少,您需要发布列表中的信息。无论如何,该列表仅给出分布,而不是可能也很重要的顺序:-)
-
@paxdiablo 关于分发与顺序的好点,但假设完整列表是恒定且已知的,您可以摆脱零位:将列表硬编码到解密程序中,那么你不需要给它任何输入让它产生列表;-)
-
@delnan,好吧,从技术上讲,程序本身就变成了比特数,但是,因为我看到了笑脸,所以我不会争论这一点:-)
标签: algorithm list integer lossless-compression