能否用连分数来压缩数据
假设要压缩一串数据,我们可以将其看作一个整数,首先我们用某个基去除这个整数,就得到商和余数,如果我们选取的基较为合适,就得到商和余数相同大小的尺寸,因此我们也得到了连分数的分子和分母,再将这个分数表示为连分数,最终我们得到一串数据,则这些数据有可能被较好的压缩和表示下面举例说明
假设我们要压缩的数据为
20!+7!+11=2432902008176645051 共19位数字,21C3677C82B413BB(十六进制)
用3^20作为基,去除这个数,得到商697749481,余数2019999170,然后把商/余数表示为连分式
{0, 2, 1, 8, 1, 1, 9, 4, 3, 1, 1, 13, 1, 2, 3, 1, 2, 10, 3, 1, 5},现在得到的这一串数据我们可以看到1的含量比较多,而且相邻的两个数大小都比较靠近,也就是说比较光滑(一般的分数都有此性质),如果选取的基使得这一串数据中的某个元素值特别大,我们则称为不光滑的,这时我们可以选取其他基,以达到较好的效果,那对现在得到的新数据有无较好的压缩方法或者适合计算机表示的形式呢 我认为这个方法不能压缩数据,相对于10进制的表示法,连分数的每项的系数变小了,但项数变多了,在用哈夫曼算法压缩后,总的信息量不会减少。就好比用2进制来表示一个数一样,相对于10进制,每个数的范围从0-9变为0-1(系数变小了),但位数变多了,增加到10进制表示法的3.32倍,总的信息量并没有减少。
我所知的最有效的压缩算法是算法编码,一个具体的实现是PAQ,其压缩率非常高,压缩后的数据量甚至比香农公式计算出来的信息量还少。可参考我的一个帖子http://bbs.csdn.net/topics/390042776。 熵是无损压缩的极限。能够超越必然是有损压缩
页:
[1]