Re: [問題] 一個數字用兩個字表示的方法

看板Prob_Solve (計算數學 Problem Solving)作者 (香)時間14年前 (2011/01/23 12:09), 編輯推噓2(206)
留言8則, 3人參與, 最新討論串7/7 (看更多)
不好意思 在這邊請教一下 如果我想要用最少位數(基底可以用數字+英文大小寫 或是可以新增許多符號) 來一個表達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

01/23 12:11, , 1F
若是個數超過基底則分兩次運算
01/23 12:11, 1F

01/23 13:49, , 2F
像 21845 這種數(二進位 101010101010101)你的方法會死很大
01/23 13:49, 2F

01/23 13:49, , 3F
不論你之後的基底如何你都得要花這麼多東西描述每一位
01/23 13:49, 3F

01/23 13:50, , 4F
這其實就只是個 RLE 而已
01/23 13:50, 4F

01/23 14:56, , 5F
樓上所言甚是,我知道這個的缺點,但是是否能用他專長
01/23 14:56, 5F

01/23 14:56, , 6F
經過彌補不足之後會有更佳的效果呢?
01/23 14:56, 6F

01/23 15:58, , 7F
任何 encoding 都有弱點, 彌補弱點相對就會減弱優勢
01/23 15:58, 7F

01/23 15:59, , 8F
只有先知道資料形態的分布, 才能知道用哪一種編碼法會比較好
01/23 15:59, 8F
文章代碼(AID): #1DEwdYzU (Prob_Solve)
文章代碼(AID): #1DEwdYzU (Prob_Solve)