问题:
我想压缩一个非固定长度的非负整数数组(但它应该是 300 到 400),主要包含 0、一些 1、一些 2。虽然不太可能,但也有可能拥有更大的数字。
例如,这是一个包含 360 个元素的数组:
0,0,0, 1 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1 , 0,0,0,0,0, 0,0,0,0,0,0,0,0,0, 1 ,0,0,0,0,0,0, 2 ,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0, 1,1 ,0,0,0,0,0,0, 0,0, 4 ,0,0, 0,0,0,0, 3 ,0,0,0,0,0,0,0,0,0, 1 ,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0, 2 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0, 1 ,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0, 1 ,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0, 1 ,0,0,0,0,0,0,0, 1 ,0,0,0,0,0,0,0, 1 5,2 ,0,0,0, 0,0,0,0, ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 1,2,1 ,0,0,0,0,0,0, 0,0, 1 ,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0。
目标:
目标是将这样的数组压缩成使用字母和数字的最短编码。理想情况下,类似于:sd58x7y
我试过的:
我尝试使用“增量编码”,并使用零表示任何高于 1 的值。例如:{0,0,1,0,0,0, 2 ,0,1} 将表示为:2,3 , 0 ,1。要解码它,一个人将从左到右读取,并写下“2 个零,一个,3 个零,一个,0 个零,一个(这将添加到前一个,因此有一个 2),1 个零,一个”。
为了消除分隔符(逗号)的需要,从而节省更多空间,我尝试仅使用一个字母数字字符来表示 0 到 35 的增量值(使用 0 到 y),同时将字母 z 保留为“35 PLUS the next character” . 我认为这被称为“变量位”或类似的东西。例如,如果一行中有 40 个零,我会将其编码为“z5”。
据我所知……结果字符串仍然很长(在上面的示例中大约有 20 个字符)。理想情况下,我想要8个字符甚至更短的东西。谢谢你的时间; 任何帮助或灵感将不胜感激!