- 注册时间
- 2009-4-27
- 最后登录
- 1970-1-1
- 威望
- 星
- 金币
- 枚
- 贡献
- 分
- 经验
- 点
- 鲜花
- 朵
- 魅力
- 点
- 上传
- 次
- 下载
- 次
- 积分
- 3513
- 在线时间
- 小时
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?欢迎注册
×
本帖最后由 wsc810 于 2013-11-30 11:46 编辑
设$N$是要压缩的数据,计算$N$以系数$0,1$的$X$进制表示,即$N=a_nX^n+a_{n-1}X^{n-1}+...+a_1X^1+a_0$ ,$a_n,a_{n-1},...,a_1,a_0$ 等于$0$或$1$
压缩算法设计思路
给定$N$,解由$0,1$系数构成的多项式方程,其系数$0,1$向量由$2^n-1,2^n-2,...,2,1$依次递减,若找到$N$的一个正整数根,则找到$N$的一种以$X$为基的二进制表示
解压缩很简单
直接求多项式的值即可
数据的存储与表示
在一个存储块中,可以设定前$n$个字节存储$X$,后$n$个字节存储$0,1$二进制数$b$.
整体分析
由于在一串二进制数据中,连续的$N$个数据组中,不可能遍历出现$0$到$2^n-1$所有的数据状态,多出现较大的数,小的数一般不出现(除非二进制数的前面有一长串0),所以存在数据冗余,即可以被压缩。
下面做一个假定,设用一个字节来表示$X$,两个字节来表示$b$ ,则最大能表示的N值
$N=255^15+255^14+...+255+1=1258372359508183022113289901252806656$,$log[256,N]=14.9901$普通二进制需要15字节来存储,而压缩后仅需3个字节
存在的问题
由于所有的存在状态为255*255=65025(不知道是不是这样算)所以可能导致某些数无法表示,进而不能被存储,不知道允许$X$取负值,能不能解决问题。
|
|