[不定项选择题]

已知一段文本有1382个字符,使用了1382个字节进行存储,这段文本全部是由a、b、c、d、e这5个字符组成,a出现了354次,b出现了483次,c出现了227次,d出现了96次,e出现了232次,对这5个字符使用哈夫曼(Huffman)算法进行编码,则以下哪些说法正确()
使用哈夫曼算法编码后,用编码值来存储这段文本将花费最少的存储空间
使用哈夫曼算法进行编码,a、b、c、d、e这5个字符对应的编码值是唯一确定的
使用哈夫曼算法进行编码,a、b、c、d、e这5个字符对应的编码值可以有多套,但每个字符编码的位(bit)数是确定的
b这个字符的哈夫曼编码值位数应该最短,d这个字符的哈夫曼编码值位数应该最长
正确答案:A C D

A正确,Huffman树就是求最优解。可以有多套方案,但最终每套方案生成的编码长度都相同且都是最优解。
B错误,我们可以将左子树定为1右子树定为0也可以反之,不同的方案获得的编码值是不同的,但每个字符的编码长度是固定的。
C正确,不同的方案影响的只是通向节点的路径为0还是1,而不会影响Huffman树的层次结构
D正确,生成了Huffman树之后,我们就能看到,出现频率越高的节点越靠近根,深度越小即编码值尾数越短;出现频率越低的节点越远离根,深度越大即编码位数越长。


错误答案:A
正确答案:C
小结:
这道题是因为马虎做错的,字符串的长度是指串中所含字符的个数

错误答案:C
正确答案:A
串是一种特殊的线性表,数据元素是一个字符*,也只能是一个字符

哈弗曼树

一、基本概念
给定n个权值作为n个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。

简介
在计算机数据处理中,霍夫曼编码使用变长编码表对源符号(如文件中的一个字母)进行编码,其中变长编码表是通过一种评估来源符号出现机率的方法得到的,出现机率高的字母使用较短的编码,反之出现机率低的则使用较长的编码,这便使编码之后的字符串的平均长度、期望值降低,从而达到无损压缩数据的目的。
例如,在英文中,e的出现机率最高,而z的出现概率则最低。当利用霍夫曼编码对一篇英文进行压缩时,e**重点内容**极有可能用一个比特来表示,而z则可能花去25个比特(不是26)。用普通的表示方法时,每个英文字母均占用一个字节,即8个比特。二者相比,e使用了一般编码的1/8的长度,z则使用了3倍多。倘若我们能实现对于英文中各个字母出现概率的较准确的估算,就可以大幅度提高无损压缩的比例。
霍夫曼树又称最优二叉树,是一种带权路径长度最短的二叉树。所谓树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的路径长度(若根结点为0层,叶结点到根结点的路径长度为叶结点的层数)。树的路径长度是从树根到每一结点的路径长度之和,记为WPL=(W1*L1+W2*L2+W3*L3+…+Wn*Ln),N个权值Wi(i=1,2,…n)构成一棵有N个叶结点的二叉树,相应的叶结点的路径长度为Li(i=1,2,…n)。
可以证明霍夫曼树的WPL是最小的。

二、应用
1、哈夫曼编码
在数据通信中,需要将传送的文字转换成二进制的字符串,用0,1码的不同排列来表示字符。例如,需传送的报文为“AFTER DATA EAR ARE ART AREA”,这里用到的字符集为“A,E,R,T,F,D”,各字母出现的次数为{8,4,5,3,1,1}。现要求为这些字母设计编码。要区别6个字母,最简单的二进制编码方式是等长编码,固定采用3位二进制,可分别用000、001、010、011、100、101对“A,E,R,T,F,D”进行编码发送,当对方接收报文时再按照三位一分进行译码。显然编码的长度取决报文中不同字符的个数。若报文中可能出现26个不同字符,则固定编码长度为5。然而,传送报文时总是希望总长度尽可能短。在实际应用中,各个字符的出现频度或使用次数是不相同的,如A、B、C的使用频率远远高于X、Y、Z,自然会想到设计编码时,让使用频率高的用短码,使用频率低的用长码,以优化整个报文编码。
为使不等长编码为前缀编码(即要求一个字符的编码不能是另一个字符编码的前缀),可用字符集中的每个字符作为叶子结点生成一棵编码二叉树,为了获得传送报文的最短长度,可将每个字符的出现频率作为字符结点的权值赋予该结点上,显然字使用频率越小权值越小,权值越小叶子就越靠下,于是频率小编码长,频率高编码短,这样就保证了此树的最小带权路径长度效果上就是传送报文的最短长度。因此,求传送报文的最短长度问题转化为求由字符集中的所有字符作为叶子结点,由字符出现频率作为其权值所产生的哈夫曼树的问题。利用哈夫曼树来设计二进制的前缀编码,既满足前缀编码的条件,又保证报文编码总长最短。



哈夫曼静态编码:它对需要编码的数据进行两遍扫描:第一遍统计原数据中各字符出现的频率,利用得到的频率值创建哈夫曼树,并必须把树的信息保存起来,即把字符0-255(2^8=256)的频率值以2-4BYTES的长度顺序存储起来,(用4Bytes的长度存储频率值,频率值的表示范围为0–2^32-1,这已足够表示大文件中字符出现的频率了)以便解压时创建同样的哈夫曼树进行解压;第二遍则根据第一遍扫描得到的哈夫曼树进行编码,并把编码后得到的码字存储起来。
哈夫曼动态编码:动态哈夫曼编码使用一棵动态变化的哈夫曼树,对第t+1个字符的编码是根据原始数据中前t个字符得到的哈夫曼树来进行的,编码和解码使用相同的初始哈夫曼树,每处理完一个字符,编码和解码使用相同的方法修改哈夫曼树,所以没有必要为解码而保存哈夫曼树的信息。编码和解码一个字符所需的时间与该字符的编码长度成正比,所以动态哈夫曼编码可实时进行。
2、哈夫曼译码
在通信中,若将字符用哈夫曼编码形式发送出去,对方接收到编码后,将编码还原成字符的过程,称为哈夫曼译码。

错题链接
https://www.nowcoder.com/questionTerminal/0ad28ca1b2d44e0fbaddc0d076d607a9
哈夫曼树百度百科:
https://baike.baidu.com/item/%E5%93%88%E5%A4%AB%E6%9B%BC%E6%A0%91/2305769?fr=aladdin
来源:牛客网

牛客网错题集合之字符串(一)相关推荐

  1. 牛客网错题整理--C++篇1

    牛客网错题整理--C++篇1 1.下列程序的运行结果是PP 10003,请为横线处选择合适的程序(): #include<stdio.h>#include<string.h>s ...

  2. 牛客网错题集(2021-08-31)

    牛客错题集2 暑假回来的一次刷题,结果不是很理想. 1.在 main() 方法中给出的整型数组,如果将其写到一个文件中,需要( ). 2.给定代码: 3.第三行将输出什么? 4.关于下面的程序,说法正 ...

  3. 牛客网编程题01--计算字符串最后一串单词的长度,单词以空格隔开,字符串小于5000

    *题目如下: 代码如下: // CalculateLength.cpp : 定义控制台应用程序的入口点. // 需求:计算字符串最后一串单词的长度,单词以空格隔开,字符串小于5000#include ...

  4. 牛客网错题——Day11

    存入内存字节 Java采用的是Uincode编码,两个字节表示一个字符. 下列代码输出的是 public class ClassTest{String str = new String("h ...

  5. 牛客网错题总结(6)

    我自己运营的一个公众号-----IT资源君 我每天都会分享java全套教程,python爬虫,python数据分析,各类IT资源等1000G资源,大家可以去免费无套路领取 1.Servlet的生命周期 ...

  6. 牛客网错题集系列(三)

    目录 1.关于Integer的一个问题 2.关于泛型的一道题 3.关于Integer类型超过128时的一道题 4.以下哪一个不是赋值符号? 5.关于try/catch/finally 6.关于for循 ...

  7. 牛客网错题集---机器学习基础篇

    题目一 支持向量机(Support Vector Machine, SVM)是一类按监督学习(supervised learning)方式对数据进行二元分类(binary classification ...

  8. 牛客网错题总结(2)

    1.假设在n进制下,下面的等式成立,n值是()240*12=2880 A.19 B.18 C.17 D.16 E.15 F.以上都对 分析: 假设为n进值则 [2*(n^2 )+4*(n^1)+0] ...

  9. 【牛客网刷题】中秋节前开启java专项练习错题总结第一天

    [牛客网刷题]中秋节前开启java专项练习错题总结第一天 概述 写在前面 错题分析 值得记录的错题 总结 写在最后 概述 还有十几天就到中秋节了,从此又老了一岁,也多了一年的知识积累.对于这样一个特殊 ...

最新文章

  1. c语言孩子兄弟法存储一棵树,数据结构(C语言版)---树
  2. 关系到了冰点_和丈夫的关系到了冰点,该怎么办?
  3. WiFi行业将走向何方?
  4. node.js初入手
  5. 怎样判断一个网站是不是前后端分离的?
  6. 05_SpringCloud整合声明式HTTP客户端-Feign
  7. Qt编译时出现“could not parse styleSheet”
  8. [转]计算机视觉之跟踪算法——相关滤波器Correlation Filter
  9. [渝粤教育] 广东-国家-开放大学 21秋期末考试财务会计(二)10165k2
  10. 《通信原理》复习笔记10----第十章模拟信号的数字传输及相关例题(重点及难点)
  11. 电力系统微型计算机继电保护试题及答案,全国2010年月高等教育自学考试电力系统微型计算机继电保护试题及答案.doc...
  12. 平面设计个人简历模板
  13. 学计算机高中应选什么科目,新高考选哪些科目可以报计算机?高中生如何进步?...
  14. 前端JS 实现将24位RGB颜色转换16位RGB颜色
  15. XDOC 在线word文档表格预览
  16. makefile教程_Makefile教程
  17. 程序员叫啥名字_他们的名字叫程序员
  18. 《 猜数字》小游戏的Java实现
  19. 2023最新英皇CMS影视采集系统搭建程序源码+支持一键安装/功能强大
  20. 常见的挖矿程序处理方式

热门文章

  1. shell条件测试操作
  2. 求助:关于python tkinter模块 pack() 函数问题。请各位大神赐教!
  3. PCL超体素分割代码vs2019+pcl1.11.1实现
  4. windows 音频编程
  5. python 的 pointcloud 计算探路
  6. 2018年阅读书籍清单
  7. 怎么在win7中增加“显示桌面”快速启动栏
  8. 《放学后》-东野圭吾
  9. 《中国式斗争:一贴省你二十年》
  10. 奔跑吧小子 v1.0.3 安卓版