C语音用哈弗曼编码实现文件压缩

孙佳晶 发布于 2013/11/27 14:39
阅读 481
收藏 0
最后的作业,来位大神帮帮忙,谢谢了,用C语音编写
加载中
0
HeliosM
HeliosM
干嘛用c语言 多麻烦
中山野鬼
中山野鬼
回复 @HeliosM : 哈,你找个更简单的语言说说。前提,对于你要实现的算法和数据结构,你要全部自行实现。如果你说你可以用什么语法糖或者类库,这就没有比了,c和汇编也可以直接调用一下函数。哈。
HeliosM
HeliosM
回复 @中山野鬼 : 除了C++和汇编,找个更麻烦的出来看看?
中山野鬼
中山野鬼
回复 @HeliosM : c语言构造一棵树恶心?哈。已经算很方便简洁的了。。。。
孙佳晶
作业要求是用C语音编写
Feng_Yu
Feng_Yu
回复 @HeliosM : 用别的语言代码都差不多啊,定义一个结构,然后外部调用。
下一页
0
猎户座
猎户座
哈夫曼数据压缩算法,百度 搜这个关键词
0
Feng_Yu
Feng_Yu

数据结构C语言版就有这个算法的伪代码。

我以前用C#写过一个,只不过效率很低

0
Feng_Yu
Feng_Yu

我当时压缩文件的大致算法,采用的是静态哈夫曼树,因为动态huffman的算法我不理解,写不出来。

静态huffman的算法大致过程就是先扫描一遍文件,统计一下字节0-255这256个字节出现的频率,作为权值,生成一个由256个叶节点组成的huffman tree,第二遍按照字节流的形式读入文件,也就是逐字节读取文件,根据生成的huffman tree进行变长编码,由于计算机最小保存单位是字节,可能会出现变长编码最后凑不满一个字节的情况,对最后一个字节进行一下特殊处理(我当时是补零操作,补成8bits,凑够一个字节),最后将这个统计的权值存入文件,作为解码的时候使用。


大致的算法是这样,只不过我的代码很稀烂,执行速度非常慢,对cpu也没有优化,双核CPU只能占满一个核心,压缩速度巨慢无比,因为采用了很笨的办法,把读取到的字节转成字符串010101这样的流来处理的,效率很低下,后来也没有优化。

Feng_Yu
Feng_Yu
解码算法从编码算法逆序就可以了,编码过程中保存的权值,在解码过程中读取出来,根据这个权值建立相同的huffman tree,然后按照比特流的形式读取压缩文件,当递过到叶节点就把叶节点对应的字节追加到解压缩文件中,直到处理完整个比特流,最终就可以得到解压缩的文件。
0
O
Orzogc
C语音是什么?
O
Orzogc
回复 @土豆道人 : 打错字的是楼主,我是在吐槽
土豆道人
土豆道人
注意你打错字了,应该是c语言而不是语音
0
simona
simona
学java的路过
0
泡不烂的凉粉
泡不烂的凉粉
发现是一个经典算法啊. 必考内容.
返回顶部
顶部