作者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