【发布时间】:2012-06-26 14:19:07
【问题描述】:
我需要将 20-40 字符大小的数字压缩为 6 字符大小的数字。到目前为止,我已经尝试了 Huffman 和一些 Zip 算法,但没有得到想要的结果。
有人可以为这项工作在 Java 中提供任何其他算法/API 吗?
例子:
Input: 98765432101234567890
Desired Output: 123456
请注意:我并不是说给定输入的输出必须为 12345。我只是说如果我指定 20 字节的数字,它应该被压缩成 6 字节的数字。
用法:压缩后的数字将输入设备(最多只能占用 6 个数字字符)。设备会将号码解码为原始号码。
假设/限制:
如果需要,客户端和设备(服务器)可以共享一些公共的 编码/解码数字所需的属性。
只能向设备发出一个请求,即应提供所有数据 在一个请求中,没有大块的小数据包
谢谢。
【问题讨论】:
-
如果您以二进制形式(原始数据)表示数字,则可以执行此操作。但即便如此,您仍需要 9 个字节来存储。
-
你所要求的是不可能的。
-
你需要实际压缩数字吗?还是您实际上需要的是哈希?
-
那你为什么不把数字分成6个字节的块呢?也许通过某种编码告诉设备有多少块。做你想做的唯一方法是如果有问题的数字共享某种属性,例如,如果它们都可以被 100 整除,那么你可以不存储最后 2 位数字。但是对于通用数字,您无法将单个 # 压缩为较小的 # 字节,至少不能,除非您有很多这样的数字要存储在单个 blob 中
-
您指定 Java,并说您有 6 个
chars。由于 Javachar是 16 位,因此提供了 96 位,足以对所有不超过 28 个十进制数字的数字进行编码。如果您需要处理更大的数字,并且对合法数字没有严格的限制,那根本不可能。