我又成功的失败了!有那位IT高手敢来挑战一下!

来源:互联网 发布:机器人系统模拟软件 编辑:程序博客网 时间:2024/06/11 23:49

在写下这篇文章的时候我已经快"崩溃"了!我真的又成功的失败了!

  在马上崩溃的边缘我决定开通我的博客,写下我的经历,也算为我的失败留下一段纪念吧。

  现在切入正题,这是一篇关于文件压缩方面的文章,不记得是什么时候我初识了VB,但很清楚的记得我用VB写了段复制文件的代码,并且将文件转换成了01代码写入了文本文件,从那时起我对2进制文件产生了强烈的兴趣,所以从那时起我决心要做一个压缩软件!!

  经历了2月左右的C语言和VC的学习后,然后又经历了2个月左右的时间,终于琢磨出了一套可行的压缩方法!并且马上开始开发软件,但是就在今天我真的崩溃了!

  我正在遇到对我而言,不论是从技术上,还是心理上,还是算法上前所未有的挑战直到我感觉到崩溃。所以我现在恳求IT界的高手帮帮小弟我完成我这套压缩算法!

 

  下面我公开一下我的压缩算法:

原理:

1.读取原文件,每10240字节为一块,进行处理。

2.按照1位至n位的位宽(1byte=8位),处理文件块。

3.将按照1位至n位的位宽读取的数据写入到数据库,并且记录其重复次数。

4.根据公式 1+1/位宽+数据重复次数*位宽/8*文件大小

如果公式的计算结果小于1,表示文件可以被压缩,计算结果小于1的对应数据 称其为重复数据。

生成文件:

5.从文件中抽掉计算结果小于1的对应数据 称其为抽取结果;

6.同时用0代表计算结果小于1的对应数据1代表其他 称其为引导结果;

7.从文件中抽掉计算结果小于1的对应数据后所剩的位宽 称其为剩余结果 ;

原理估计没人能看懂我举个例子吧!

实例讲解:

假如一个4字节文件的所有位如下

 00000010 00000000 00000000 00000000

根据公式 1+1/位宽+数据重复次数*位宽/8*文件大小

计算小于1并且最小的结果 就是按6位宽抽取

重复数据为:000000 重复次数为4次

引导结果为:01000

抽取结果为:100000(不算余位)

剩余结果为:00

压缩文件构成:

重复数据+引导结果+抽取结果+剩余结果 即:00000001 00010000 000 (不足1字节的添0补位)

文件命名

文件大小+重复数据位宽 用"&"隔开 即4字节文件命名就是: 4&6 (分块处理的文件就是再加上"&"加对应块重复数据的位宽)

还原:

利用文件命名的重复数据的位宽可以知道最开始读取多少位:

4&6 就是读取6位是重复数据

利用文件命名的文件大小和重复数据的位宽可以算出引导结果读取多少位:

4&6 就是4*8/6=5 (公式:文件大小*8/重复数据位宽)

利用文件命名的文件大小和重复数据的位宽可以算出抽取结果读取多少位:

4&6 就是4*8-6*4-4*8%6=6 (公式:文件大小*8-重复数据位宽*引导结果中0的个数-文件大小*8%重复数据位宽)

利用文件命名的文件大小和重复数据的位宽可以算出剩余结果读取多少位:

4&6 就是4*8%6=2 (公式:文件大小*8%重复数据位宽)

还原的步骤:

根据上诉计算:

从压缩文件构成:

00000001 00010000 000

得到重复数据:000000

得到引导结果:01000

得到抽取结果:100000

得到剩余结果:00

根据引导结果将重复数据替换进去:

将引导结果中的0替换成重复数据000000,将1替换为抽取结果100000,加上剩余结果00

00000010 00000000 00000000 00000000

就变回了原文件了

还原完成!!!!

这个压缩软件的前景无限呀!

我一想就高兴 想想如果成功了 网络上流行的文件格式将全部是该算法处理过的文件 呵呵多么爽呀!

还有一点这个压缩算法应该可以支持反复压缩的呵呵!! 

我只做到了将重复数据统计到数据库 因为涉及到读写数据库所以执行的速度非常的慢!

现在该到生成压缩文件的步骤了我实在是做不下去了 真的要崩溃了!

如果需要这部分源代码,或高手愿意帮帮小弟我完成这个软件的开发,或愿意与我共同完成的话联系我!!

联系方式:

QQ :444694876

最后,谢谢!谢谢!十分感谢!

原创粉丝点击