看板 Prob_Solve 關於我們 聯絡資訊
隨意的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
tkcn:直接做進位轉換就好啦,例如轉成 62 進位(數字+大寫+小寫) 11/12 23:21
※ 編輯: cjcmt 來自: 220.136.154.171 (11/12 23:30)
LPH66:visible ascii 其實只有 94 個 (33~126)... 11/13 00:40
LPH66:所以其實並不到 50% 11/13 00:41
LPH66:嚴格一點算的話最多是 log_94 10 = 0.50681 即 50.7% 11/13 00:41
LPH66:也就是至少要 18 個字 11/13 00:42
LPH66:不過要達成這樣你得自己寫個 34 位的大數除 11/13 00:43
LPH66:如果不要用大數除就只好九位一組(0~10^9-1)變成94進位五個字 11/13 00:46
LPH66:這樣還是有 55.56% 11/13 00:46
ledia:huffman ? 11/13 00:46
ledia:咦 我在說啥 @@ 11/13 00:54
suhorng:其實不清楚你的目的XD....不然直接存成兩個long long (?) 11/13 14:17
chrisdar:字典法 壓縮 11/14 19:48