资源简介
压缩
(1)统计原始文件中各字节出现的概率(次数);
(2)采用哈弗曼算法对各字节进行编码,建立哈弗曼对照表;
a)构造二叉树
b)编码
(3)依次读取原始文件的每个字节,查找其对应的哈弗曼编码,将这些位写入到压缩文件中(注意:要凑够8位二进制才写入到文件中)。
(4)将原始文件中各字节及出现的次数也写入到压缩文件中。
2、解压
(1)从压缩文件中获得原始文件各字节及出现的次数,并根据此构造哈弗曼对照表;
(2)将压缩文件中对应原始文件数据的部分依据哈弗曼对照表还原成原来的字节,写入到解压文件中。
代码片段和文件信息
/* Huffman Code */
#include
#include
#include
#include
#include
#include
#include “Huffman.h“
int main(void)
{
FILE * fin = fopen(“2.in“ “r“);
int c;
while( (c=fgetc(fin)) != EOF )
{
Asc[c].alpha = c;
Asc[c].value++;
}
puts(““);
qsort(Asc sizeof(Asc)/sizeof(Asc[0]) sizeof(Asc[0]) Compare);
TreeNode * HuffmanRoot = CreateHuffmanTree(Asc);
Pre(HuffmanRoot);
cout << “Char\tTimes\tCode\n“;
for(int i=0; i {
if(Asc[i].value != 0)
{
cout << (char)Asc[i].alpha << “\t“ << Asc[i].value << “\t“ << charHuffmanTable[Asc[i].alpha] << endl;
}
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2015-11-29 11:08 Huffman\
文件 2 2015-11-23 11:53 Huffman\1.bin
文件 12 2015-11-22 21:14 Huffman\2.in
文件 0 2015-11-29 11:08 Huffman\2.txt
文件 12 2015-11-23 11:53 Huffman\3.out
目录 0 2015-11-23 11:53 Huffman\Debug\
文件 553014 2015-11-23 11:53 Huffman\Debug\Huffman.exe
文件 793916 2015-11-23 11:53 Huffman\Debug\Huffman.ilk
文件 184804 2015-11-23 11:53 Huffman\Debug\Huffman.obj
文件 2238976 2015-11-23 11:12 Huffman\Debug\Huffman.pch
文件 1123328 2015-11-23 11:53 Huffman\Debug\Huffman.pdb
文件 74752 2015-11-23 11:53 Huffman\Debug\vc60.idb
文件 110592 2015-11-23 11:53 Huffman\Debug\vc60.pdb
文件 1781 2015-11-23 11:53 Huffman\Huffman.cpp
文件 4352 2015-11-23 11:30 Huffman\Huffman.dsp
文件 522 2015-11-22 21:17 Huffman\Huffman.dsw
文件 3487 2015-11-23 11:53 Huffman\Huffman.h
文件 50176 2015-11-29 09:20 Huffman\Huffman.ncb
文件 53760 2015-11-29 09:20 Huffman\Huffman.opt
文件 1274 2015-11-23 11:53 Huffman\Huffman.plg
- 上一篇:QT 时钟可以自己设置时间
- 下一篇:S参数仿真分析传输线、史密斯圆图、电路匹配结构
评论
共有 条评论