一个长度为 15 位的字符串,可能包含大写、小写英文字母和数字(不包含特殊符号),想要通过一个算法压缩成一个 8 位的字符串,并能通过算法将压缩后的字符串正确还原。
1
SakuraSa 2018 年 9 月 28 日
如果没有更强的假设,应该是做不到的。
可能的组合:(26+26+10)**15 需要的字符数:log((26+26+10)**15,256)=11.164 |
3
xiaocsl 2018 年 9 月 28 日
压缩后的也只能大小写英文字母和数字吗?
只是可视的压缩还是要体积压缩? |
5
JmmBite 2018 年 9 月 28 日
改成 中文字符。
|
6
stevenbipt 2018 年 9 月 28 日 via Android
哈夫曼树重新编码?将每个 ASCII 码重新编码应该能压缩一下吧
|
7
maemolee OP |
8
ThirdFlame 2018 年 9 月 28 日
26+26+10=62 2 的 6 次方即可容纳。
15 个字符*6=90 位二进制即可。 1 楼的解释已经完美了,不可能实现的任务。 |
9
chenyu8674 2018 年 9 月 28 日
找 124 个不重样的字符,用进制转换的思路试试
|
10
chenyu8674 2018 年 9 月 28 日
@chenyu8674 脑抽想错,是 2^6
|
11
maemolee OP |
12
chenyu8674 2018 年 9 月 28 日
@maemolee 差不多是这个意思,比如 1111->F,就相当于把 4 位压到了 1 位
不过我刚脑抽了,实际应该找不出那么多不同的字符 |
13
blackcurrant 2018 年 9 月 28 日 via iPhone
构造一个 url, 让这个字符串成为 URL 的一部分,然后使用短网址服务进行缩短,可压缩成 5 个字符甚至更短。
|
14
sxul07 2018 年 9 月 28 日
@blackcurrant 但还是不能保证全都压缩到 8 位以内
|
15
catcn 2018 年 9 月 28 日
|
16
catcn 2018 年 9 月 28 日
汗,还有压缩后的位数要求。。
|
17
blackcurrant 2018 年 9 月 28 日 via iPhone
@sxul07 楼主的标题是 **一个**长度为 15 位的字符串。
|
18
csx163 2018 年 9 月 28 日
可以用字典么
|
19
maemolee OP @blackcurrant 希望可以不要扣字眼,因为我有很多很多“一个”😂
|
21
momo1999 2018 年 9 月 28 日
可以压缩到 12 位
|
22
prolic 2018 年 9 月 28 日 via Android
两个集合大小不一样,15 位到 8 位只能做个满射
|
23
NB40B938mff85mtq 2018 年 9 月 28 日
不用想了。。。遍历赋值给二进制数都凑不够。。。
|
24
zealic 2018 年 9 月 28 日
只能用已知字典代替缺失的 3.1164 位
|
25
mangoDB 2018 年 9 月 28 日
```py
import math s = (26 + 26 + 10) ** 15 n = math.log(s, 2 ** 8) print n ``` |
26
xychang 2018 年 9 月 29 日
随机的 15 位字符串不可能,如果个别字符频率比较高的话还是有可能的,参见 6 楼
|