Algorithm 压缩基62(0-9a-zA-Z)编码字符串
我需要将长度为20个字符的base62(0-9a-zA-Z)编码字符串压缩为15-16个字符的字符串,以便压缩其他信息。棘手的部分是压缩输出也应该是base62编码的。这能做到吗?非常感谢您的任何建议 谢谢 请参见-如果您尝试将100只鸽子放入10个洞中,有些洞将有多只鸽子。同样,对于您的问题,必须出现两个字符串压缩为同一个字符串的情况。在这些情况下,您将不知道将压缩字符串解压缩到哪个字符串 因此,不能对所有可能的输入以相同的编码压缩20到16个字符(甚至20到19个字符)Algorithm 压缩基62(0-9a-zA-Z)编码字符串,algorithm,encoding,compression,Algorithm,Encoding,Compression,我需要将长度为20个字符的base62(0-9a-zA-Z)编码字符串压缩为15-16个字符的字符串,以便压缩其他信息。棘手的部分是压缩输出也应该是base62编码的。这能做到吗?非常感谢您的任何建议 谢谢 请参见-如果您尝试将100只鸽子放入10个洞中,有些洞将有多只鸽子。同样,对于您的问题,必须出现两个字符串压缩为同一个字符串的情况。在这些情况下,您将不知道将压缩字符串解压缩到哪个字符串 因此,不能对所有可能的输入以相同的编码压缩20到16个字符(甚至20到19个字符) 如果输入具有一些定
如果输入具有一些定义特征,例如唯一的大写字符将是第一个字符,最后3个字符是数字出现的位置,等等,那么它将更加可压缩,并且可能是可行的 如果您有这样的特征(或者如果您想转换为具有足够空间的不同编码),您可以轻松地将任何编码中的字符串转换为唯一的数字,然后将该数字转换为不同编码中的字符串。这样做的方法是:
- 对于每个字符位置,从0开始为该位置允许的每个可能字符指定一个数字 因此,如果第一个位置允许“A”到“Z”和“A”到“Z”,则可以将0-25分配给“A”到“Z”,将26-51分配给“A”到“Z”。例如,“B”将是1
- 遍历字符串,将总数乘以当前位置允许的值的数目,然后将分配给该位置的字符的数目添加到总数中
- 将总数设置为将总数除以当前位置的允许值数的结果(向下舍入)
- 将当前位置设置为与上述除法的剩余部分相对应的字符
输出格式:1个小写字母(a-z),然后2个大写/小写字母(a-z或a-z)
输入:“Z35”
编号:10*(10*(26*0+25)+3)+5=2535
解释:我们以“Z”开头,开始时的总数是0,我们将其乘以大写字母数(26),然后将“Z”的值相加(25)。然后我们转到“3”,我们将这个总数乘以位数(10),然后加上“3”(3)的值,依此类推。
输出计算:
2535/26=97
2535%26=13,所以第一个字符=“n”(13+1=14个字母)
97/52=1
97%52=45,所以第二个字符=“t”(45-26+1=20个字母)
1%52=1,所以第三个字符=“B”
输出:“ntB” 输入格式的最大可能值:10*(10*(26*0+25)+9)+9=2599
输出格式的最大可能值:52*(52*(26*0+25)+51)+51=70303
可以转换吗?可以,因为70303>=2599
让它保持原样怎么样<代码>解码(编码数据)是身份功能,不是吗?目标字符串是ASCII还是例如16位unicode?不希望实现这一点。正如@H2CO3所说:“编码到压缩”将提供一个小的压缩提前,这将被“解码到base62”丢失。输出长度与输入长度相同。原始字符串是否为字母数字?base62编码是如何完成的?可以使用20字节的输出完成,但不能使用base62编码。基62中的20个字符表示需要20*(log62/log2)位对其进行编码。(这大约是120位=15字节)因此您可以将它们存储在15字节中。如果您可以存储20字节(而不是20个base62编码字符),则这是可能的。