信息论与编码课程设计(哈夫曼编码的分析与实现)(2)

2019-09-01 22:08

R=

H(X)2.55==0.977bit/码元 2.61K编码效率为: ?=

H(X)2.55==0.977 2.61K冗余度为:

?=1-?=1-0.977=0.023

六、哈夫曼编码的实现

6.1软件介绍

Visual C++ 6.0,简称VC或者VC6.0,是微软推出的一款C++编译器,将“高级语言”翻译为“机器语言(低级语言)”的程序。Visual C++是一个功能强大的可视化软件开发工具。自1993年Microsoft公司推出Visual C++1.0后,随着其新版本的不断问世,Visual C++已成为专业程序员进行软件开发的首选工具。Visual C++6.0由Microsoft开发, 它不仅是一个C++ 编译器,而且是一个基于Windows操作系统的可视化集成开发环境(integrated development environment,IDE)。Visual C++6.0由许多组件组成,包括编辑器、调试器以及程序向导AppWizard、类向导Class Wizard等开发工具。 这些组件通过一个名为Developer Studio的组件集成为和谐的开发环境。Microsoft的主力软件产品。Visual C++是一个功能强大的可视化软件开发工具。

Visual C++6.0以拥有“语法高亮”,自动编译功能以及高级除错功能而著称。比如,它允许用户进行远程调试,单步执行等。还有允许用户在调试期间重新编译被修改的代码,而不必重新启动正在调试的程序。其编译及创建预编译头文件(stdafx.h)、最小重建功能及累加连结(link)著称。这些特征明显缩短程序编辑、编译及连结的时间花费,在大型软件计划上尤其显著。

(1)Developer Studio这是一个集成开发环境,我们日常工作的99%都是在它上面完成的,再加上它的标题赫然写着“Microsoft Visual C++”,所以很多人理所当然的认为,那就是Visual C++了。其实不然,虽然Developer Studio提供了一个很好的编辑器和很多Wizard,但实际上它没有任何编译和链接程序的功能,

5

真正完成这些工作的幕后英雄后面会介绍。我们也知道,Developer Studio并不是专门用于VC的,它也同样用于VB,VJ,VID等Visual Studio家族的其他同胞兄弟。所以不要把Developer Studio当成Visual C++, 它充其量只是Visual C++的一个壳子而已。这一点请切记! (2)MFC

从理论上来讲,MFC也不是专用于Visual C++,Borland C++,C++Builder和Symantec C++同样可以处理MFC。同时,用Visual C++编写代码也并不意味着一定要用MFC,只要愿意,用Visual C++来编写SDK程序,或者使用STL,ATL,一样没有限制。不过,Visual C++本来就是为MFC打造的,Visual C++中的许多特征和语言扩展也是为MFC而设计的,所以用Visual C++而不用MFC就等于抛弃了Visual C++中很大的一部分功能。但是,Visual C++也不等于MFC。 (3)Platform SDK

这才是Visual C++和整个Visual Studio的精华和灵魂,虽然我们很少能直接接触到它。大致说来,Platform SDK是以Microsoft C/C++编译器为核心(不是Visual C++,看清楚了),配合MASM,辅以其他一些工具和文档资料。上面说到Developer Studio没有编译程序的功能,那么这项工作是由谁来完成的呢?是CL,是NMAKE,和其他许许多多命令行程序,这些我们看不到的程序才是构成Visual Studio的基石。

6.2 编程

//**哈夫曼编码** #include #include #include #include #include #include

using namespace std;

struct Huffman_InformationSource {

6

char InformationSign[10];

double Probability; char Code[10];

int CodeLength;; };

struct HuffNode { };

class CHuffman_2 { public:

CHuffman_2() {

ISNumber=0;

AvageCodeLength=0.0; InformationRate=0.0; CodeEfficiency=0.0;

char InformationSign[10]; double Probability;

HuffNode *LeftSubtree,*middleSubtree,*RightSubtree,*Next; char Code[10]; int CodeLength;

Redundancy=0.0;

}

CHuffman_2() { }

void Huffman_Input();

DestroyBTree(HuffTree);

7

void Huffman_Sort(); void Huffman_Tree(); void Huffman_Coding();

void Huffman_CodeAnalyzing(); void Huffman_Display();

void DestroyBTree(HuffNode *TreePointer);

private:

HuffNode * HuffTree;

vectorISarray; int ISNumber;

double AvageCodeLength; double InformationRate; double CodeEfficiency;

private: };

//输入信源信息

void CHuffman_2::Huffman_Input() {

void Huffman_Code(HuffNode *TreePointer);

Huffman_InformationSource temp1={\ISarray.push_back(temp1);

Huffman_InformationSource temp2={\; ISarray.push_back(temp2);

Huffman_InformationSource temp3={\ISarray.push_back(temp3);

Huffman_InformationSource temp4={\ISarray.push_back(temp4);

Huffman_InformationSource temp5={\ISarray.push_back(temp5);

8

}

Huffman_InformationSource temp6={\ISarray.push_back(temp6);

Huffman_InformationSource temp7={\ISarray.push_back(temp7);

Huffman_InformationSource temp8={\ISarray.push_back(temp8); ISNumber=ISarray.size();

//按概率“从大到小”排序 void CHuffman_2::Huffman_Sort() { }

void CHuffman_2::Huffman_Tree() {

Huffman_InformationSource temp; int I,j;

for(i=0;i

for(j=i+1;j

if(ISarray[i].Probability

temp=ISarray[i]; ISarray[i]=ISarray[j]; ISarray[j]=temp;

int I;

HuffNode *ptr1,*ptr2,*ptr3,*ptr4,*temp1,*temp2; ptr1=new HuffNode;

strcpy(ptr1->InformationSign,ISarray[0].InformationSign); ptr1->Probability=ISarray[0].Probability; strcpy(ptr1->Code,ISarray[0].Code);

9


信息论与编码课程设计(哈夫曼编码的分析与实现)(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:八年级物理下册《压强》章末检测题(含答案新人教版) - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: