我正在为包含 10 位数字的字符串编写压缩和解压缩函数。我认为,由于仅对 10 个字符进行操作,因此存在可以表示大字符串的小得多的字符串。压缩后的结果以 ISO-8859-7 编码,所以我可以在结果字符串中使用 256 个字符
例如,我想获取一个表示 1000 位数字的字符串(例如 this one)并“压缩它”。这些长度的数字超过了我正在使用的语言 JavaScript 中的数字类型。因此,数字操作/转换是不可能的。我使用的压缩软件(shoco)不压缩数字。完全没有。
我该怎么做呢?是否有某种算法可用于压缩数字?我不是在寻找执行速度,而是在寻找大多数数字的最佳压缩,而不仅仅是作为示例给出的数字。
最佳答案
如果您以三位数字为一组处理数字,则可以用 10 位来表示每个三元组,而浪费很少。然后,您“只”需要从 10 位三元组流中创建一个 8 位八位字节流,这将需要一定量的位移,但并不十分复杂。
假定您的号码由 3 位数字的倍数组成(您可以用前导零填充它)或者您知道它包含多少位数字(在这种情况下,您可以在末尾用尾随零填充它)。如果您将子序列编码为 50 位单元,您将有足够的代码空间来编码最多 15 位的数字序列,而不仅仅是 15 位,这将避免填充的需要。在一种使用 53 位浮点作为常见数字类型的语言中,您几乎无法摆脱这种情况,但这可能值得也可能不值得额外的复杂化。
关于javascript - 字符串中包含的以 10 为基数的大数字的最佳压缩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35375291/