当前位置: 首页 > news >正文

邯郸市网站建设_网站建设公司_在线商城_seo优化

同方云罐网站设计,wordpress仿36kr氪主题,检测WordPress网站的安全性,蒙特网站建设公司实验九 哈夫曼编码 一、【实验目的】 1、理解哈夫曼树的基本概念 2、掌握哈夫曼树的构造及数据结构设计 3、掌握哈夫曼编码问题设计和实现 二、【实验内容】 1、假设用于通信的电文仅由8个字母 {a, b, c, d, e, f, g, h} 构成#xff0c;它们在电文中出现的概率分别为{ 0.…实验九 哈夫曼编码 一、【实验目的】 1、理解哈夫曼树的基本概念 2、掌握哈夫曼树的构造及数据结构设计 3、掌握哈夫曼编码问题设计和实现 二、【实验内容】 1、假设用于通信的电文仅由8个字母 {a, b, c, d, e, f, g, h} 构成它们在电文中出现的概率分别为{ 0.07, 0.19, 0.02, 0.06, 0.32, 0.03, 0.21, 0.10 }试为这8个字母设计哈夫曼编码。 提示:包含两个过程: 1构建哈夫曼树 2输出编码。 三、【实验源代码】 #include iostream using namespace std; #include cstdio #include cstring typedef struct node { //哈夫曼树中单个节点的信息int parent; //父节点char letter; //字母int lchild;int rchild;double weight; //权值 }*HuffmanTree; void Select(HuffmanTree tree, int n, int s1, int s2) { //找到权值最小的两个值的下标其中s1的权值小于s2的权值int min 0;for (int i 1; i n; i) {if (tree[i].parent 0) {min i;break;}}for (int i min 1; i n; i) {if (tree[i].parent 0 tree[i].weight tree[min].weight)min i;}s1 min; //找到第一个最小值并赋给s1for (int i 1; i n; i) {if (tree[i].parent 0 i ! s1) {min i;break;}}for (int i min 1; i n; i) {if (tree[i].parent 0 i ! s1 tree[i].weight tree[min].weight)min i;}s2 min; //找到第二个最小值并赋给s2 } void CreateHuff(HuffmanTree tree, char* letters, double* weights, int n) {int m 2 * n - 1; //若给定n个数要求构建哈夫曼树则构建出来的哈夫曼树的结点总数为2n-1tree (HuffmanTree)calloc(m 1, sizeof(node)); //开辟空间顺序储存Huffman树用calloc开辟的空间初始化的值为0NULL符合Huffman树初始化条件parent、weight、lchild、rchild等初始化应为0由于tree[0]不存数据因为任何节点的父节点若为0会与节点初始化0值相混淆故不存数据则要开辟2n-11个空间额外开辟一个空间for (int i 1; i n; i) { //给节点赋字母及其对应的权值tree[i].weight weights[i - 1];tree[i].letter letters[i];}for (int i n 1; i m; i) {int s1 0, s2 0;Select(tree, i - 1, s1, s2); //每次循环选择权值最小的s1和s2,生成它们的父结点tree[i].weight tree[s1].weight tree[s2].weight; //新创建的节点i 的权重是s1和s2的权重之和tree[i].lchild s1; //新创建的节点i 的左孩子是s1tree[i].rchild s2; //新创建的节点i 的右孩子是s2tree[s1].parent i; //s1的父亲是新创建的节点itree[s2].parent i; //s2的父亲是新创建的节点i} } void HuffmanCoding(HuffmanTree tree, char** HuffCode, int n) {HuffCode (char**)malloc(sizeof(char*) * (n 1)); //运用char型二级指针可理解成包含多个char*地址的数组开n1个空间因为下标为0的空间不用char* tempcode (char*)malloc(sizeof(char) * n);tempcode[n - 1] \0;for (int i 1; i n; i) {int start n - 1;int doing i; //doing为正在编码的数据节点int parent tree[doing].parent; //找到该节点的父结点while (parent) { //直到父结点为0(NULL)即父结点为根结点时停止if (tree[parent].lchild doing) //如果该结点是其父结点的左孩子则编码为0否则为1tempcode[--start] 0;elsetempcode[--start] 1;doing parent; //继续往上进行编码parent tree[parent].parent;}HuffCode[i] (char*)malloc(sizeof(char) * (n - start)); //开辟用于存储编码的内存空间strcpy(HuffCode[i], tempcode[start]); //将编码拷贝到字符指针数组中的相应位置}free(tempcode); //释放辅助空间 } int main() {int n 8;char letters[9] { ,a, b, c, d, e, f, g, h};double weights[9] {0.07, 0.19, 0.02, 0.06, 0.32, 0.03, 0.21, 0.10};HuffmanTree tree;CreateHuff(tree, letters, weights, n); //构建哈夫曼树char** HuffCode;HuffmanCoding(tree, HuffCode, n);for (int i 1; i n; i)printf(字母 %c 的哈夫曼编码值是: %s\n, tree[i].letter, HuffCode[i]);return 0; }‍ 参考资料
http://www.ihoyoo.com/news/17310.html

相关文章:

  • 前端做网站步骤辽宁省建设执业信息网官网
  • 做外贸怎么进入国外的网站深圳微商城网站制作多少钱
  • 建设银行的网站为什么这么卡做国外网站做外贸
  • 做团购的网站淄博网站
  • 新网站建设需要注意海口官网设计
  • 在安徽省住房和城乡建设厅网站wordpress 积分主题
  • 网站开发的话术wordpress 分类描述
  • 建设银行网银盾官方网站下载大气医院网站源码
  • 论某网站职能建设注册营业执照网站
  • wiki网站开发工具wordpress 收费下载资源
  • 石家庄做网站邮箱电话用python网站开发
  • 皮革材料做网站wordpress 镜像下载
  • 惠州网站建设排名winscp怎么做网站
  • 网站开发实现总结七台河新闻联播
  • 国外做问卷网站好cms做网站不用后端
  • 营销型网站建设标准网站建设的服务怎么样
  • 贵阳网站建设 网站制作大理州建设局网站门户网
  • 常用的网站建设技术有正能量软件网站免费入口
  • 做网站还是app好企业邮箱注册申请163免费
  • 做酱菜网站建设购物网站的目的
  • 免费域名注册网站源码奉贤长沙网站建设
  • 婚纱网站建设步骤和方法苏州华亭建设工程有限公司网站
  • 公众号里原文单发到dede网站上为何建设银行网站无法登陆
  • 重庆手机网站推广资料购物网站服务器带宽
  • 郑州做网站推广多少钱安徽建设工程信息网安全三类人员考试成绩查询
  • 部门门户网站建设请示厦门人才网唯一官网
  • 松江建设机械网站施工企业资料
  • 做国际网站要多少钱公司网站模版 dedecms
  • 网站模板怎么编辑建设网站花费
  • 韶关市建设与房地产信息网站网页设计需要学什么书