You are on page 1of 5

数据结构课程设计

姓 名

学 院

专 业

班 级

学 号

班内序号

指导教师

年 月
目录
一、实验题目..................................................................................................................................3
二、题目分析与算法设计..............................................................................................................3
三、程序复杂度分析......................................................................................................................4
四、程序运行结果展示..................................................................................................................4
数据结构课程设计作业一

一、实验题目

26 个英文字母的使用频率如下表所示:
字母 使用频率 字母 使用频率
A 0.0819 N 0.0706
B 0.0147 O 0.0726
C 0.0383 P 0.0289
D 0.0391 Q 0.0009
E 0.1225 R 0.0685
F 0.0226 S 0.0636
G 0.0171 T 0.0941
H 0.0457 U 0.0258
I 0.0710 V 0.0109
J 0.0041 W 0.0159
K 0.0014 X 0.0021
L 0.0377 Y 0.0158
M 0.0334 Z 0.0008

根据 26 个字母及其相应的权重值,设计算法来对其构建一个哈夫曼树,并计算其对应的编
码长度。要求实现以下功能:
1. 构建哈夫曼树:根据给定的字符及其权重值,构建出对应的哈夫曼树。
2. 计算编码长度:对于构建出的哈夫曼树,计算每个字符的编码长度,即根节点到该字
符叶子节点的路径长度之和。路径长度定义为从根节点到某个节点的边的数量。
3. 输出编码表:根据哈夫曼树,生成字符到对应编码的映射表。将每个字符与其对应的
哈夫曼编码打印输出。
4. 对字符串“pneumonoultramicroscopicsilicovolcanoconiosis”进行编码:利用步骤 3 中生
成的编码表,对给定的字符串进行编码,将各个字符替换为其对应的哈夫曼编码。
请设计一个满足上述要求的算法,并给出相应的代码实现。

二、题目分析与算法设计
(此处应根据对题目理解,描述程序中所用的算法及其对应的主要思想,如果
有函数调用,需说明所使用函数间的调用与被调用关系)
2 哈夫曼树是根据权值进行编码的,我已粗略了解,github 上有哈夫曼树的代码,
我用 gpt 了解一下,先熟悉哈夫曼树代码层面的内容,再想想怎么结合题目一

以下是 gpt 的回答

步骤 1:构建哈夫曼树
首先,我们需要根据给定的字符及其权重值构建一个哈夫曼树。这可以通过以
下步骤来实现:

创建一个节点结构,每个节点包含字符、权重、左子树和右子树。
创建一个优先队列(最小堆),用于按权重值对节点进行排序。
将每个字符和其对应的权重值作为一个节点插入优先队列中。
循环执行以下步骤,直到队列中只剩下一个节点:
a. 从队列中弹出两个权重最小的节点,作为左子树和右子树。
b. 创建一个新节点,权重为左右子树节点权重之和,左右子树分别为上一步中
弹出的两个节点。
c. 将新节点插入优先队列。
步骤 2:计算编码长度
对于每个字符,编码长度等于从根节点到该字符叶子节点的路径长度。这可以
通过以下递归方式计算:

从根节点出发,遍历哈夫曼树。
对于每个遍历的节点,累加路径长度,直到达到叶子节点。
记录每个字符的路径长度。
步骤 3:输出编码表
可以使用深度优先遍历(DFS)来遍历哈夫曼树,构建字符到编码的映射表。
从根节点开始,遍历左子树时添加 '0' 到编码,遍历右子树时添加 '1'。当到达
叶子节点时,记录字符和对应的编码。

步骤 4:对字符串进行编码
根据步骤 3 中生成的编码表,遍历给定的字符串,查找每个字符在编码表中的
对应编码,将字符替换为编码。
三、程序复杂度分析

(此处应包含上述程序的时间复杂度及空间复杂度的分析与计算)

四、程序运行结果展示

(此处应给出所设计程序运行结果,3. 展示构建的哈夫曼树、编码表,说明
26 个字母分别对应的编码长度,建议插入程序运行结果的图片,并给出 4. 给
出字符串“pneumonoultramicroscopicsilicovolcanoconiosis”的编码结果)

注:本次课程设计中,算法的描述及代码关键处注释是否详细,程序是否正确
运行、复杂度分析是否正确、程序运行结果是否清晰易读均会影响最后实验报
告的分数,如果代码发现其中大部分与他人雷同或关键代码部分几乎无注释,
将会按抄袭判分。红色部分字体不要出现在实验报告里。

You might also like