有人建议使用压缩算法对20-30位的数字字符串进行操作吗?
答案 0 :(得分:8)
通过使用每个数字的二进制表示,您可以轻松地将30个字符字符串压缩到15个字节。例如,1592可以表示为一系列四位值:
0001 0101 1001 0010
当以两个四位值的组分组时,可以用标准ASCII表示为§Т
。
此外,如果您的字符串包含许多相同的连续数字,则可以实现Run-Length Encoding的变体。
答案 1 :(得分:3)
假设您可以使用浮点数,则可能有11个符号:
[0,1,2,3,4,5,6,7,8,9, .]
这意味着每个符号需要4位。 3位最多只能代表8个符号。您可以轻松地为每个符号使用4位并获得大量压缩。
如果你的字符串中只有整数位数,一个简单的解决方案是转换为十六进制数,你可以使用每个符号4位,同时获得更好的压缩比。 (因为没有带有16个符号的浪费位)
如果使用霍夫曼压缩,您将获得最佳比特/符号比率。你可以read more about Huffman compression here。
答案 2 :(得分:2)
将它设为2个15位数并将它们转换为2个64位整数?或者他们漂浮?
答案 3 :(得分:2)
将其分解为几个未签名的整数?
“9347692367596047327509604839”
变为:
9 347692367 596047327 509604839
答案 4 :(得分:1)
一个明显的解决方案是将它们“压缩”为二进制数字表示而不是字符串表示。有关示例库,请参阅this stack overflow问题。
答案 5 :(得分:1)
我肯定会选择最简单的解决方案,只需将它们存储为整数(大小合适,可以是32位,64位或128位,具体取决于需求)。使用支持字符的算法对其进行压缩会浪费大量空间,因为每个字符必须满足10个以上不同的值(0-9)。
答案 6 :(得分:1)
压缩数字的最常见方法之一(假设你有多个你想压缩的方法 - 它很难压缩一件事),正在使用delta encoding。它的工作原理是,如果您知道第一个数字是x,并且后面的数字相对相似,您可以将后续数字编码为(x + c1),(x + c2)等。
在此方案中,您只需要对整个x值进行一次编码,如果您的c值小于x,则可以节省大量空间。您也可以使用首先对数字进行排序的版本,然后您的delta指的是上次看到的数字而不是一个数字。使用这种方法,您可以更有效地覆盖更广泛的数字。