作者cjcmt (cjcmt)
站内Prob_Solve
标题[问题] 请问缩字串
时间Fri Nov 12 23:14:50 2010
随意的34个数字,每个数字都是在0~9之间,例如
12345678912345678912345678912345678,我想要用
比较短的字串(限ascii码)去表示它。
目前想到的方式就是从第一个数字开始,拆成两两一
组,例如1234就视为12及34,然後再建一个00~99的
array(对照表),例如12 = a,34 = b,这以样我就
可以用ab去表示1234了,可以缩短50%的长度。
但不晓得大家有没有更好的解法可以缩的更短,或是
不需要建到100个的对照key呢?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.169.53.136
1F:→ tkcn:直接做进位转换就好啦,例如转成 62 进位(数字+大写+小写) 11/12 23:21
※ 编辑: cjcmt 来自: 220.136.154.171 (11/12 23:30)
2F:推 LPH66:visible ascii 其实只有 94 个 (33~126)... 11/13 00:40
3F:→ LPH66:所以其实并不到 50% 11/13 00:41
4F:→ LPH66:严格一点算的话最多是 log_94 10 = 0.50681 即 50.7% 11/13 00:41
5F:→ LPH66:也就是至少要 18 个字 11/13 00:42
6F:→ LPH66:不过要达成这样你得自己写个 34 位的大数除 11/13 00:43
7F:→ LPH66:如果不要用大数除就只好九位一组(0~10^9-1)变成94进位五个字 11/13 00:46
8F:→ LPH66:这样还是有 55.56% 11/13 00:46
9F:推 ledia:huffman ? 11/13 00:46
10F:推 ledia:咦 我在说啥 @@ 11/13 00:54
11F:→ suhorng:其实不清楚你的目的XD....不然直接存成两个long long (?) 11/13 14:17
12F:推 chrisdar:字典法 压缩 11/14 19:48