我想要一个简单的算法,通过编码将176位压缩到80位,然后再将它从80位解码到176位?
答案 0 :(得分:4)
由于pigeonhole principle,无法完成。
有9.5 * 10 ^ 52个不同的值可以用176位表示,但只有1.2 * 10 ^ 24个不同的值可以用80位表示。您不能将每个176位值映射到80位值。
如果可以,您可以通过重复压缩将80位的无限量数据拟合。
话虽如此,如果您对176位值有所了解,那么可能有办法实现。假设您知道较大的值只会有22个字面数字:例如字符串如“11223344556677889900”或“1111111111111111111111”。在这种情况下,可能的输入组将严重减少 - 您可以将每个值映射到80位值。
答案 1 :(得分:2)
这是不可能的。
176位数具有2 ^ 176个不同的组合。不可能将这些组合中的每一个表示为不同的80位数,其仅具有2 ^ 80个组合。这就像要求将4位数字压缩成3位数字再返回一样。
根据您使用的数据类型,这可能会造成损失。小心解释你在做什么?
答案 2 :(得分:0)
如果您想自己实现,请参考以下相当简单的算法:
http://en.wikipedia.org/wiki/LZ77_and_LZ78
如果你去谷歌更多,有一个页面详细解释它在实践中是如何工作的,我现在就找不到它。
或者,只需使用压缩库,例如zlib
(http://en.wikipedia.org/wiki/Zlib)。