资源简介
一、实验目的
1、深入掌握自适应Huffman编码的原理
2、掌握自适应Huffman编码算法的实现过程
3、掌握和熟悉利用编程语言实现自适应Huffman编码器和解码器
二、实验要求
1、实现编码器,对输入字符给出相应的编码结果;
2、实现解码器,对步骤1中的编码结果进行解码;
3、请使用初始编码表如下:
4、对字符串ABBCADAD进行编码;
5、截图显示编码中间结果,并保证最终解码结果正确;
6、编辑程序说明文档。
1、深入掌握自适应Huffman编码的原理
2、掌握自适应Huffman编码算法的实现过程
3、掌握和熟悉利用编程语言实现自适应Huffman编码器和解码器
二、实验要求
1、实现编码器,对输入字符给出相应的编码结果;
2、实现解码器,对步骤1中的编码结果进行解码;
3、请使用初始编码表如下:
4、对字符串ABBCADAD进行编码;
5、截图显示编码中间结果,并保证最终解码结果正确;
6、编辑程序说明文档。
代码片段和文件信息
#include “huffmanTree.h“
int HuffmanTree::sum = 1;
//存储解码数据的字符串
string outp = ““;
//二叉树成员函数实现
BinaryTree::BinaryTree(int num int weight)
{
p_root = new Node(nullptr nullptr nullptr);
p_root->num = num; //节点的序号
p_root->weight = weight; //节点的权重值
}
BinaryTree::~BinaryTree()
{
deleteNode(p_root);
}
//交换节点位置的函数
bool BinaryTree::swap(Node * p_nodeA Node * p_nodeB)
{
if (p_nodeA == nullptr || p_nodeB == nullptr || p_nodeA == p_nodeB)
return false;
Node *pTemp;
if (getBrotherState(p_nodeA) == LeftChild) { //如果A节点是左孩子
if (getBrotherState(p_nodeB) == LeftChild) { // 如果B节点是左孩子
pTemp = p_nodeA->p_parent->p_left;
p_nodeA->p_parent->p_left = p_nodeB->p_parent->p_left;
p_nodeB->p_parent->p_left = pTemp;
}
else {
pTemp = p_nodeA->p_parent->p_left;
p_nodeA->p_parent->p_left = p_nodeB->p_parent->p_right;
p_nodeB->p_parent->p_right = pTemp;
}
}
else {
if (getBrotherState(p_nodeB) == LeftChild) {
pTemp = p_nodeA->p_parent->p_right;
p_nodeA->p_parent->p_right = p_nodeB->p_parent->p_left;
p_nodeB->p_parent->p_left = pTemp;
}
else {
pTemp = p_nodeA->p_parent->p_right;
p_nodeA->p_parent->p_right = p_nodeB->p_parent->p_right;
p_nodeB->p_parent->p_right = pTemp;
}
}
//交换了子节点之后,需要交换父节点
pTemp = p_nodeA->p_parent;
p_nodeA->p_parent = p_nodeB->p_parent;
p_nodeB->p_parent = pTemp;
return true;
}
//把子节点加到父节点上,第一个参数是父节点,第二个参数是子节点,第三个参数是位置
bool BinaryTree::addNode(Node * p_parent Node * p_child Brother brotherState)
{
if (p_parent == nullptr || p_child == nullptr)
return false;
if (brotherState == LeftChild) {
if (p_parent->p_left != nullptr) {
std::cout << “error:left child exist!“ << std::endl;
return false;//如果父节点有左孩子,则不能添加到左孩子位置
}
p_parent->p_left = p_child;//否则可以添加
}
else if (brotherState == RightChild) {
if (p_parent->p_right != nullptr) {
std::cout << “error:right child exist!“ << std::endl;
return false;//如果父节点有右孩子,则不能添加到右孩子位置
}
p_parent->p_right = p_child;//否则可以添加
}
else {
std::cout << “error:brotherState is wrong!“ << std::endl;//读取位置信息错误
return false;
}
p_child->p_parent = p_parent;
return true;
}
//判断p节点是否在树中,返回节点信息
Node * BinaryTree::findNode(Node *p)
{
Node *p_node = p_root;
std::queue queue;
queue.push(p_node);
while (!queue.empty()) { //若队列不为空
p_node = queue.front(); //将队列中第一个元素拿出来
if (p_node == p) {
return p_node; //如果该元素是我想找的节点,则返回
}
queue.pop(); //如果不是则踢出队列
//继续往下找
if (p_node->p_left != nullptr) {
queue.push(p_node->p_left);
}
if (p_node->p_right != nullptr) {
queue.push(p_node->p_right);
}
}
return nullptr;
}
//给节点赋序号值
bool BinaryTree::setNodeNum(Node* p_node int num)
{
if (p_node == nullptr)
return false;
else {
p_node->num = num;
return true;
}
}
//判断第二个参数对应的节点是否在第一个参数对应节点的更高层里面
bool BinaryTree::isAncestor(Node * p_nodeChild Node * p_nodeAncestor)
{
while (p_n
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2020-01-12 18:30 1191170125_严伟_实验2\实验报告\
文件 1113617 2020-01-12 18:30 1191170125_严伟_实验2\实验报告\1191170125+严伟+实验二.docx
目录 0 2019-11-13 10:39 1191170125_严伟_实验2\源代码\
目录 0 2019-11-13 10:41 1191170125_严伟_实验2\源代码\adaptiveHuffman\
目录 0 2019-11-13 10:13 1191170125_严伟_实验2\源代码\adaptiveHuffman\.vs\
目录 0 2019-11-13 10:13 1191170125_严伟_实验2\源代码\adaptiveHuffman\.vs\adaptiveHuffman\
目录 0 2019-11-14 16:32 1191170125_严伟_实验2\源代码\adaptiveHuffman\.vs\adaptiveHuffman\v15\
文件 38912 2019-11-14 16:32 1191170125_严伟_实验2\源代码\adaptiveHuffman\.vs\adaptiveHuffman\v15\.suo
文件 37789696 2019-11-14 16:32 1191170125_严伟_实验2\源代码\adaptiveHuffman\.vs\adaptiveHuffman\v15\Browse.VC.db
目录 0 2019-11-13 10:14 1191170125_严伟_实验2\源代码\adaptiveHuffman\.vs\adaptiveHuffman\v15\ipch\
目录 0 2019-11-13 10:41 1191170125_严伟_实验2\源代码\adaptiveHuffman\.vs\adaptiveHuffman\v15\ipch\AutoPCH\
目录 0 2019-11-14 12:30 1191170125_严伟_实验2\源代码\adaptiveHuffman\.vs\adaptiveHuffman\v15\ipch\AutoPCH\1e0a61e5ddd2089\
文件 38600704 2019-11-14 15:58 1191170125_严伟_实验2\源代码\adaptiveHuffman\.vs\adaptiveHuffman\v15\ipch\AutoPCH\1e0a61e5ddd2089\ADATIVEHUFF.ipch
目录 0 2019-11-13 10:41 1191170125_严伟_实验2\源代码\adaptiveHuffman\.vs\adaptiveHuffman\v15\ipch\AutoPCH\1f43f785a88f2e7a\
文件 38141952 2019-11-13 10:41 1191170125_严伟_实验2\源代码\adaptiveHuffman\.vs\adaptiveHuffman\v15\ipch\AutoPCH\1f43f785a88f2e7a\ADATIVEHUFF.ipch
目录 0 2019-11-13 10:38 1191170125_严伟_实验2\源代码\adaptiveHuffman\.vs\adaptiveHuffman\v15\ipch\AutoPCH\59b291d91855879a\
文件 40566784 2019-11-13 10:38 1191170125_严伟_实验2\源代码\adaptiveHuffman\.vs\adaptiveHuffman\v15\ipch\AutoPCH\59b291d91855879a\ADATIVEHUFF.ipch
目录 0 2019-11-13 10:15 1191170125_严伟_实验2\源代码\adaptiveHuffman\.vs\adaptiveHuffman\v15\ipch\AutoPCH\a0c76fed011b15ef\
文件 31719424 2019-11-13 10:34 1191170125_严伟_实验2\源代码\adaptiveHuffman\.vs\adaptiveHuffman\v15\ipch\AutoPCH\a0c76fed011b15ef\HUFFMANTREE.ipch
目录 0 2019-11-13 10:40 1191170125_严伟_实验2\源代码\adaptiveHuffman\.vs\adaptiveHuffman\v15\ipch\AutoPCH\bca905110c37abfa\
文件 40566784 2019-11-13 10:40 1191170125_严伟_实验2\源代码\adaptiveHuffman\.vs\adaptiveHuffman\v15\ipch\AutoPCH\bca905110c37abfa\ADATIVEHUFF.ipch
文件 1458 2019-11-13 10:13 1191170125_严伟_实验2\源代码\adaptiveHuffman\adaptiveHuffman.sln
目录 0 2019-11-14 11:45 1191170125_严伟_实验2\源代码\adaptiveHuffman\adaptiveHuffman\
文件 6034 2019-11-13 10:38 1191170125_严伟_实验2\源代码\adaptiveHuffman\adaptiveHuffman\adaptiveHuffman.vcxproj
文件 1080 2019-11-13 10:38 1191170125_严伟_实验2\源代码\adaptiveHuffman\adaptiveHuffman\adaptiveHuffman.vcxproj.filters
文件 165 2019-11-13 10:13 1191170125_严伟_实验2\源代码\adaptiveHuffman\adaptiveHuffman\adaptiveHuffman.vcxproj.user
文件 10522 2019-11-14 11:45 1191170125_严伟_实验2\源代码\adaptiveHuffman\adaptiveHuffman\adativeHuff.cpp
目录 0 2019-11-13 10:38 1191170125_严伟_实验2\源代码\adaptiveHuffman\adaptiveHuffman\Debug\
文件 199 2019-11-13 10:38 1191170125_严伟_实验2\源代码\adaptiveHuffman\adaptiveHuffman\Debug\adaptiveHuffman.log
目录 0 2019-11-13 10:38 1191170125_严伟_实验2\源代码\adaptiveHuffman\adaptiveHuffman\Debug\adaptiveHuffman.tlog\
文件 296 2019-11-13 10:38 1191170125_严伟_实验2\源代码\adaptiveHuffman\adaptiveHuffman\Debug\adaptiveHuffman.tlog\adaptiveHuffman.lastbuildstate
............此处省略37个文件信息
相关资源
- 自适应滤波算法与实现(第四版)
- 自适应滤波器原理(西蒙卡金)第五
- H5自适应新闻自媒体网站源码
- 论文研究-基于自适应学习群体搜索技
- 一种改进的自适应快速AF-DBSCAN聚类算
- 自适应波束形成的经典算法大全
- 论文研究-两轮自平衡小车模型参考自
- 永磁同步电机矢量控制双滑模模型参
- 自适应算法——雷达地杂波
- 最速下降法原理及例题
- 论文研究-基于动态自适应阈值法的
- 基于自适应均衡器的LMS和RLS算法的仿
- 卡尔曼滤波器,自适应滤波器设计
- 论文研究-一种自适应的阴影检测算法
- 论文研究-非线性系统控制器设计--自
- AGA自适应加速遗传算法
- 论文研究-视频实时自适应去雾算法
- 论文研究-步长自适应的测量矩阵迭代
- 分段块频域自适应滤波器算法
- 基于特征模型的智能自适应控制
- A simple adaptive first-order differential mic
- 西电研究生2014自适应信号处理大作业
- ViewPager高度自适应
- 噪声自适应完备总体平均经验模态分
- 永磁同步电机在线辨识与模型参考自
- 基于BP神经网络的机械臂模糊自适应
- 自适应滤波算法的实现内含完整的C
- 基于DSP的自适应回波抵消的设计
- 自适应信号 利用自适应信号分离器,
- 粒子群改进蝙蝠算法的自适应权重算
评论
共有 条评论