[请教]一个长度为 15 位的字符串,怎么压缩它的长度?

2018 年 9 月 28 日
 maemolee

一个长度为 15 位的字符串,可能包含大写、小写英文字母和数字(不包含特殊符号),想要通过一个算法压缩成一个 8 位的字符串,并能通过算法将压缩后的字符串正确还原。

9472 次点击
所在节点    问与答
26 条回复
SakuraSa
2018 年 9 月 28 日
如果没有更强的假设,应该是做不到的。
可能的组合:(26+26+10)**15
需要的字符数:log((26+26+10)**15,256)=11.164
maemolee
2018 年 9 月 28 日
@SakuraSa 谢谢……
xiaocsl
2018 年 9 月 28 日
压缩后的也只能大小写英文字母和数字吗?
只是可视的压缩还是要体积压缩?
maemolee
2018 年 9 月 28 日
@xiaocsl 因为压缩后的文本串要保证能以 64 位 2 进制码的形式储存,所以最好只能是 ASCII 表里面的东西。
JmmBite
2018 年 9 月 28 日
改成 中文字符。
stevenbipt
2018 年 9 月 28 日
哈夫曼树重新编码?将每个 ASCII 码重新编码应该能压缩一下吧
maemolee
2018 年 9 月 28 日
@JmmBite 怎么改用中文?

@stevenbipt 诶?你是说直接跳过转换为 8 位字符串的过程,直接用 15 位转换成 64 位二进制吗🤔难以想象啊
ThirdFlame
2018 年 9 月 28 日
26+26+10=62 2 的 6 次方即可容纳。
15 个字符*6=90 位二进制即可。

1 楼的解释已经完美了,不可能实现的任务。
chenyu8674
2018 年 9 月 28 日
找 124 个不重样的字符,用进制转换的思路试试
chenyu8674
2018 年 9 月 28 日
@chenyu8674 脑抽想错,是 2^6
maemolee
2018 年 9 月 28 日
@ThirdFlame 感谢

@chenyu8674 这样子是不是得自己定义一套编码规范😂
chenyu8674
2018 年 9 月 28 日
@maemolee 差不多是这个意思,比如 1111->F,就相当于把 4 位压到了 1 位
不过我刚脑抽了,实际应该找不出那么多不同的字符
blackcurrant
2018 年 9 月 28 日
构造一个 url, 让这个字符串成为 URL 的一部分,然后使用短网址服务进行缩短,可压缩成 5 个字符甚至更短。
sxul07
2018 年 9 月 28 日
@blackcurrant 但还是不能保证全都压缩到 8 位以内
catcn
2018 年 9 月 28 日
catcn
2018 年 9 月 28 日
汗,还有压缩后的位数要求。。
blackcurrant
2018 年 9 月 28 日
@sxul07 楼主的标题是 **一个**长度为 15 位的字符串。
csx163
2018 年 9 月 28 日
可以用字典么
maemolee
2018 年 9 月 28 日
@blackcurrant 希望可以不要扣字眼,因为我有很多很多“一个”😂
maemolee
2018 年 9 月 28 日
@csx163 当然可以……

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/493491

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX