【发布时间】:2018-12-19 21:11:26
【问题描述】:
如何将一行整数压缩成更短的值?
喜欢: 输入:'1 2 4 5 3 5 2 3 1 2 3 4' -> 算法 -> 输出:'X Y Z'
可以反过来取回吗? ('X Y Z' -> '1 2 4 5 3 5 2 3 1 2 3 4') 注意:输入将仅包含 1-5 之间的数字,并且数字的总字符串将为 10-16 有什么办法可以将其压缩为 3-5 个数字?
【问题讨论】:
-
因为每个“数字”有五种可能性,即每个数字有 2.322 位熵。如果您最多有 16 个这样的数字,那么您在整个序列中最多有 37.15 位熵。正如@user3386109 所指出的,这肯定适合 64 位整数。对此进行编码的一种简单方法是对每个“数字”简单地使用连续的 3 位字段。
-
在 JS 中你可以像
parseInt("013424120123",5).toString(36);一样得到ad65j。不过,您的数字必须映射到 0-4。对于反向做喜欢parseInt("ad65j",36).toString(5);并得到13424120123。在左侧添加所需的多个0s。
标签: database algorithm math integer compression