作者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
1F:→ rosepong:若是个数超过基底则分两次运算 01/23 12:11
2F:推 LPH66:像 21845 这种数(二进位 101010101010101)你的方法会死很大 01/23 13:49
3F:→ LPH66:不论你之後的基底如何你都得要花这麽多东西描述每一位 01/23 13:49
4F:→ LPH66:这其实就只是个 RLE 而已 01/23 13:50
5F:→ rosepong:楼上所言甚是,我知道这个的缺点,但是是否能用他专长 01/23 14:56
6F:→ rosepong:经过弥补不足之後会有更佳的效果呢? 01/23 14:56
7F:推 ledia:任何 encoding 都有弱点, 弥补弱点相对就会减弱优势 01/23 15:58
8F:→ ledia:只有先知道资料形态的分布, 才能知道用哪一种编码法会比较好 01/23 15:59