文件压缩程序设计报告Word文档下载推荐.docx

上传人:b****0 文档编号:13930391 上传时间:2022-10-15 格式:DOCX 页数:26 大小:25.66KB
下载 相关 举报
文件压缩程序设计报告Word文档下载推荐.docx_第1页
第1页 / 共26页
文件压缩程序设计报告Word文档下载推荐.docx_第2页
第2页 / 共26页
文件压缩程序设计报告Word文档下载推荐.docx_第3页
第3页 / 共26页
文件压缩程序设计报告Word文档下载推荐.docx_第4页
第4页 / 共26页
文件压缩程序设计报告Word文档下载推荐.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

文件压缩程序设计报告Word文档下载推荐.docx

《文件压缩程序设计报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《文件压缩程序设计报告Word文档下载推荐.docx(26页珍藏版)》请在冰豆网上搜索。

文件压缩程序设计报告Word文档下载推荐.docx

外,短语式压缩后的结果:

那些剩下的未被匹配的单、双字节和得到匹配的距离、长

度值仍然具有取值分布不均匀性,因此,两种压缩方式的顺序不能变。

本程序设计只做了编码式压缩,采用 

Huffman 

编码进行压缩和解压缩。

码是一种可变长编码方式,是二叉树的一种特殊转化形式。

编码的原理是:

将使用次

数多的代码转换成长度较短的代码,而使用次数少的可以使用较长的编码,并且保持

编码的唯一可解性。

根据ascii码文件中各ascii字符出现的频率情况创建

Huffman树,再将各字符对应的哈夫曼编码写入文件中。

同时,亦可根据对应的哈夫

曼树,将哈夫曼编码文件解压成字符文件.

二、 

概要设计:

主程序流程图:

主函数

统计字符,得

退出

测试

输入测试字符

统计字符信息,

建立Huffman曼

根据Huffman树,

求得对应字符的

Huffman编码

输入Huffman编

码,求得解码

出统计出的字

符的权值n

根据权值进行

建立Huffman树

输出Huffman树

编码

输出编码 

压缩编码

生成压缩文件

扫描压缩文件,

载入字符信息

解码

解压

生成新的文本

文档

压缩过程的实现:

压缩过程的流程是清晰而简单的:

1.创建 

2.打开需压缩文件

3.将需压缩文件中的每个 

ascii 

码对应的 

huffman 

编码按 

bit 

单位输出生成压缩文

件压缩结束。

其中,步骤 

和步骤 

是压缩过程的关键。

步骤 

1:

这里所要做工作是得到 

数中各叶子结点字符出现的频率并进行创

建.统计字符出现的频率可以有很多方法:

如每次创建前扫描被创建的文件,“实时”的

生成各字符的出现频率;

或者是创建前即做好统计.这里采用的是前一种方法。

3:

将需压缩文件中的每个 

单位输出.

这是本压缩程序中最关键的部分:

这里涉及“转换”和“输出”两个关键步骤:

“转换”部分大可不必去通过遍历

树来找到每个字符对应的哈夫曼编码,可以将每个 

码值及其对应的

码存放于如下所示的结

构体中:

解压缩过程的实现:

如果说,压缩的过程可以通过查找 

codeList 

来加速实现的话,而解压缩则必须通过查找

树才能加以实现.查找的过程是简单的,可以根据

树的性质来做,当 

haffCode 

的当前 

位为 

时,则向左枝展开搜索;

当前

bit位为 

时,则向右枝展开搜索,当遇到叶子结点时,则输出 

对应的

asciiCode。

三、 

详细设计:

核心算法源程序:

树建立源程序:

//-------------------------------------------------------------

//huffmantree.h

//霍夫曼树

#ifndef 

HUFFMANTREE

#define 

Defaultsize 

300

#include 

<

iostream.h>

"

bintree.h"

heap.h"

class 

Code

{

public:

int 

code;

Code 

*link;

Code(int 

c=0,Code 

*l=NULL):

code(c),link(l){};

};

CharNameNode

unsigned 

char 

charname;

//要这样才行

CharNameNode(unsigned 

charname(c),link(l){};

template 

Type>

HuffmanTree:

public 

BinaryTree<

key;

HuffmanTree(){};

HuffmanTree(HuffmanTree<

&

ht1,HuffmanTree<

ht2)

Type 

temp=0;

//可能有变

key=ht1.key+ht2.key;

root= 

new 

BinTreeNode<

(0,Copy(ht1.root),Copy(ht2.root));

}

void 

Build(int 

*fr,Type 

*value,int 

n,HuffmanTree<

newtree);

Path(BinTreeNode<

*start,Code 

*first,Code 

*last,CharNameNode 

*Node,int

i);

//一个数组

HuffmanTree<

:

newtree)

{//fr 

为 value(值) 对应的权

i;

first,second;

Node[Defaultsize];

MinHeap<

>

hp;

assert(n>

=0&

n<

=Defaultsize);

for(i=0;

i<

n;

i++)

Node[i].root=new 

(value[i],NULL,NULL);

Node[i].key=fr[i];

hp=MinHeap<

(Node,n);

n-1;

hp.RemoveMin(first);

hp.RemoveMin(second);

temp=new 

(first,second);

hp.Insert(*temp);

hp.RemoveMin(newtree);

template<

voidHuffmanTree<

*start,Code*first,Code

*Node,int 

i) 

if(start==NULL)

return;

//if(start->

GetData()!

=0) 

//是叶结点 

严重错误,可能叶结点也是 

0!

if(start->

GetLeft()==NULL&

start->

GetRight()==NULL)

Node[i].charname=start->

GetData();

Node[i].link=NULL;

if(first==NULL)

Node[i].link=new 

Code(first->

code);

*p=first->

link,*q=Node[i].link;

while(p!

=NULL)

q->

link=new 

Code(p->

q=q->

link;

p=p->

link=NULL;

i++;

*temp=new 

Code;

//进入左子树

assert(temp);

first=last=temp;

else

last->

link=temp;

last=last->

Path(start->

GetLeft(),first,last,Node,i);

code=1;

GetRight(),first,last,Node,i);

temp=first;

if(first==last)

delete 

last;

first=last=NULL;

while(temp->

link!

=last)

temp=temp->

temp->

last=temp;

#endif

实现二叉树的算法源程序:

//---------------------------------------------------------------------

//bintree.h

//用指针实现的二叉树

//Type 

类型必须有重载<

与>

及=运算

BINTREE

assert.h>

Max(int 

a,int 

b)

return 

a>

b?

a:

b;

BinaryTree;

BinTreeNode

friend 

;

BinTreeNode():

leftchild(NULL),rightchild(NULL){};

BinTreeNode(Type 

item,BinTreeNode<

*left 

NULL,BinTreeNode<

*right=NULL)

data(item),leftchild(left),rightchild(right){};

GetData()const 

data;

*GetLeft()const 

leftchild;

*GetRight()const 

rightchild;

vo

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1