作者rosepong (香)
看板Prob_Solve
標題Re: [問題] 一個數字用兩個字表示的方法
時間Sun Jan 23 12:09:04 2011
不好意思 在這邊請教一下
如果我想要用最少位數(基底可以用數字+英文大小寫 或是可以新增許多符號)
來一個表達10進制的數字 那以下我所想的過程是不是有用的
1.給定一個10進制的數字 將她轉成二進制
example:12035
After Converted 10 1111 0000 0011
2.從最右邊開始 當碰到1 或 0 就標記 1 or 0
然後將後面連續跟前一個相同的1 or 0 取個數
例如先碰到1 後面只有一個1是連續的
所以我就得寫1然後後面標記11
之後碰到0 後面有五個0 就寫05
再來碰到1 後面有四個1 就是14
之後碰到0 後面沒有0 就補一個0 就是00
之後碰到1 後面沒了 不用補
所以我的數字可以表達為100415011
3.解碼 從右邊開始
奇數位一定是代表是0 or 1
偶數為一定是代表0 or 1的個數(這邊可以帶任意基底)
變成110000001111101
反轉後
101111100000011
12035轉成hex 是0x2F03
經過這樣轉換後是 100415011
我不清楚的地方是這種轉換法好像在某些特定的數字占有優勢
但是是否真的比把十進制轉成hex有效.
一點小小想法 請問各位版有,
如有任何看不懂,或是錯誤,等不吝指教。
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.169.34.177
→ rosepong:若是個數超過基底則分兩次運算 01/23 12:11
推 LPH66:像 21845 這種數(二進位 101010101010101)你的方法會死很大 01/23 13:49
→ LPH66:不論你之後的基底如何你都得要花這麼多東西描述每一位 01/23 13:49
→ LPH66:這其實就只是個 RLE 而已 01/23 13:50
→ rosepong:樓上所言甚是,我知道這個的缺點,但是是否能用他專長 01/23 14:56
→ rosepong:經過彌補不足之後會有更佳的效果呢? 01/23 14:56
推 ledia:任何 encoding 都有弱點, 彌補弱點相對就會減弱優勢 01/23 15:58
→ ledia:只有先知道資料形態的分布, 才能知道用哪一種編碼法會比較好 01/23 15:59