《数据结构与算法》课程设计任务书——赫夫曼编码/译码器

《数据结构与算法》课程设计

(2019/2020学年第一学期)
指导教师:孙麒、霍戌文

《数据结构与算法》课程设计

任务书

《数据结构与算法》是计算机科学与技术专业重要的核心课程之一,在计算机专业的学习过程中占有非常重要的地位。《数据结构与算法课程设计》就是要运用本课程以及到目前为止的有关课程中的知识和技术来解决实际问题。特别是面临非数值计算类型的应用问题时,需要选择适当的数据结构,设计出满足一定时间和空间限制的有效算法。

本课程设计要求同学独立完成一个较为完整的应用需求分析。并在设计和编写具有一定规模程序的过程中,深化对《数据结构与算法》课程中基本概念、理论和方法的理解;训练综合运用所学知识处理实际问题的能力,强化面向对象的程序设计理念;使自己的程序设计与调试水平有一个明显的提高。
一、赫夫曼编码/译码器

  1. 问题描述
    利用赫夫曼编码进行通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。这要求在发送端通过一个编码系统对待传输数据预先编码,在接收端将传来的数据进行译码(复原)。对于双工信道(即可以双向传输信息的信道),每端都需要一个完整的编/译码系统。试为这样的信息收发站编写一个赫夫曼码的编/译码系统。

  2. 基本要求
    一个完整的系统应具有以下功能:
    (1) I:初始化(Initialization)。从终端读入字符集大小n,以及n个字符和n个权值,建立赫夫曼树,并将它存于文件hfmTree中。
    (2) E:编码(Encoding)。利用已建好的赫夫曼树(如不在内存,则从文件hfmTree中读入),对文件ToBeTran中的正文进行编码,然后将结果存入文件CodeFile中。
    (3) D:译码(Decoding)。利用已建好的赫夫曼树将文件CodeFile中的代码进行译码,结果存入文件Textfile中。
    以下为选做:
    (4) P:打印代码文件(Print)。将文件CodeFile以紧凑格式显示在终端上,每行50个代码。同时将此字符形式的编码文件写入文件CodePrin中。
    (5) T:打印赫夫曼树(Tree printing)。将已在内存中的赫夫曼树以直观的方式(比如树)显示在终端上,同时将此字符形式的赫夫曼树写入文件TreePrint 中。

  3. 测试要求
    (1)已知某系统在通信联络中只可能出现八种字符,其频率分别为0.05、0.29、0.07、0.08、0.14、0.23、0.03、0.11,试设计赫夫曼编码。
    (2) 用下表给出的字符集和频度的实际统计数据建立赫夫曼树,并实现以下报文的编码和译码:“THIS PROGRAME IS MY FAVORITE”。
    字符 A B C D E F G H I J K L M
    频度 186 64 13 22 32 103 21 15 47 57 1 5 32 20
    字符 N O P Q R S T U V W X Y Z
    频度 57 63 15 1 48 51 80 23 8 18 1 16 1

  4. 实现提示
    (1) 编码结果以文本方式存储在文件Codefile中。
    (2) 用户界面可以设计为“菜单”方式:显示上述功能符号,再加上“Q”,表示退出运行Quit。请用户键入一个选择功能符。此功能执行完毕后再显示此菜单,直至某次用户选择了“Q”为止。
    (3) 在程序的一次执行过程中,第一次执行I,D或C命令之后,赫夫曼树已经在内存了,不必再读入。每次执行中不一定执行I命令,因为文件hfmTree可能早已建好。
    二、具体要求:
    课程设计成果的内容必须由以下四个部分组成,缺一不可。
    (1) 上交源程序:学生按照实验题目的具体要求所开发的所有源程序(应该放到一个文件夹中),然后打包压缩后上交;
    (2) 上交程序的说明文件:(保存在.txt中)在说明文档中应该写明上交程序所在的目录,上交程序的主程序文件名,如果需要安装第三方软件才能运行,要有第三方程序的安装使用说明;(可以在报告中体现)
    (3) 设计报告:(电子版本,保存在word 文档中,文件名要求: 按照“学号_姓名_设计题目”起名,如文件名为“XXX_张三_赫夫曼编码 ”.doc或.docx)。
    其中包括:
    1) 题目;
    2) 实验目的;
    3) 需求分析:在该部分中叙述实现的功能要求;
    4) 概要设计:
    在此说明每个部分的算法设计说明(可以是描述算法的流程图),每个程序中使用的存储结构设计说明(如果指定存储结构请写出该存储结构的定义);
    5) 详细设计
    各个算法实现的源程序,对每个题目要有相应的源程序(可以是一组源程序,每个功能模块采用不同的函数实现)。源程序要按照写程序的规则来编写。要结构清晰,重点函数的重点变量,重点功能部分要加上清晰的程序注释;
    6) 调试分析
    测试数据,测试输出的结果,时间复杂度分析,和每个模块设计和调试时存在问题的思考(问题是哪些?问题如何解决?),算法的改进设想;
    7) 总结:
    总结可以包括 : 设计过程的收获、遇到问题及解决问题过程的思考、程序调试能力的思考、对数据结构这门课程的思考、在设计过程中对《数据结构》课程的认识等内容。
    (4)单独上交电子版本的“课程设计答辩记录表”,命名方法同上;

三、工作内容及工作计划:一周
时间 地点 工作内容 指导教师
11.13/11 上午 10-414/413/409 实验要求,需求分析 孙麒、霍戌文
下午 10-414/413/409 查找资料,总体结构设计 孙麒、霍戌文
11.20/12 上午 10-414/413/409 算法设计,用户界面设计 孙麒、霍戌文
下午 10-414/413/409 算法设计,用户界面设计 孙麒、霍戌文
11.27/13 上午 10-414/413/409 详细设计 孙麒、霍戌文
下午 10-414/413/409 详细设计 孙麒、霍戌文
12.04/14 上午 10-414/413/409 测试分析与完善设计 孙麒、霍戌文
下午 10-414/413/409 测试分析与完善设计 孙麒、霍戌文
12.11/15 上午 10-414/413/409 上机检查,答辩 孙麒、霍戌文
下午 10-414/413/409 上机检查、答辩 孙麒、霍戌文

四、考核成绩评定标准:
本课程在理论课完成后进行,最终成绩按五级评分:优、良、中、及格、不及格。
五个级别对应的百分之关系为:
A: 成绩>=90;
B: 90>成绩>=80;
C: 80>成绩>=70;
D: 70>成绩>=60;
E: 60<成绩。
本课程设计的评价由四部分部分组成,包括面试成绩(40%),课程设计报告(40%),实践操作表现(10%),考勤与课堂表现(10%)。其中,课程设计报告40%,根据学生提交的报告完成情况及质量,进行考评;面试成绩占40%,学生提交实验程序,教师提出相关问题,根据学生回答问题的清晰度、准确性、敏捷性,进行考评;实践操作成绩占10%,根据学生在课程设计中分析解决问题的能力、完成任务的速度和质量、提问的质量等进行评分;到课率占10%,以课堂出勤率和课内讨论参与度为评分依据。

具体考核与评估标准如下表所示:
考核方式
或途径 考核要求 考核权重 评估级别
课程设计报告 内容设计合理、完整,格式规范 40% 格式规范、内容完整最高得10分;方案及类的设计最优得10分;代码实现及风格最高10分;遇到问题解决、改正优化心得最高10分。
面试成绩 程序功能设计合理、完整,能够正常运行,类的设计合理,能够准确得回答老师提出的问题 40% 能够根据要求正确完成演示最高得10分;能够对方案进行清晰完整的进行阐述最高10分;对老师提出的问题回答及时、准确,最高得10分;综合表现最高10分。
实践操作表现 具备一定的解决问题的能力,能在规定的时间内顺利完成任务 10% 课程设计项目本身的问题,在课程设计考核前完成,得8分;2分为答辩或者争取优秀的,老师随机给出小的程序修改问题,完成得2分。
考勤与课堂表现 课堂出勤率和课内讨论参与度 10% 8分为出勤,2分为课内参与度,出勤才有扣分制,签到和随机点名,未被点到1次扣1分,本项最低0分;课内参与采用加分支,参与一次加1分,最高2分。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Starzkg

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值