基于Java的哈夫曼编码译码系统 报告

基于Java的哈夫曼编码译码系统 报告
基于Java的哈夫曼编码译码系统 报告

课程设计

课程名称 Java与面向对象程序设计

课程设计

题目名称_基于Java的哈夫曼编码译码系统学生学院自动化学院 __ __

专业班级______网络三班____________

姓名:__________曾庆伟____________

学号________31080001332__________

指导教师________张钢____________ 2011 年 6 月10 日

目录

1.问题描述和分工情况

1.1 问题描述

使用Java语言实现哈夫曼算法,对英文文章进行编码和译码。输入输出界面要求使用Web页面,用JSP实现。

1.2 分工情况

组长:曾庆伟

在本课程设计是负责如下工作:

1,环境的搭建(主要是web服务器的搭建)

2,代码编写工作,实现本课程设计的主要功能,即对英文的编码以及译码。

3,主要的界面设计,主要是设计jsp的界面

组员1:徐华涛王锦贤周基霖

1,主要负责上网搜索26个英文字母在文章中出现的概率,并且根据哈夫曼算法设计出26个字母对应的编码。

……2,画出设计的编码图…

2.系统总体设计

2.1 系统设计方案综述

设计方案:

这个课程设计就是围绕着吧哈夫曼编码体现出来的目的做的

第一步是把在输入框中的字符串——也就是需要编码的文章转成01的字符串。这里我设计成可以显示出来01字符串

第二步,在本地,也就是输入框那个jsp页面吧他的类型转成byte,这样就真正实现了他的目的——传送的时候能节省流量。

2.2 系统模块设计

没什么模块的,就是一整体实现那功能。

2.3 数据库设计

无数据库

2.4 系统功能设计

就是简单的传送文件

2.5 界面设计

很简单的黄绿两种颜色:

2.6 开发环境描述

开发环境是在Macromedia Dreamweaver 8 上进行的。

主要是因为这个课程设计的要求比较简单,还有因为方便设计界面,. 3.系统详细设计

3.1 网上搜索资料abc26个英文字母出现概率

E - 0.1268

T - 0.0978

A - 0.0788

O - 0.0776

I - 0.0707

N - 0.0706

S - 0.0634

R - 0.0594

H - 0.0573

L - 0.0394

D - 0.0389

U - 0.0280

C - 0.0268

F - 0.0256

M - 0.0244

W - 0.0214

Y - 0.0202

G - 0.0187

P - 0.0186

B - 0.0156

V - 0.0102

K - 0.0060

X - 0.0016

J - 0.0010

Q - 0.0009

Z - 0.0006

3.2 画哈夫曼编码图为(加入了字符,。!等等)

3.3 转成编码为:

'a':"0010"

'b':"010010"

'c':"111100"

'd':"01000"

'e':"110"

'f':"101111"

'g':"000010"

'h':"111110"

'i':"1110"

'j':"1011001110"

'k':"10110010"

'l':"00000"

'n':"1010"

'm':"101110"

'o':"011"

'p':"010011"

'q':"10110011111"

'r':"0101"

's':"0001"

't':"1000"

'u':"111101"

'v':"1011000"

'w':"101101000"

'x':"101100110"

'y':"000011"

'z':"10110011110"

' ':"00110000"

',',"001111"

'.',"001110"

'\'':"001100011"

'!':"00110010"

'-':"00110011"

'(':"0011010"

'':"0011011"

3.4 系统主要函数及其功能描述3.5 核心代码片段描述和注释

4.系统部署

4.1 开发环境的建立

开发环境:

Web服务器用的是Apache

编写代码的工具:Dreamweaver 8

4.2 系统运行环境的建立

运行的操作系统是windows XP

浏览器是用IE8

4.3 系统的部署和运行

5.系统测试和运行效果

5.1 系统运行主要界面及其功能说明

在这个输入框中输入要编码的文章。然后点击转成哈夫曼编码按钮即可。

5.2 系统测试数据描述

输入测试文章为:Christmas celebrations in the West today

From November onwards, it is impossible to forget that Christmas is coming. Coloured lights decorate many town centres and shops, along with shiny decorations, and artificial snow painted on shop windows.

In streets and shops, 'Christmas trees' (real or plastic evergreen 'conifer' trees) will also be decorated with lights and Christmas ornaments.

Shopping centres become busier as December approaches and often stay open till late.Shopping centre speaker systems systems will play Christmas 'carols' - the traditional Christmas Christian songs, and groups of people will often sing carols on the streets to raise money for charity. Most places of work will hold a short Christmas party about a week before Christmas. Although traditional Christmas foods may be eaten, drink (and plenty of it) means that little work will be done after the party!

By mid-December, most homes will also be decorated with Christmas trees, coloured lights and

paper or plastic decorations around the rooms. These days, many more people also decorate garden trees or house walls with coloured electric lights, a habit which has long been popular in USA.

In many countries, most people post Christmas greeting cards to their friends and family, and these cards will be hung on the walls of their homes. In UK this year, the British Post Office expects to handle over 100 million cards EACH DAY, in the three weeks before Christmas.

Christmas cards

The custom of sending Christmas cards started in Britain in 1840 when the first 'Penny Post' public postal deliveries began. (Helped by the new railway system, the public postal service was the 19th century's communication revolution, just as email is for us today.) As printing methods improved, Christmas cards were produced in large numbers from about 1860. They became even more popular in Britain when a card could be posted in an unsealed envelope for one half-penny - half the price of an ordinary letter.

Traditionally, Christmas cards showed religious pictures - Mary, Joseph and baby Jesus, or other parts of the Christmas story. Today, pictures are often jokes, winter pictures, Father Christmas, or romantic scenes of life in past times.

5.3 系统运行和测试结果

运行的结果显示为:

111100111110010111100001100010111000100001001100001111001100000011001001001010 01010001110011101000010011000011101010001100001000111110110001100001011010001100 00110000011000010000110100000100000110011000000110001001011110101011101110001100 0010100111011000110101110010010110010100110000011101010110100000100101010000001 00111100110000111010000011000011100001001100001110101110010011011000100011110010 01000000110001100001000011001100001011110110101000010110100000110000100011111000 10100000110000111100111110010111100001100010111000100001001100001110000100110000 11110001110111011101010000010001110001100001111000110000001111110101011100100000 11000000000111000001011111010000001001100000100011011110001101010010100011000110 00010111000101010000011001100001000011101101000101000110000111100110101010000101 11000010011000000101010010000011000000011111100110100110001001111001100000010000 00011101000001000110000101101000111010001111100011000000011111101110101000001100 11000001000110111100011010100101000111001110100001001111001100000010101001000001 10000001001011000111010111111101111001110001000000001100000001101001110110100000 11000001001100101110101010001100100000110000011101000110000000111111001101001100 11000010110100011101010010000111011010000001001110001100000011000100001100010011 1010100011000000011000010111011010000001001100000010101001000001100000001111110 01101001100010011110011000000110001111110011111001011110000110001011100010000100

1100001000010111011000010011000110011000000110100101110001000000001100000110101 00110000010011000000010000110001110111100001100001101011000110010100001001011101 10101000110000001100011111100011101011101011111100101001100011001100001000010111 0110000100110110011000010110100011100000000000001100000010000000001011001100000 10010110001100000100011011110001101010010100011001000001100001011010001110100011 11100011000000000111000001011111010000001001100000010101001000001100001111001111 10010111100001100010111000100001001100000110101101000101011101101010100000010011 10001100000011000100001100000011000000110001000001111110011010011010011111010100 00010001100001111001101010100001011100001001100000100101101111000111011101100011 00000100101111010001111011001010011000000100001001100000100011011110011010111001 00101100101001100000010010011010011010101100101111001111101100001001100000010101 00100000110000011101111100011010100011000000011000001000001100110000011010011110 10100011000010001110000000000000110000000000010100011000111000011111100110100110 10011111010100000100011000011110011010101000010111000110000000101001111000101011 0010110010100110000000100001100011000110101110000100110000000100001100011000110 1011100001001100001011010001110000000000000110000010011000000010000011001100001 11100111110010111100001100010111000100001001100000011000111111000010010101100000 00010011000110011000000110011001100001000111110110001100001000010100100100011101 00011100111010001000000001100001111001111100101111000011000101110001000010011000 01111001111100101111000011000111000101010001100000001011101000001000010011110011 00000010101001000001100000000100101011111101010011000100110000011101111001100000 10011110011010011000001100011000010110100011100000000000001100000111011111000110 1010001100000001111010100000100011000011110000100101011000000001001100000111010 00110000100011111011000110000000110000101110110100000010011000010000110011000001 01001011100001110001100001011100111010110000011001100001011110110101001100001111 00111110001001011110100000001100111000110000101110011000110000011000001001100000 00101111001100001001100000111011110011000010110100001101011011001000110000101101 00011100000000000001100001111100110000001000001100000010001100000001111110011010 11000001100001111001111100101111000011000101110001000010011000001001100100101100 00000110011000000100100100111111011000001100000010001100001011010001101101011001 00011000001001011010111101101011100011000011110011111001011110000110001011100010 00010011100011000000100000010001111100111111010000101111100011000010000101001001 00011101000111001110100010000000011000011110011111001011110000110001011100010000 10011000010111101101101000000100110000101110001000001100110000010010110001100001 1000101000110101000111100110000010000101111010101011001000110000001101000101010 01000001100000100110000011010101000000011001100000111011110011000011101000001101 1001100001011101100010101000010011000010001111100010100000110000000001110100010 0000000110001100001011010000110101101100100011000010110100011100000000000001100 00010010110001100000100001110101100011000000101011111000110010100110000100011111 0110001100000100110010010110000000110011001000110000001100010001001000001100110 00010111011100100000110011010001101111001101011100100101100101001111001100001011 10011000110000011000011111001110111011000010011000010110100011100000000000001100 0000100000000010110011000001001011000110000010001101111000110101001010001100100 00011000010110100011101000111110001100001111001111100101111000011000101110001000

01001100001000010111011000010011110011000011110001100000011111101010111001000001 1000000000111000001011111010000001001100000010101001000001100000100110010010011 11001010011000001101010011000001001100000001000011000111011110000110000010001101 11100011010100101000111001110100001001100000010010101111110110100100000110000100 01111101100011000001010110111011100001001110001100001000111110110000111000110000 01000001000001100010011110011000010111000101010000011001100001011100110101110001 10000010011110011010011000001100011000000100000000010110011000001000110111100011 0101001010001100011000000001000100101010001101010001100001000010111011000010011 00000110101001100001111100111111010001110001100001011010000010000000000000010011 00001011010001110100011111000110000111100011000000111111010101110010000011000011 00000011011110010000101111011110000110000000001110000010111110100000010011110011 00000010001100001111100010010010111010000011000010110100011111011101111001111100 0110000111110001000010011000000000011101000001000110000010010110110101000110000 01001101101001111110100000001001010011000011101010001100001111010001001000111000 1100010000110000001100000011000000110001001110101000110000101110001010100000110 01100001111000111111011010100001011110110000100111100110000101110011000110000011 00000100111100110100110000011000110000010011011000110000011000011110011111001011 11000011000101110001000010011000000001001011101101000111010100000100011000011110 00010010101000000100110000100001100110000100011111011011100101001100001011110101 11101101010010000001001100000010101001000001100001011110010101110111000000000011 00111100110000001010100100000110000100011111011000011100011000011110000100101010 00000100110000101101000111000000000000011000001001011000110000111110111101101000 0010001100000111010001100001000111110110001100001011010000010000000000000010011 000001110111100110000100011111011011100101001100001111100111011101100001001110001 10000111010100011000011110110110010001100001000111110111000010011000000001111000 10010100111100110000100011111011000110000010010010111101000111000011111100011000 001001101100011000001100000111011111011111110111100110001100001101011001100100111 10111100100000010011000010000110011000011111000101010010000000011000110000011101 100011001010011000011111110110111111101101111110011000010111011100000000000111001 11010001100001111000010010101000000100110000110001011110011111000110000010000010 00001100111100110000111010100011000010001111101100011000010001111100101110110001 10000101101000110110101100100001001100000100101101011110110101110001100001111001 11110010111100001100010111000100001001110001100000011000100111100111110010111100 00110001011100010000100110000111100001001010100000010011000000110001001000111110 11000110000111100111101000110000111011100011000001110111100110000000111010100100 01110101000001000110000111100111110010111100001100010111000100001001100001111000 0100101010000001001100000001100000100101100011001000001100001110101000110000010 01001011110100000101110101000110000111010100011000011111110110111101011011001011 01111110011000010110100011111011010100011000010001111101100011000010111111100101 00011000001100000011000110100111101010101000001100110000010011011000110000011000 11001100000100111111010100100000011101111000011000001001101100011000001000000001 1000001000110000001110101100011001011110110000100110000010010110000010001010100 01110001100000011010111110110000000100111100100000110000010010000011001100001000 11111011000110000101011010110100000110000010100101110000001011010000010000011001

10000000100001100011000110101110001111001100001000111110110001100000100111111010 10010000001110111100001100000100110110001100000100000000110000000111001011011000 11101111001100011000010110100000100001001100001000111110110001100001111111011011 11101000111110001100001111001101010100011110101010000110011000110001001100001111 00011101110101110111101101011101111000010100011100111010001100000101110101100001 10000011110110001110011101000111100110000101100111011110100011000001100000010000 10011000011010111000101110000000011000011100001001100001011110110101001100001111 0100010011000010000110100000100000110011100011011001100000010000100110000010011 01011110101010001110101000001000110000101110110100011111001101000000100110000111 01011100100110101011101100011001000001111001100001111001111100101111000011000101 1100010000100110000111100001001010100000010011000010110100011001011100011000001 00110101011010001111011111001100100000110000111010100011000000000001001010000101 10001100001010111101101110010010110010100010011000010111101010111011100011000000 100100100111111011000001100001111111011011110101101110110110111111001110001100001 00011111011000001100110000010010110111100001010111011000110000110101100011010100 01100001011100110101110001100000100110110100111111010000000100101001100001110101 00011000001001001011110100000101110101000110000101101000111110110101000110000001 00011000011110000100101010000011000011110001111110100000010000011000001001011000 11000001001101100011000110010000011000011101010001100000010101000110000111101101 00001110001000000110010000011000011010101011000110000000110100111100011000010111 10110101001100000111010110001100001111100010000001011110011001101001111010101010 00001100110000001100110011000011111000100000010111100110000100011111011000110000 01001101011110111100110001100000111011110011000000101010001100000110101010001110 1010001001010000110011000000000110100010001100101001110001100000011000100001100 01001000010100100100011101000111001110100010000000000000001100111100110000111100 11111001011110000110001011100010000100110000111100001001010100000010011000000011 11110011101101000110010000011000001011100000011100000101110011111101000100110000 01001111101111001000111101010111000010011000000110011001100001011100010010100001 10011110011000010110011100110001110010011111110001100000010101001000001100000100 10001001001000001100110000101100111011000011111010001001111001100000110101001100 00011100011111011001010011000001001100100101100000010011000001110111100110000100 01111101100011000011110011111001011110000110001011100010000100110000000110000110 10100001100111000110000100001101000001000001100111100110000010011111011110010001 11101010111000010011000000100101110001100000111011111000110101000110000101100111 00111011001011000010011110011000010110100011101010100011001010011000001001111101 11100100011110101011100001001111001100001011110010100011111011001010011000011110 01111100101111000011000101110001000010011110011000001101010011000001010111011100 01010101000111011110000110000000111110011010101100001001100000111011110011000000 00011101011111100011000011101010001100000100110010000110000011000010001110101110 110000100111000110001000011000000110001001011001111110000000

然后再点击转成abc英文按钮即可转回去:

Christmas celebrations in the West today

From November onwards, it is impossible to forget that Christmas is coming. Coloured lights

decorate many town centres and shops, along with shiny decorations, and artificial snow painted on shop windows.

In streets and shops, 'Christmas trees' (real or plastic evergreen 'conifer' trees) will also be decorated with lights and Christmas ornaments.

Shopping centres become busier as December approaches and often stay open till late.Shopping centre speaker systems systems will play Christmas 'carols' - the traditional Christmas Christian songs, and groups of people will often sing carols on the streets to raise money for charity. Most places of work will hold a short Christmas party about a week before Christmas. Although traditional Christmas foods may be eaten, drink (and plenty of it) means that little work will be done after the party!

By mid-December, most homes will also be decorated with Christmas trees, coloured lights and paper or plastic decorations around the rooms. These days, many more people also decorate garden trees or house walls with coloured electric lights, a habit which has long been popular in USA.

In many countries, most people post Christmas greeting cards to their friends and family, and these cards will be hung on the walls of their homes. In UK this year, the British Post Office expects to handle over 100 million cards EACH DAY, in the three weeks before Christmas.

Christmas cards

The custom of sending Christmas cards started in Britain in 1840 when the first 'Penny Post' public postal deliveries began. (Helped by the new railway system, the public postal service was the 19th century's communication revolution, just as email is for us today.) As printing methods improved, Christmas cards were produced in large numbers from about 1860. They became even more popular in Britain when a card could be posted in an unsealed envelope for one half-penny - half the price of an ordinary letter.

Traditionally, Christmas cards showed religious pictures - Mary, Joseph and baby Jesus, or other parts of the Christmas story. Today, pictures are often jokes, winter pictures, Father Christmas, or romantic scenes of life in past times.

6.总结

6.1 系统开发总结

通过本次课程设计使我对哈夫曼树及哈夫曼编码有了更深刻的理解,同时对java的编程以及算法的实现产生了比较大的兴趣。还学到了许多在处理程序时

的技巧和方法,这都对以后的学习大有裨益,以及感受到在编程设计中团队合作精神的重要性。

在这次程序设计中,我觉得重要的一点,那就是不要人云亦云,要有自己的主见,不管别人如何,一定要有自己的思想,并且始终不改变的去坚持,纵然,可能会遇到很多难以解决的困难,都要自始到终,相信自己能把这个程序做得出来。当自己最终在自己的努力下完成任务的时候,那就会有更多属于自己的收获,包括成功的喜悦以及程序中体现的思想。

其次是我认为调试功能是整个编写程序过程中很重要的一个环节。通过此次实验我对调试有了更加深刻的理解,懂得怎么样去调试程序,如何发现错误,如何更高效的改正,最终能把程序实现。

6.2 心得体会

组长曾庆伟心得体会:

对BYTE类型的操作和持有对象的使用更加深刻了。这个程序还是有很多不足的

虽然java是面向对象的,但是我还是用了很多面向过程的技巧来解决实际问题。以后会多加注意。

组员1 徐华涛心得体会:通过本次课程设计,加深了我对java的了解及运用,也从中学会了怎样去写、如何去写程序。同时也知道所有程序必须从踏踏实实中来。

组员2 王锦贤心得体会:通过本次课程设计,加深了我对java的了解及运用,同时也从这次课程设计学会了课堂上没法学会的知识。

组员3 周基霖心得体会:通过这次课程设计,加深了我对java的了解及运用,这次课程设计,我也是给组长打打下手,同时也懂得了程序该如何去写,怎样去写。

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

……..

7.参考文献和资料

[1]《Java编程思想》……………………………………………美Bruce Eckel 陈吴鹏译

[2] Java面向对象程序设计[专著]=Obiect-oriented programming with Java/张亦辉, 冯

华, 胡洁编著

教师评语和评分

教师评语:

教师评分:_____________

教师签名:

日期:

.

哈夫曼编码译码系统实验报告,数据结构课程设计报告

v .. . .. 安徽大学 数据结构课程设计报告项目名称:哈弗曼编/译码系统的设计 与实现 姓名:鉏飞祥 学号:E21414018 专业:软件工程 完成日期 2016/7/4 计算机科学与技术学院

1 .需求分析 1.1问题描述 ?问题描述:利用哈夫曼编码进行通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。但是,这要求在发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码(解码)。对于双工信道(即可以双向传输信息的信道),每端都需要一个完整的编/译码系统。试为这样的信息收发站设计一个哈夫曼编译码系统。 1.2基本要求 (1)输入的形式和输入值的范围; (2)输出的形式; (3)程序所能达到的功能。 1.基本要求 (1)初始化(Initialzation)。从数据文件DataFile.data中读入字符及每个字符的权值,建立哈夫曼树HuffTree; (2)编码(EnCoding)。用已建好的哈夫曼树,对文件ToBeTran.data中的文本进行编码形成报文,将报文写在文件Code.txt中; (3)译码(Decoding)。利用已建好的哈夫曼树,对文件CodeFile.data中的代码进行解码形成原文,结果存入文件Textfile.txt中; (4)输出(Output)。输出DataFile.data中出现的字符以及各字符出现的频度(或概率);输出ToBeTran.data及其报文Code.txt;输出CodeFile.data

及其原文Textfile.txt; 2. 概要设计 说明本程序中用到的所有抽象数据类型的定义。主程序的流程以及各程序模块之间的层次(调用)关系。 (1)数据结构 哈夫曼树的节点 struct huff { int weight; int parent; int l; int r; }; 哈夫曼编码的存储 struct huff *hufftree; (2)程序模块 选择1到i-1中parent为0且权值最小的两个下标 void Select(struct huff *HT, int n, int &s1, int &s2) 构建哈夫曼树: void huffmancoding(struct huff *ht,int *w,int n)

数据结构哈夫曼编码译码器课程设计报告

JAVA语言实验报告 学院计算机工程学院班级计算1013 姓名佐伊伦学号 201081xxxx 成绩指导老师 xxxx 2012年09月03日

目录 目录 (1) 1 课程设计的目的和意义 (2) 2 需求分析 (3) 3 系统(项目)设计 (5) ①设计思路及方案 (5) ②模块的设计及介绍 (5) ③主要模块程序流程图 (8) 4 系统实现 (11) ①主调函数 (12) ②建立HuffmanTree (12) ③生成Huffman编码并写入文件 (15) ④电文译码 (16) 5 系统调试 (17) 参考文献 (21) 附录源程序 (22)

1 课程设计的目的和意义 在当今信息爆炸时代,如何采用有效的数据压缩技术来节省数据文件的存储空间和计算机网络的传送时间已越来越引起人们的重视。哈夫曼编码正是一种应用广泛且非常有效的数据压缩技术。 哈夫曼编码的应用很广泛,利用哈夫曼树求得的用于通信的二进制编码称为哈夫曼编码。树中从根到每个叶子都有一条路径,对路径上的各分支约定:指向左子树的分支表示“0”码,指向右子树的分支表示“1”码,取每条路径上的“0”或“1”的序列作为和各个对应的字符的编码,这就是哈夫曼编码。 通常我们把数据压缩的过程称为编码,解压缩的过程称为解码。电报通信是传递文字的二进制码形式的字符串。但在信息传递时,总希望总长度尽可能最短,即采用最短码。 作为信息管理专业的学生,我们应该很好的掌握这门技术。在课堂上,我们能过学到许多的理论知识,但我们很少有过自己动手实践的机会!课程设计就是为解决这个问题提供了一个平台。 在课程设计过程中,我们每个人选择一个课题,认真研究,根据课堂讲授内容,借助书本,自己动手实践。这样不但有助于我们消化课堂所讲解的内容,还可以增强我们的独立思考能力和动手能力;通过编写实验代码和调试运行,我们可以逐步积累调试C程序的经验并逐渐培养我们的编程能力、用计算机解决实际问题的能力。 在课程设计过程中,我们不但有自己的独立思考,还借助各种参考文献来帮助我们完成系统。更为重要的是,我们同学之间加强了交流,在对问题的认识方面可以交换不同的意见。同时,师生之间的互动也随之改善,我们可以通过具体的实例来从老师那学到更多的实用的知识。 数据结构课程具有比较强的理论性,同时也具有较强的可应用性和实践性。课程设计是一个重要的教学环节。我们在一般情况下都能够重视实验环节,但是容易忽略实验的总结,忽略实验报告的撰写。通过这次实验让我们明白:作为一名大学生必须严格训练分析总结能力、书面表达能力。需要逐步培养书写科学实验报告以及科技论文的能力。只有这样,我们的综合素质才会有好的提高。

哈夫曼树编码译码实验报告(DOC)

数据结构课程设计设计题目:哈夫曼树编码译码

目录 第一章需求分析 (1) 第二章设计要求 (1) 第三章概要设计 (2) (1)其主要流程图如图1-1所示。 (3) (2)设计包含的几个方面 (4) 第四章详细设计 (4) (1)①哈夫曼树的存储结构描述为: (4) (2)哈弗曼编码 (5) (3)哈弗曼译码 (7) (4)主函数 (8) (5)显示部分源程序: (8) 第五章调试结果 (10) 第六章心得体会 (12) 第七章参考文献 (12) 附录: (12)

在当今信息爆炸时代,如何采用有效的数据压缩技术节省数据文件的存储空间和计算机网络的传送时间已越来越引起人们的重视,哈夫曼编码正是一种应用广泛且非常有效的数据压缩技术。哈夫曼编码是一种编码方式,以哈夫曼树—即最优二叉树,带权路径长度最小的二叉树,经常应用于数据压缩。哈弗曼编码使用一张特殊的编码表将源字符(例如某文件中的一个符号)进行编码。这张编码表的特殊之处在于,它是根据每一个源字符出现的估算概率而建立起来的(出现概率高的字符使用较短的编码,反之出现概率低的则使用较长的编码,这便使编码之后的字符串的平均期望长度降低,从而达到无损压缩数据的目的)。哈夫曼编码的应用很广泛,利用哈夫曼树求得的用于通信的二进制编码称为哈夫曼编码。树中从根到每个叶子都有一条路径,对路径上的各分支约定:指向左子树的分支表示“0”码,指向右子树的分支表示“1”码,取每条路径上的“0”或“1”的序列作为和各个叶子对应的字符的编码,这就是哈夫曼编码。哈弗曼译码输入字符串可以把它编译成二进制代码,输入二进制代码时可以编译成字符串。 第二章设计要求 对输入的一串电文字符实现哈夫曼编码,再对哈夫曼编码生成的代码串进行译码,输出电文字符串。通常我们把数据压缩的过程称为编码,解压缩的过程称为解码。电报通信是传递文字的二进制码形式的字符串。但在信息传递时,总希望总长度能尽可能短,即采用最短码。假设每种字符在电文中出现的次数为Wi,编码长度为Li,电文中有n种字符,则电文编码总长度为∑WiLi。若将此对应到二叉树上,Wi为叶结点的权,Li为根结点到叶结点的路径长度。那么,∑WiLi 恰好为二叉树上带权路径长度。因此,设计电文总长最短的二进制前缀编码,就是以n种字符出现的频率作权,构造一棵哈夫曼树,此构造过程称为哈夫曼编码。设计实现的功能: (1) 哈夫曼树的建立; (2) 哈夫曼编码的生成; (3) 编码文件的译码。

《哈夫曼编码译码课程设计》报告

计算机与信息工程系 《实践环节名称》报告 专业:计算机科学与技术 班级:******** 学号:********* 姓名:杨明英 报告完成日期:2011/6/10 指导教师:*** 评语: 成绩: 批阅教师签名:批阅时间:

目录 1.问题描述 (1) 2.基本要求 (1) 3.数据结构 (1) 4.总体设计 (1) 5.详细设计 (2) 5.1主函数 void main() (2) 5.2建立文件 void jianliwenjian() (3) 5.3输入原文 void luruyuanwen() (4) 5.4创建哈夫曼树 void chuangjian() (5) 5.5编码 void bianma() (6) 5.6对哈夫曼码译码 void yiwen() (7) 5.7保存译文 void baocunyiwen() (8) 5.8输出原文 void duquyuanwen() (9) 5.9输出原文编码void duqubianma() (10) 5.10输出译文 void duquyiwen() (11) 6.测试与调试 (11) 7.源程序清单 (8) 8.实验心得 (28)

1.问题描述 打开一篇英文文章,统计该文章中每个字符出现的次数,然后以它们作为权值,设计一个哈夫曼编/译码系统。 2.基本要求 以每个字符出现的次数为权值,建立哈夫曼树,求出哈夫曼编码,对文件yuanwen 中的正文进行编码,将结果存到文件yiwen中,再对文件yiwen中的代码进行译码,结果存到textfile中。 3.数据结构 char CH[N]; //记录原文字符数组 char YW[N]; //记录译文字符数组 typedef char * Hcode[m+1]; //存放哈夫曼字符编码串的头指针的数组 typedef struct { char a; int num; }dangenode; //记录单个字符的类别和出现的次数 typedef struct { dangenode b[m]; int tag; }jilunode; //统计原文出现的字符种类和数量 typedef struct node //静态三叉的哈夫曼树的定义 { int weight; //结点的权值 int parent; //双亲的下标 int Lchild; //左孩子结点的下标 int Rchild; //右孩子结点的下标 }htnode,hn[M+1]; // hn是结构数组类型,0号单元不用 4.总体设计 功能函数模块划分 void main() //主函数 void jianliwenjian() //建立存储原文的文件yuanwen void luruyuanwen() //通过程序录入原文到文件yuanwen中 void min_2(hn ht,int n,int *tag1,int *tag2) //选择权值较小的两个结点 void chuangjian(jilunode * jilu,hn ht) //建立哈夫曼树 void bianma(jilunode * jilu,hn ht,Hcode hc,int n) //对原文进行编码 void bianmabaocun(Hcode hc,jilunode * jilu) //保存编码在文件yiwen中 void yiwen(Hcode hc,jilunode * jilu) //读取yiwen中的编码,并将其翻译为原文 void baocunyiwen() //将翻译的译文保存到文件textfile中 void duqubianma() //在编码文件yiwen中读取编码

哈夫曼编码与译码的实现

数据结构课程设计评阅书

2011—2012学年第一学期 专业:信息管理与信息系统学号: 1021024016 姓名:万永馨 课程设计名称:数据结构课程设计 设计题目:哈夫曼编码与译码的实现 完成期限:自 2012 年 2 月 20 日至 2012 年 3 月 2 日共 2 周 设计依据、要求及主要内容(可另加附页): 该设计题目将按以下要求完成: 哈夫曼编码与译码是信息传输中应用的经典算法,运用C或VC++结合数据结构等基础知识,按 以下要求编程实现各种进制的转换。 任务要求:1)阐述设计思想,画出流程图;2)需要对哈夫曼编码/译码的相关原理有所了解,设计数 据结构,建立必要的信息数据文件(最好存储成外部文件),并分析完成用户所需的基本操作功能;3)实现给定信息的编码和译码功能;4)应有较好的界面设计,说明程序测试方法;5)按照格式要 求完成课程设计说明书。 设计要求: 1)问题分析和任务定义:根据设计题目的要求,充分地分析和理解问题,明确问题要求做什么?(而不是怎么做?)限制条件是什么?确定问题的输入数据集合。 2)逻辑设计:对问题描述中涉及的操作对象定义相应的数据类型,并按照以数据结构为中心的 原则划分模块,定义主程序模块和各抽象数据类型。逻辑设计的结果应写出每个抽象数据类型的定 义(包括数据结构的描述和每个基本操作的功能说明),各个主要模块的算法,并画出模块之间的调 用关系图; 3)详细设计:定义相应的存储结构并写出各函数的伪码算法。在这个过程中,要综合考虑系统 功能,使得系统结构清晰、合理、简单和易于调试,抽象数据类型的实现尽可能做到数据封装,基 本操作的规格说明尽可能明确具体。详细设计的结果是对数据结构和基本操作做出进一步的求精, 写出数据存储结构的类型定义,写出函数形式的算法框架; 4)程序编码:把详细设计的结果进一步求精为程序设计语言程序。同时加入一些注解和断言, 使程序中逻辑概念清楚; 5)程序调试与测试:能够熟练掌握调试工具的各种功能,设计测试数据确保程序正确。调试正 确后,认真整理源程序及其注释,形成格式和风格良好的源程序清单和结果; 6)结果分析:程序运行结果包括正确的输入及其输出结果和含有错误的输入及其输出结果。算 法的时间、空间复杂性分析; 7)编写课程设计报告; 以上要求前三个阶段的任务完成后,将设计说明书的草稿交指导老师面审,审查合格方可进入 后续阶段的工作。设计工作结束,经指导老师验收合格后将设计说明书装订,并答辩。

哈夫曼编码译码系统实验报告,数据结构课程设计

安徽大学 数据结构课程设计报告项目名称:哈弗曼编/译码系统的设计 与实现 姓名:鉏飞祥 学号:E21414018 专业:软件工程 完成日期 2016/7/4 计算机科学与技术学院

1 .需求分析 1.1问题描述 ?问题描述:利用哈夫曼编码进行通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。但是,这要求在发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码(解码)。对于双工信道(即可以双向传输信息的信道),每端都需要一个完整的编/译码系统。试为这样的信息收发站设计一个哈夫曼编译码系统。 1.2基本要求 (1) 输入的形式和输入值的范围; (2) 输出的形式; (3) 程序所能达到的功能。 1.基本要求 (1)初始化(Initialzation)。从数据文件DataFile.data中读入字符及每个字符的权值,建立哈夫曼树HuffTree; (2)编码(EnCoding)。用已建好的哈夫曼树,对文件ToBeTran.data中的文本进行编码形成报文,将报文写在文件Code.txt中; (3)译码(Decoding)。利用已建好的哈夫曼树,对文件CodeFile.data 中的代码进行解码形成原文,结果存入文件Textfile.txt中; (4)输出(Output)。输出DataFile.data中出现的字符以及各字符出现的频度(或概率);输出ToBeTran.data及其报文Code.txt;输出CodeFile.data 及其原文Textfile.txt; 2. 概要设计 说明本程序中用到的所有抽象数据类型的定义。主程序的流程以及各程序模块之间的层次(调用)关系。 (1)数据结构 哈夫曼树的节点 struct huff

哈夫曼编码课程设计报告

哈夫曼编码课程设计报 告 Last revised by LE LE in 2021

湖南科技学院 数据结构课程设计报告课题: 霍夫曼编码 专业班级:信计1202 学号: 姓名:黄思琪 指导教师: 牛志毅

1 课程设计的目的和意义 在当今信息爆炸时代,如何采用有效的数据压缩技术来节省数据文件的存储空间和计算机网络的传送时间已越来越引起人们的重视。哈夫曼编码正是一种应用广泛且非常有效的数据压缩技术。 哈夫曼编码的应用很广泛,利用哈夫曼树求得的用于通信的二进制编码称为哈夫曼编码。树中从根到每个叶子都有一条路径,对路径上的各分支约定:指向左子树的分支表示“0”码,指向右子树的分支表示“1”码,取每条路径上的“0”或“1”的序列作为和各个对应的字符的编码,这就是哈夫曼编码。 通常我们把数据压缩的过程称为编码,解压缩的过程称为解码。电报通信是传递文字的二进制码形式的字符串。但在信息传递时,总希望总长度尽可能最短,即采用最短码。 2.需求分析 课题:哈夫曼编码译码器系统 问题描述:打开一篇英文文章,统计该文章中每个字符出现的次数,然后以它们作为权值,对每一个字符进行编码,编码完成后再对其编码进行译码。 问题补充:1. 从硬盘的一个文件里读出一段英语文章; 2. 统计这篇文章中的每个字符出现的次数; 3. 以字符出现字数作为权值,构建哈夫曼树 4. 对每个字符进行编码并将所编码写入文件然后对所编码进行破译。 具体介绍:在本课题中,我们在硬盘D盘中预先建立一个文档,在里面编辑一篇文章(大写)。然后运行程序,调用fileopen()函数读出该文章,显示在界面;再调用tongji()函数对 该文章的字符种类进行统计,并对每个字符的出现次数进行统计,并且在界面上显 示;然后以每个字符出现次数作为权值,调用Create_huffmanTree()函数构建哈夫曼 树。然后调用Huffman_bianma()函数对哈夫曼树进行编码,调用coding()函数将编码 写入文件。

huffman编码译码实现文件的压缩与解压.

数据结构 课程设计 题目名称:huffman编码与解码实现文件的压缩与解压专业年级: 组长: 小组成员: 指导教师: 二〇一二年十二月二十六日

目录 一、目标任务与问题分析 (2) 1.1目标任务 (2) 1.2问题分析 (2) 二、算法分析 (2) 2.1构造huffman树 (2) 2.1.1 字符的统计 (2) 2.1.2 huffman树节点的设计 (2) 2.2构造huffman编码 (3) 2.2.1 huffman编码的设计 (3) 2.3 压缩文件与解压文件的实现 (3) 三、执行效果 (4) 3.1界面 (4) 3.2每个字符的编码 (4) 3.3操作部分 (5) 3.4文件效果 (6) 四、源程序 (7) 五、参考文献 (16)

huffman编码与解码实现文件的压缩与解压 一、目标任务与问题分析 1.1目标任务 采用huffman编码思想实现文件的压缩和解压功能,可以将任意文件压缩,压缩后也可以解压出来。这样即节约了存储空间,也不会破坏文件的完整性。 1.2问题分析 本问题首先应该是利用哈夫曼思想,对需要压缩的文件中的个字符进行频率统计,为了能对任意的文件进行处理,应该所有的文件以二进制的方式进行处理,即对文件(不管包含的是字母还是汉字)采取一个个的字节处理,然后根据统计的频率结果构造哈夫曼树,然后对每个字符进行哈夫曼编码,然后逐一对被压缩的文件的每个字符构建的新的哈夫曼编码存入新的文件中即得到的压缩文件。解压过程则利用相应的哈夫曼树及压缩文件中的二进制码将编码序列译码,对文件进行解压,得到解压文件。 二、算法分析 2.1构造huffman树 要利用哈夫曼编码对文本文件进行压缩,首先必须知道期字符相应的哈夫曼编码。为了得到文件中字符的频率,一般的做法是扫描整个文本进行统计,编写程序统计文件中各个字符出现的频率。由于一个字符的范围在[0-255]之间,即共256个状态,所以可以直接用256个哈夫曼树节点即数组(后面有节点的定义)空间来存储整个文件的信息,节点中包括对应字符信息,其中包括频率。 2.1.1 字符的统计 用结构体huffchar来存放文件字符的信息。其中有文件中不同字符出现的种类Count、字符data。 struct huffchar{ //存放读入字符的类; int Count;//字符出现的个数; char data;//字符; }; 函数实现: bool char_judge(char c)//判断字符出现的函数; void char_add(char c)//添加新出现的字符; void read_file_count() //文件的读取 2.1.2 huffman树节点的设计 用结构体huff_tree来存储结点信息,其中有成员频率weight、父亲节点parent、左儿子节点lchild、右儿子节点rchild。

哈夫曼树的编码和译码

#include"stdafx.h" #include"stdio.h" #include"conio.h" #include #include #include using namespace std; #define maxbit 100 #define Maxvalue 2000//最大权值整数常量#define Maxleaf 100//最大叶子结点数 #define size 300//0、串数组的长度 static int n;//实际的叶子结点数 struct HNodeType { int weight; int parent; int lchild; int rchild; int ceng;//结点相应的层数 char ch;//各结点对应的字符 }; struct HCodeType { int bit[maxbit];//存放编码的数组 int start;//编码在数组中的开始位置}; static HNodeType *HuffNode;//定义静态指针HNodeType *init()//初始化静态链表 { HuffNode=new HNodeType[2*n-1]; for(int i=0;i<2*n-1;i++) { HuffNode[i].weight=0; HuffNode[i].parent=-1; HuffNode[i].lchild=-1; HuffNode[i].rchild=-1; HuffNode[i].ceng=-1; HuffNode[i].ch='0'; } return HuffNode; }

哈夫曼编码译码器---课程设计报告

目录 目录 (2) 1课程设计的目的和意义 (3) 2需求分析 (4) 3概要设计 (4) 4详细设计 (8) ¥ 5调试分析和测试结果 (11) 6总结 (12) 7致谢 (13) 8附录 (13) 参考文献 (20) .

| ; 1 课程设计目的与意义 在当今信息爆炸时代,如何采用有效的数据压缩技术来节省数据文件的存储空间和计算机网络的传送时间已越来越引起人们的重视。哈夫曼编码正是一种应用广泛且非常有效的数据压缩技术。 哈夫曼编码的应用很广泛,利用哈夫曼树求得的用于通信的二进制编码称为哈夫曼编码。树中从根到每个叶子都有一条路径,对路径上的各分支约定:指向左子树的分支表示“0”码,指向右子树的分支表示“1”码,取每条路径上的“0”或“1”的序列作为和各个对应的字符的编码,这就是哈夫曼编码。 通常我们把数据压缩的过程称为编码,解压缩的过程称为解码。电报通信是传递文字的二进制码形式的字符串。但在信息传递时,总希望总长度尽可能最短,即采用最短码。 作为计算机专业的学生,我们应该很好的掌握这门技术。在课堂上,我们能过学到许多的理论知识,但我们很少有过自己动手实践的机会!课程设计就是为解决这个问题提供了一个平台。 ( 在课程设计过程中,我们每个人选择一个课题,认真研究,根据课堂讲授内容,借助书本,自己动手实践。这样不但有助于我们消化课堂所讲解的内容,还可以增强我们的独立思考能力和动手能力;通过编写实验代码和调试运行,我们

可以逐步积累调试C程序的经验并逐渐培养我们的编程能力、用计算机解决实际问题的能力。 在课程设计过程中,我们不但有自己的独立思考,还借助各种参考文献来帮助我们完成系统。更为重要的是,我们同学之间加强了交流,在对问题的认识方面可以交换不同的意见。同时,师生之间的互动也随之改善,我们可以通过具体的实例来从老师那学到更多的实用的知识。 数据结构课程具有比较强的理论性,同时也具有较强的可应用性和实践性。课程设计是一个重要的教学环节。我们在一般情况下都能够重视实验环节,但是容易忽略实验的总结,忽略实验报告的撰写。通过这次实验让我们明白:作为一名大学生必须严格训练分析总结能力、书面表达能力。需要逐步培养书写科学实验报告以及科技论文的能力。只有这样,我们的综合素质才会有好的提高。 2 需求分析 课题:哈夫曼编码译码器 ) 问题描述:打开一篇英文文章,统计该文章中每个字符出现的次数,然后以它们作为权值,对每一个字符进行编码,编码完成后再对其编码进行译码。问题补充:1. 从硬盘的一个文件里读出一段英语文章; 2. 统计这篇文章中的每个字符出现的次数; 3. 以字符出现字数作为权值,构建哈夫曼树,并将哈夫曼树的存储 结构的初态和终态进行输出; 4. 对每个字符进行编码并将所编码写入文件然后对所编码进行破 译。 具体介绍:在本课题中,我们在硬盘中预先建立一个文档,在里面编辑一篇文章。然后运行程序,调用函数读出该文章,显示在界面;再调用函数对该文章的字符种类进行统计,并对每个字符的出现次数进行统计,并且在界面上显示;然后以每个字符出现次数作为权值,调用函数构建哈夫曼树;并调用函数将哈夫曼的存储结构的初态和终态进行输出。然后调用函数对哈夫曼树进行编码,调用函数将编码写入文件;再调用对编码进行译码,再输出至界面。至此,整个工作就完成了 3 概要设计。

哈夫曼编码译码的设计与实现数据结构课程设计

《数据结构》课程设计题目--哈夫曼编码/译码的设计与实现 班级:13数据库一班 学号:1315925280 姓名:吴松 指导教师:王超

目录 目录 (1) 一、需求分析 (2) 二、设计要求 (2) 三、概要设计 (2) 1、流程图 (2) 2、设计包含的几个部分 (4) 四、详细设计 (2) 五、显示结果………………………………………………9. 六、心得体会 (10) 七、参考文献 (11) 哈夫曼编码译码 一、需求分析

在当今信息爆炸时代,如何采用有效的数据压缩技术节省数据文件的存储空间和计算机网络的传送时间已越来越引起人们的重视,赫夫曼编码正是一种应用广泛且非常有效的数据压缩技术。哈夫曼编码是一种编码方式,以哈夫曼树—即最优二叉树,带权路径长度最小的二叉树,经常应用于数据压缩。哈弗曼编码使用一张特殊的编码表将源字符(例如某文件中的一个符号)进行编码。这张编码表的特殊之处在于,它是根据每一个源字符出现的估算概率而建立起来的(出现概率高的字符使用较短的编码,反之出现概率低的则使用较长的编码,这便使编码之后的字符串的平均期望长度降低,从而达到无损压缩数据的目的)。赫夫曼编码的应用很广泛,利用赫夫曼树求得的用于通信的二进制编码称为赫夫曼编码。树中从根到每个叶子都有一条路径,对路径上的各分支约定:指向左子树的分支表示“0”码,指向右子树的分支表示“1”码,取每条路径上的“0”或“1”的序列作为和各个叶子对应的字符的编码,这就是赫夫曼编码。哈弗曼译码输入字符串可以把它编译成二进制代码,输入二进制代码时可以编译成字符串。 二、设计要求 对输入的一串电文字符实现赫夫曼编码,再对赫夫曼编码生成的代码串进行译码,输出电文字符串。通常我们把数据压缩的过程称为编码,解压缩的过程称为解码。电报通信是传递文字的二进制码形式的字符串。但在信息传递时,总希望总长度能尽可能短,即采用最短码。假设每种字符在电文中出现的次数为Wi,编码长度为Li,电文中有n种字符,则电文编码总长度为∑WiLi。若将此对应到二叉树上,Wi为叶结点的权,Li为根结点到叶结点的路径长度。那么,∑WiLi 恰好为二叉树上带权路径长度。因此,设计电文总长最短的二进制前缀编码,就是以n种字符出现的频率作权,构造一棵赫夫曼树,此构造过程称为赫夫曼编码。设计实现的功能: (1) 赫夫曼树的建立; (2) 赫夫曼编码的生成; (3) 编码文件的译码。 三、概要设计 哈夫曼编\译码器的主要功能是先建立哈夫曼树,然后利用建好的哈夫曼树生成哈夫曼编码后进行译码。 在数据通信中,经常需要将传送的文字转换成由二进制字符0、1组成的二进制串,称之为编码。构造一棵哈夫曼树,规定哈夫曼树中的左分之代表0,右分支代表1,则从根节点到每个叶子节点所经过的路径分支组成的0和1的序列便为该节点对应字符的编码,称之为哈夫曼编码。 最简单的二进制编码方式是等长编码。若采用不等长编码,让出现频率高的字符具有较短的编码,让出现频率低的字符具有较长的编码,这样可能缩短传送电文的总长度。哈夫曼树课用于构造使电文的编码总长最短的编码方案。 (1)其主要流程图如图1-1所示。

哈夫曼编码与译码器_数据结构课程设计报告

沈阳航空航天大学 课程设计报告 课程设计名称:数据结构课程设计 课程设计题目:实现哈夫曼编码和译码器 院(系):计算机学院 专业:计算机科学与技术 班级:24010102 学号:2012040101082 姓名:尹伟和 指导教师:徐蕾

此页为任务书

目录 1.题目分析 (1) 1.1.题目重述 (1) 1.1.1.系统功能需求分析 (1) 2.程序设计 (2) 2.1.系统功能模块说明 (2) 2.1.1.系统功能模块结构 (2) 2.1.2.系统模块功能说明 (3) 2.2.数据结构说明 (3) 2.2.1.结构体定义说明 (3) 2.2.2.哈夫曼树 (4) 2.2.3.字符-哈夫曼编码对照表 (4) 2.3.函数说明 (4) 3.算法描述 (6) 3.1.哈夫曼树的构建 (6) 3.2.字符-哈夫曼编码对照表 (6) 3.3.编码 (6) 3.4.译码 (7) 4.程序测试 (9) 4.1.字符集输入 (9) 4.2.编码测试 (10) 4.3.译码测试 (11) 参考文献 (13) 附录(程序清单) (14)

沈阳航空航天大学课程设计报告 1.题目分析 1.1.题目重述 本次课程设计的目标是实现一个哈夫曼编码和译码器。该哈夫曼编码和译码器需要根据用户输入的字符集及相应字符出现的频率,对字符集所包含的字符进行哈夫曼编码。同时,作为编码器需要其对用户提供的明文字符串进行编码,使明文字符串变为二进制密文;作为译码器需要对用户提供的二进制密文进行译码,使二进制密文变为字符明文。 1.1.1.系统功能需求分析 通过对课程设计的题目分析,可以得出哈夫曼编码和译码器的功能需求,需求如下: 1)读取用户输入的字符集和相应字符出现的频率; 2)根据用户输入构建哈夫曼树; 3)根据哈夫曼树构建字符-哈夫曼编码对照表; 4)根据字符-哈夫曼编码对照表对明文字符串进行编码; 5)根据哈夫曼树对二进制密文进行译码。

完整word版哈夫曼编码译码器试验报告

中北大学 数据结构 课程设计说明书 学生姓名: 郝晨栋学号: 1021010933 软件学院学院: 软件开发与测试: 专业

哈夫曼编码/目题: 译码器 康珺教指导师 2011年12月20日 目录 1 问题描述.............................................................. 错误!未定义书签。 2 需求分析.............................................................. 错误!未定义书签。 3 概要设计 (1) 3.1抽象数据类型定义 (1) 3.2总体框图以及功能描述 (2) 4 详细设计 (2) 4.1数据类型的定义 (2) 4.2主要模块的算法描述 (3) 5 测试分析................................................................................................

4 6 课程设计总结 (6) 附录(源程序清单) (7) - 1 - 1 问题描述 1.设计一个利用哈夫曼算法的编码和译码系统,重复地显示并处理以下项目,直到选择退出为止。 (1) 将权值数据存放在数据文件(文件名为data.txt,位于当前目录中); (2) 分别采用动态和静态存储结构; 初始化:键盘输入字符集大小n、n个字符和n个权值,建立哈夫曼树; (3) 编码:利用建好的哈夫曼树生成哈夫曼编码;输出编码; 设计要求: (1) 符合课题要求,实现相应功能; (2) 要求界面友好美观,操作方便易行; (3) 注意程序的实用性、安全性。 2 需求分析 编写此软件是为了实现一个利用哈夫曼算法的编码和译码系统。比如,再利用电报进行通讯时,需要将文字转换成由二进制的字符组成的字符串。比如需传送的电文为“A B A C C D A”假设将A,B,C,D分别编码为00、01、10、11.则上述电文遍为00010010101100,总长度为14位。但是在传送过程中,总希望长度能够尽可能的短,于是我们想采用长度不等的编码。但是这种编码必须遵循:任何一个字符的编码都不是另一个字符编码的前缀。 对此软件的要求:能够正确的使得对于输入的字符进行编码以及译码,并且是的在译码过程中不会出错,同时能够将编码以及译码的结果正确的存入文件当中。 3 概要设计 3.1抽象数据类型定义

哈夫曼编码实验报告

中南大学数据结构课程 姓名:刘阳 班级:信息0703 学号:0903070312 实验时间: 08.11.14 指导老师:赵颖

一、实验内容 根据输入的n 个带权结点,构造出哈夫曼树,并且把构造结果输出到屏幕。 二、实验说明 哈夫曼数,也称最优二叉树,是指对于一组带有确定权值的叶结点,构造的具有最小带权路径长度的二叉树。 设二叉树具有n 个带权值的叶结点,那么从根结点到各个叶结点的路径长度与相应结点权值的乘积之和叫做二叉树的带权路径长度WPL ,记作: WPL=k n k k L W *∑=1。在给定一组具有确定权值的叶结点,可以构造出不同的带权二 叉树。根据哈夫曼树的定义,一棵二叉树要使其WPL 值最小,必须使权值越大的叶结点越靠近根结点,而权值越小的叶结点越远离根结点。 在数据通讯中,经常需要将传送的文字转换成由二进制字符0,1组成的二进制串,我们称之为编码。例如,假设要传送的电文为ABACCDA ,电文中只含有A ,B ,C ,D 四种字符,若这四种字符采用下表所示的编码,则电文的代码为000010000100100111 000,长度为21。 在传送电文时,我们总是希望传送时间尽可能短,这就要求电文代码尽可能短。如果在编码时考虑字符出现的频率,让出现频率高的字符采用尽可能短的编码,出现频率低的字符采用稍长的编码,构造一种不等长编码,则电文的代码就可能更短。并且在建立不等长编码时,必须使任何一个字符的编码都不是另一个字符编码的前缀,以避免反译成原文时,编码出现多义性。 在哈夫曼编码树中,树的带权路径长度的含义是各个字符的码长与其出现次数的乘积之和,也就是电文的代码总长,所以采用哈夫曼树构造的编码是一种能使电文代码总长最短的不等长编码。 采用哈夫曼树进行编码,也不会产生上述二义性问题。因为,在哈夫曼树中,每个字符结点都是叶结点,它们不可能在根结点到其它字符结点的路径上,所以一个字符的哈夫曼编码不可能是另一个字符的哈夫曼编码的前缀,从而保证了译码的非二义性。

哈夫曼编码和译码系统

通达学院 算法与数据结构程序设计 题目:哈夫曼编码和译码系统 专业 学生姓名 班级学号 指导教师 指导单位 日期

教师评语 同学出勤率(满勤、较高、一般,较低),学习态度(端正、较端正、一般、较差),程序设计基础(好、较好、一般、较差),演示程序(已经、没有)达到了基本要求,算法设计(好、较好、一般),界面友好程度(好、较好、一般),答辩过程中回答问题(准确、较准确、错误率较高),撰写报告格式(规范、一般)、内容(丰满、简单)、表述(清晰、一般、不清楚),(圆满、较好、基本)完成了课题任务。 教师签名: 年月日 成绩评定 备注

一、题目要求: 题 目 :哈夫曼编码和译码系统 基本要求: (1) 能输入字符集和各字符频度建立哈夫曼树; (2) 产生各字符的哈夫曼编码,并进行解码。 提高要求: (1) 能设计出简捷易操作的窗口界面; (2) 编码和译码存储在文件中。 二、需求分析: 2.1基本思想 根据,哈夫曼的定义,一棵二叉树要使其带权路径长度最小,必须使权值越大的叶子结点越靠近根结点,而权值越小的叶子结点越远离根结点.依据这个特点便提出了哈夫曼算法,其基本思想是: (1) 初始化:由给定的n 个权值{w 1, w 2,…, w n }构造n 棵只有一个根结点的二叉树,从而得到一个二叉树集合F={ T 1,T 2,…,T n }; (2) 选取与合并:在F 中选取根结点的权值最小的两棵二叉树分别作为左、右子树构造一颗新的二叉树,这棵新二叉树的根结点的权值为其左、右子树根结点的权值之和; (3) 删除与加入:在F 中删除作为左、右子树的两棵二叉树,并将新建立的二叉树加入到F 中; (4) 重复(2)、(3)两步,当集合F 中只剩下一棵二叉树时,这棵二叉树便是哈夫曼树. 2.2存储结构 在由哈夫曼算法构造的哈夫曼树中,非叶子结点的度均为2,根据二叉树的性质可知,具有n 个叶子结点的哈夫曼树共有2n-1个结点,其中有n-1个非叶子结点,它们是在n-1次的合并过程中生成的.为了便于选取根结点权值最小的二叉树以及合并操作,设置一个数组HuffmanNode[2n-1]保存哈夫曼树中各结点的信息,数组元素的结点结构如图所示. 图 哈夫曼树的结点结构 其中: weight parent lchild rchild i nf

【报告】课程设计报告哈夫曼编码

【关键字】报告 课程设计 题目哈夫曼编码 学院计算机科学与技术 专业计算机科学与技术 班级 姓名 指导教师 2010 年07 月02 日 课程设计任务书 学生姓名:拉巴珠久专业班级:计算机0806 指导教师:姚寒冰工作单位:计算机科学系 题目: 哈夫曼编码 初始条件: 输入一段英文字符,试为该文中的每个字符编制相应的哈夫曼码。 (1)I:初始化(Initialization)。对输入的一段英文中的每个字符统计其权值,建立哈夫曼树; (2)E:编码(Encoding)。利用已建好的哈夫曼树,对每个字符进行编码。 (3)D:译码(Decoding)。利用已建好的每个编码,对输入的一个由0、1组成的序列进行译码; (4)P:印代码文件(Print)。将每个字符编的哈夫曼码和译码结果显示在终端上。 尝试用例见题集p149。 要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求) 课程设计报告按学校规定格式用A4纸打印(书写),并应包含如下内容: 1、问题描述 简述题目要解决的问题是什么。 2、设计 存储结构设计、主要算法设计(用类C语言或用框图描述)、尝试用例设计; 3、调试报告 调试过程中遇到的问题是如何解决的;对设计和编码的讨论和分析。 4、经验和体会(包括对算法改进的设想) 5、附源程序清单和运行结果。源程序要加注释。如果题目规定了尝试数据,则运行结果要包含这些尝试数据和运行输出, 6、设计报告、程序不得相互抄袭和拷贝;若有雷同,则所有雷同者成绩均为0分。 时间安排: 1、第18周(至)完成。

2、日08:30到计算中心检查程序、交课程设计报告、源程序(CD盘)。指导教师签名:年月日 系主任(或责任教师)签名:年月日

哈夫曼编码与译码报告

一、设计思想 程序要求: 利用哈夫曼树对字符串进行编码,要求每个字符有自己唯一的编码。将得到的一串字串译成0、1编码后存到一个文件夹中,然后再从这个文件夹中读出这串编码进行解码。 实现方法: 输入一串字符,要求字符的区间为大写的26个英文字母,将获得的串字符用计算权值的函数(jsquanzhi())进行字符统计,统计出现的字符种数以及每种字符出现的次数,将该种字符出现的次数作为它的权值。将出现的字符的权值和该字符依次分别赋给两个结构体HT和HC,利用HT(节点)权值的大小建立哈夫曼树,首先用选择函数select()函数选择两个权值最小的字符作为叶子节点,创建一个新的节点作为这两个叶节点的父节点,被选中的节点给他的HT[i].parent赋值是他下次不再被选中,父节点的权值为,子节点的权值之和。然后将该将父节点放入筛选区中,再进行选择(被选过的不再被使用),直到所有的节点都被使用,这样一个哈夫曼树就被建立了。根据每个字符在哈夫曼书中的位置来编译每个字符的0、1密文代码,从叶节点判断该叶节点是其父节点的左右字左字为‘0’,右子为‘1’,在判断父节点是上级父节点的左右子直至根节点,将生成的0、1字符串按所表示的字符倒序存入HC相应的字符的bins[]数组。 重新一个一个字符的读取输入的字符串,按照字符出现的顺序将它转为0、1代码并存到一个txt文件夹中去。解码时从文件夹中,一个一个字符的读出那串0、1代码赋给一个临时字符串cd[],用该字符串与每个字符的HC[i].bins密文比较,直到与一个字符的密文相同时,译出该字符,将字符存放在临时字符数组tempstr[]中,清空临时字符串继续读取0、1代码进行翻译,直至文件密文结束为止。于是就得到了原先被加密的那串字符串。

哈夫曼编码译码器实验报告(免费)

哈夫曼编码译码器实验报告(免费)

问题解析与解题方法 问题分析: 设计一个哈夫曼编码、译码系统。对一个ASCII编码的文本文件中的字符进行哈夫曼编码,生成编码文件;反过来,可将编码文件译码还原为一个文本文件。 (1)从文件中读入任意一篇英文短文(文件为ASCII编码,扩展名为txt); (2)统计并输出不同字符在文章中出现的频率(空格、换行、标点等也按字符处理);(3)根据字符频率构造哈夫曼树,并给出每个字符的哈夫曼编码; (4)将文本文件利用哈夫曼树进行编码,存储成压缩文件(编码文件后缀名.huf) (5)用哈夫曼编码来存储文件,并和输入文本文件大小进行比较,计算文件压缩率;(6)进行译码,将huf文件译码为ASCII编码的txt文件,与原txt文件进行比较。 根据上述过程可以知道该编码译码器的关键在于字符统计和哈夫曼树的创建以及解码。

哈夫曼树的理论创建过程如下: 一、构成初始集合 对给定的n个权值 {W1,W2,W3,...,Wi,...,Wn}构成n棵二 叉树的初始集合 F={T1,T2,T3,...,Ti,...,Tn},其中每棵二 叉树Ti中只有一个权值为Wi的根结 点,它的左右子树均为空。 二、选取左右子树 在F中选取两棵根结点权值最小的树 作为新构造的二叉树的左右子树,新 二叉树的根结点的权值为其左右子树 的根结点的权值之和。 三、删除左右子树 从F中删除这两棵树,并把这棵新的二叉树同样以升序排列加入到集合F中。 四、重复二和三两步, 重复二和三两步,直到集合F中只有一棵二叉树为止。 因此,有如下分析: 1.我们需要一个功能函数对ASCII码的初始 化并需要一个数组来保存它们;

相关文档
最新文档