问题标题

对于香农编码、费诺编码和哈夫曼编码,编码方法惟一的是()。

2019-8-15来自ip:15.170.14.227的网友咨询

浏览量:533 手机版

问题补充:

题目类型:[填空题] 对于香农编码、费诺编码和哈夫曼编码,编码方法惟一的是()。

网友答案

参考答案: 香农编码

试题难度:★★☆

参考解析: 暂无解析

网友答案

//赫夫曼编码程序严蔚敏数据结构 #include using namespace std; typedef struct { int weight; int parent,lchild,rchild; }HTNode,*HuffmanTree; typedef char **HuffmanCode; typedef char *EachHuffcode; void Select(HuffmanTree HT,int length,int &s1,int &s2) { //s1 lowest,s2 lower unsigned int min = 5000; HuffmanTree p = HT; int i; for(i = 1, ++p; i { if(p->weight parent == 0) { min = p->weight; s1 = i; } } min = 5000; p = HT; //Get the second less weight for(i = 1, ++p; i { if(p->weight parent == 0) { if( i == s1)//case s1,ignore continue; min = p->weight; s2 = i; } } } void HuffmanCoding(HuffmanTree &HT,HuffmanCode &HC, int *w,int n) { if(n return; int m = 2 * n - 1; HT = new HTNodem + 1;//0 is not used HuffmanTree p = HT; int i; for( i = 1, ++p; i { p->weight = *w;//NOte: never use this *p = {*w,0,0,0,0},because *p has already been declared p->parent = p->lchild = p->rchild = 0; } for(; i p->weight = p->parent = p->lchild = p->rchild = 0; int s1; int s2; for( i = n + 1; i { Select(HT,i-1,s1,s2); HTs1.parent = i ; HTs2.parent = i; HTi.lchild = s1; HTi.rchild = s2; HTi.weight = HTs1.weight + HTs2.weight; } HC = new EachHuffcoden+1;//0 is not used char *cd = new charn; cdn-1 = '\0';//the end of each char int start; for(int i = 1; i {//get each huff code for h1 to hn start = n -1; for(int c = i, int f = HTi.parent; f != 0; c = f ,f = HTf.parent) if(c == HTf.lchild) cd--start = '0'; else cd--start = '1'; HCi = new charn - start;//allocate memory for each HT strcpy(HCi,&cdstart); } delete cd;//don't forget release memory } int main(int argc, char* argv) { HuffmanTree hftree = NULL; HuffmanCode hfcode = NULL; int weight4 = {7,5,2,4};//four node's weight HuffmanCoding(hftree,hfcode,weight,4); EachHuffcode *p = hfcode; ++p; for (int i = 0; i { cout } for(int i = 1; i delete hfcodei;//release memory delete hfcode; delete hftree; return 0; }

网友答案

//赫夫曼编码程序严蔚敏数据结构 #include using namespace std;typedef struct{ int weight; int parent,lchild,rchild;}HTNode,*HuffmanTree;typedef char **HuffmanCode;typedef char *EachHuffcode;void Select(HuffmanTree HT,int length,int &s1,int &s2){ //s1 lowest,s2 lower unsigned int min = 5000; HuffmanTree p = HT; int i; for(i = 1, ++p; i weight parent == 0) { min = p->weight; s1 = i; } } min = 5000; p = HT; //Get the second less weight for(i = 1, ++p; i weight parent == 0) { if( i == s1)//case s1,ignore continue; min = p->weight; s2 = i; } }}void HuffmanCoding(HuffmanTree &HT,HuffmanCode &HC, int *w,int n){ if(n weight = *w;//NOte: never use this *p = {*w,0,0,0,0},because *p has already been declared p->parent = p->lchild = p->rchild = 0; } for(; i weight = p->parent = p->lchild = p->rchild = 0; int s1; int s2; for( i = n + 1; i <= m; ++i) { Select(HT,i-1,s1,s2); HTs1.parent = i ; HTs2.parent = i; HTi.lchild = s1; HTi.rchild = s2; HTi.weight = HTs1.weight + HTs2.weight; } HC = new EachHuffcoden+1;//0 is not used char *cd = new charn; cdn-1 = '\0';//the end of each char int start; for(int i = 1; i <= n ; ++i) {//get each huff code for h1 to hn start = n -1; for(int c = i, int f = HTi.parent; f != 0; c = f ,f = HTf.parent) if(c == HTf.lchild) cd--start = '0'; else cd--start = '1'; HCi = new charn - start;//allocate memory for each HT strcpy(HCi,&cdstart); } delete cd;//don't forget release memory}int main(int argc, char* argv){ HuffmanTree hftree = NULL; HuffmanCode hfcode = NULL; int weight4 = {7,5,2,4};//four node's weight HuffmanCoding(hftree,hfcode,weight,4); EachHuffcode *p = hfcode; ++p; for (int i = 0; i < 4; ++i,++p) { cout<

网友答案

答案可能不唯一 取决于你的哈夫曼树是怎么建立的 但一般习惯是左边的数比右边的数小----------------27------------11------16----------c----6---b----e-------------d---a-代表空格 排版需要这是建立的哈夫曼树按照一般习惯是左0右1 编码为a011 b10 c00 d010 e11还有 顶点是27...怎么会算个25出来啊...汗!

网友答案

太复杂了,一会记得多给我点分!谢谢啦! 先设权w=(31,22,18,14,10,4,1),n=7,则m=13,按照哈夫曼算法可以构造一棵哈夫曼树如下: 100 40 60 22 18 31 29 14 15 10 5 4 1 末端结点为22,18,31,14,10,4,1,你自己把上面的加上线连成一棵二叉树就行,记得左分支标0,右分支标1为了得出后面的哈夫曼编码HC 然后需要列出HT初态表和HT终态表,如下: HT初态表 HT终态表 weight parent lchild rchild weight parent lchild rchild 1 31 0 0 0 31 12 0 0 2 22 0 0 0 22 11 0 0 3 18 0 0 0 18 11 0 0 4 14 0 0 0 14 10 0 0 5 10 0 0 0 10 9 0 0 6 4 0 0 0 4 8 0 0 7 1 0 0 0 1 8 0 0 8 - 0 0 0 5 9 6 7 9 - 0 0 0 15 10 5 8 10 - 0 0 0 29 12 4 9 11 - 0 0 0 40 13 2 3 12 - 0 0 0 60 13 1 10 13 - 0 0 0 100 0 11 12 最后得出哈夫曼编码HC: 1——>10 2——>00 3——>01 4——>110 5——>1110 6——>11110 7——>11111 平均码字长度为0.31+0.22+0.18*2+0.14*3+0.1*4 +(0.04+0.01)*5=2.47 编码效率为1-0.01*3+0.01*2/2.47=1.21 解答完毕! 补充:对于其中的编码效率问题本人有点淡忘,我选择的是用 普通平均编码长度除上了哈夫曼平均编码长度得出,不知对否。

辛苦半天,望能赐我分数,不胜感激!注:提交后发现格式不太规整,对于哈夫曼树谁是谁的左孩子、右孩子比较容易分出左右孩子结点相加可知父亲结点,对于HT初态表和HT终态表1列1列的看就行!其中数字第一列为序号,从第2列到第9列分别对应HT初态表的weight parent lchild rchild 和HT终态表的weight parent lchild rchild 。

网友答案

#include#include#include#include#include#define MAXVALUE 10000 /*权值最大值*/#define MAXLEAF 30 /*叶子最多个数*/#define MAXNODE MAXLEAF*2-1 /* 结点数的个数*/#define MAXBIT 50 /*编码的最大位数*/typedef struct node /*结点类型定义*/{ char letter; int weight; int parent; int lchild; int rchild;}HNodeType;typedef struct /*编码类型定义*/{ char letter; int bitMAXBIT; int start;}HCodeType;typedef struct /*输入符号的类型*/{ char s; int num;}lable;void HuffmanTree(HNodeType HuffNode,int n,lable a){ int i,j,m1,m2,x1,x2,temp1; char temp2; for (i=0;ihuffman树*/ { m1=m2=MAXVALUE; x1=x2=0; for (j=0;j编码*/ { cd.start=n-1; c=i; p=HuffNodec.parent; while (p!=-1) { if (HuffNodep.lchild==c) cd.bitcd.start=0; else cd.bitcd.start=1; cd.start--; c=p; p=HuffNodec.parent; } for (j=cd.start+1;j编码*/ HuffCodei.bitj=cd.bitj; HuffCodei.start=cd.start; } for (i=0;i哈夫曼编码,直到输入为end结束! /"的是电文出现概率也要自己计算的可以说更智能些吧。

要是不满意,略做修改就可以了。

网友答案

霍夫曼编码的基本思想:输入一个待编码的串,首先统计串中各字符出现的次数,称之为频次,假设统计频次的数组为count ,则霍夫曼编码每次找出count数组中的值最小的两个分别作为左右孩子,建立他们的父节点,循环这个操作2*n-1-n(n是不同的字符数)次,这样就把霍夫曼树建好了。

建树的过程需要注意,首先把count数组里面的n个值初始化为霍夫曼树的n个叶子节点,他们的孩子节点的标号初始化为-1,父节点初始化为他本身的标号。

接下来是编码,每次从霍夫曼树的叶子节点出发,依次向上找,假设当前的节点标号是i,那么他的父节点必然是myHuffmantreei.parent,如果i是myHuffmantreei.parent的左节点,则该节点的路径为0,如果是右节点,则该节点的路径为1。

当向上找到一个节点,他的父节点标号就是他本身,就停止说明该节点已经是根节点。

还有一个需要注意的地方:在查找当前权值最小的两个节点时,那些父节点不是他本身的节点不能考虑进去,因为这些节点已经被处理过了香农第一定理可变长无失真信源编码定理设离散无记忆信源X包含N个符号{x1,x2,…,xi,..,xN},信源发出K重符号序列,则此信源可发出N^k个不同的符号序列消息,其中第j个符号序列消息的出现概率为PKj,其信源编码后所得的二进制代码组长度为Bj,代码组的平均长度B为B=PK1B1+PK2B2+…+PKN^kBN^k当K趋于无限大时,B和信息量H(X)之间的关系为B*K=H(X)(K趋近无穷)香农第一定理又称为无失真信源编码定理或变长码信源编码定理。

香农第一定理的意义:将原始信源符号转化为新的码符号,使码符号尽量服从等概分布,从而每个码符号所携带的信息量达到最大,进而可以用尽量少的码符号传输信源信息。

香农第二定理有噪信道编码定理有噪信道编码定理。

当信道的信息传输率不超过信道容量时,采用合适的信道编码方法可以实现任意高的传输可靠性,但若信息传输率超过了信道容量,就不可能实现可靠的传输。

设某信道有r个输入符号,s个输出符号,信道容量为C,当信道的信息传输率R=0,和任意小的a>0,以及任意足够长的码长N,则一定存在一种信源编码W,其码字个数为M<=EXP{NR(D)+a},而编码后码的平均失真度D'(W)<=D+a。

我来回答

验证码:

大家还关注

香农费诺编码 c语言实现,对于香农编码、费诺编码和哈夫曼编码,编码方法惟一的是()。...相关推荐

  1. labview霍夫曼编码_香农编码与霍夫曼编码

    一.香农-范诺编码 香农-范诺(Shannon-Fano)编码的目的是产生具有最小冗余的码词(code word).其基本思想是产生编码长度可变的码词.码词长度可变指的是,被编码的一些消息的符号可以用 ...

  2. 哈夫曼编码c语言论文,哈夫曼编码的实现及应用论文.doc

    哈夫曼编码的实现及应用论文 毕 业 设 计(论文) 题目 哈夫曼编码的实现 及应用 二级学院 数学与统计学院 专 业 信息与计算科学 班 级 学生姓名 张泽欣 学号 指导教师 职称 时 间 目录 摘要 ...

  3. 信息论霍夫曼编码c语言,霍夫曼编码

    <信息论与编码>课程实验报告 姓 名 学 号 单 位 专 业 2014 年 12 月 4 日 实验一 一.实验目的 1.理解信源编码的意义: 2.掌握霍夫曼编码的方法及计算机实现: 二.实 ...

  4. 2022黄文嵩商盛兰张阳徐铭信息论课程作业 哈夫曼编码(Huffman Coding)简介

    目录 5G,华为,土耳其--我花了两个月,搞懂了5G背后的秘密_哔哩哔哩_bilibili 一.什么是编码? 二.哈夫曼编码 1.编码过程 2.码方差 3.编码特点 4.人无完人,码无完码 三.总结 ...

  5. 基于哈夫曼编码完成的文件压缩及解压

    这几天在较为认真的研究基于哈夫曼编码的文件压缩及解压,费了点时间,在这分享一下: 这里用链式结构,非顺序表结构: 文件压缩: 1.获取文件信息(这里采用TXT格式文本): 2.压缩文件: 3.写配置文 ...

  6. Zlib压缩算法:LZ77、LZ78、霍夫曼编码、滑动窗口、Rabin-Karp算法、哈希链、I/O缓冲区

    Table of Contents 1.简介 1.1 什么是zlib 2.压缩算法 2.1 放气 2.2 LZ77 2.2.1 滑动窗口 2.2.2 长距离对 2.3 霍夫曼编码 3. zlib的实现 ...

  7. 文件的哈夫曼编码与解码

    文件的哈夫曼编码与解码 编码过程中,踩了一些小坑,做下记录: 1.全局变量count与std:count矛盾,建议用其他变量名. 2.内存泄漏问题 注意空间要开够 指针不可越界 main函数内开辟的栈 ...

  8. 5.1 Python图像处理之图像编码-哈夫曼编码

    5.1 Python图像处理之图像编码-哈夫曼编码 文章目录 5.1 Python图像处理之图像编码-哈夫曼编码 1 算法原理 2 代码 3 效果 1 算法原理 哈夫曼编码是一种根据词频变化的变长二进 ...

  9. 哈夫曼树和哈夫曼编码应用之图片压缩编码c++实现

    本人正在学习数据结构,在前几天做了压缩图片的项目,感觉到有必要分享给大家.因此今天我就分享给大家c语言数据结构有关哈夫曼树压缩图片的项目实现. 一:下面先介绍有关的知识: 1.背景 压缩软件是用特定算 ...

  10. 贪心算法(Greedy Algorithm)之霍夫曼编码

    文章目录 1. 贪心算法 2. 应用 2.1 找零钱 2.2 区间覆盖 2.3 霍夫曼编码 霍夫曼编码完整代码 1. 贪心算法 我们希望在一定的限制条件下,获得一个最优解 每次都在当前的标准下做出当下 ...

最新文章

  1. 把view或者div绘制 canvas ,导出图片功能实现完整源码附效果图(兼容H5和小程序)
  2. 云炬随笔20211010(4)
  3. PIC单片机精通_A/D转换异步串口通讯实例与详解
  4. 团队任务3:第一次冲刺
  5. oracle over函数 去重,oracle over结合row_number分区进行数据去重处理
  6. 数据库字段属性配置工具界面[用于代码生成]
  7. 三星Galaxy S20:如何开启黑暗模式
  8. 基于DDD的.NET开发框架 - ABP工作单元(Unit of Work)
  9. oracle sql execute elapsed time,SQL ordered by Elapsed Time 脚本
  10. 在线公开课 | 前端工程师如何突破瓶颈更好地变现自己
  11. 计算机一级多分,多少分能过一级计算机考试
  12. 在线有道词典,又添新特色了!
  13. 2022百度大数据开发工程师实习面试经历
  14. 【程序源代码】小电影小程序
  15. 「运维有小邓」搜索日志数据以作为网络安全情报
  16. 让View具有弹性效果的动画——SpringAnimation
  17. 阿里云体验--搭建超级小班课网课系统
  18. 用Scipy实现K-means聚类算法
  19. 【软件】Chrome 浏览器下载文件崩溃
  20. 甜椒刷机助手(安卓一键刷机助手) v3.5.1.1 电脑版

热门文章

  1. 无线攻击之Aircrack-ng破解无线密码(无线密码破解套件)
  2. python爬虫——大众点评——商户评论
  3. Microsoft Intune简介
  4. java基础之—TreeSet集合学习笔记
  5. Cadence设计原理图常用导出方案
  6. gearhost php,美国免费稳定全能空间:GearHost
  7. K-Prototypes聚类的Python实现
  8. 【github】github问题集合
  9. pyinstaller 把python编译成二进制
  10. VMware Tanzu Kubernetes Grid介绍