之前看了一下gif的文件格式,看到里面的数据块都是用lzw算法压缩的。
所以就按照里面描述的算法自己实现了一个,用了3天时间,现在注意力不集中,而且代码实现的速度也很慢。
第一天,读懂算法,并编写了压缩函数,经纸笔检查,对小数据量和手工计算的编码是一致的。
第二天,编写部分解压函数,玩游戏总分心,没弄完。
第三天,编写解压函数,查找各种bug;在调通以后,发现当遇到大文件的情况,索引表满了时还需要重新初始化,又进行了修改,终于弄好了。
压缩,然后解压,看着生成内容和原文件无差别,心里那个高兴啊。
然而试了一下gif,让我彻底崩溃,压缩后的文件比之前还大。不过因为gif是压缩过的,而我的代码里只是机械的按照lzw算法描述做的,没有优化。
后来对比了一下和tar命令的差异。
原文件是11485374字节大小的bmp
我的lzw | tar cjvf | tar czvf | |
耗时 | real 0m4.876s user 0m4.824s sys 0m0.040s | real 0m2.427s user 0m2.344s sys 0m0.080s | real 0m0.263s user 0m0.244s sys 0m0.012s |
压缩后大小 | 1484150 | 481280 | 904640 |
时间和空间都完败,真是“无颜见爹娘”啊。
继续努力!