哈夫曼树的构建过程_哈夫曼树是二叉排序树吗

哈夫曼树的构建过程_哈夫曼树是二叉排序树吗精讲数据结构:第9节:二叉树的典型应用——哈夫曼树二叉树的典型应用——哈夫曼树思维导图二叉树的典型应用:哈夫曼树和哈夫曼编码译码器哈夫曼树是二叉树的一种经典应用。哈夫曼树和哈夫曼编码经常搭配使用,用来创建一篇文章对应的加密编码,并且能够对这篇文章进行加密

精讲数据结构:第9节:二叉树的典型应用——哈夫曼树   
哈夫曼树的构建过程_哈夫曼树是二叉排序树吗二叉树的典型应用——哈夫曼树思维导图   二叉树的典型应用:哈夫曼树和哈夫曼编码译码器   哈夫曼树是二叉树的一种经典应用。哈夫曼树和哈夫曼编码经常搭配使用,用来创建一篇文章对应的加密编码,并且能够对这篇文章进行加密和解密。通过哈夫曼编码加密后的文章完全通过01构成,并且每一篇文章因为内容的不同,即使是相同的字符所对应的的哈夫曼编码也是不同的。所以,既是单纯的得到一篇文章的密文结构,没有得到对应的哈夫曼编码表,也是无法进行解密的。所以哈夫曼树和哈夫曼编码在密码学当中具有非常高的学术研究价值。   ①前缀编码和非前缀编码   在学习哈夫曼树和哈夫曼编码之前,我们先来学习一下什么是前缀编码和非前缀编码。   前缀编码:如果一个字符的加密编码有可能出现在其他字符的加密编码的前面,那么这一整套编码结构就称之为前缀编码。举个例子:加入字符a的编码是10,字符b的编码是1000,那么我们称字符a的编码是字符b的编码的前缀编码。前缀编码在解密过程中很可能出现歧义,比如以上面ab的编码为例,字符串ba的编码结果为:。但是在解密过程中,我们既可以把这个密文解密为ba,也可以解密为a00a,那么这样就产生了歧义。   非前缀编码:与前缀编码相反的是,非前缀编码指的就是在编码集中,任意两个字符的编码之间都不可能产生前缀编码的情况。也就是说,如果使用非前缀编码的话,在解密过程中是不可能出现歧义的。   ②构建哈夫曼树   对一篇文章构建哈夫曼编码的过程如如下:   步骤1:首先将这个文章当成一个字符串,遍历这个字符串中所有的字符,并且统计每一个字符出现的次数;   步骤2:根据字符出现的次数对字符进行排序;   步骤3:选取排序后出现次数最少的两个字符加入哈夫曼树,并将两个字符的出现次数取值相加,合并成为一个中间节点;中间节点仅记录两个节点取值的加和,但是不记录任何字符;   步骤4:将中间节点加入字符排序序列中,删除已经使用过的节点,对序列重新排序,重复步骤2-4,构建过程中产生的中间节点也算作在内;   步骤5:当所有的字符和中间节点全部合成完毕时,序列中只剩余一个节点,就是哈夫曼树的根节点,哈夫曼树创建完毕。   哈夫曼树的构建过程如下图所示:
哈夫曼树的构建过程_哈夫曼树是二叉排序树吗哈夫曼树的构建过程   从哈夫曼树的构建过程我们不难看出如下规律:   1.哈夫曼树的构建过程是自底向上的;   2.在一个哈夫曼树中所有具有实际意义的字符,最终一定会存在于叶子结点中。   上述这两个步骤也为我们后面生成非前缀的哈夫曼编码打下了基础。   ③创建字符哈夫曼编码:一种非前缀编码   接下来我们在上面创建的哈夫曼树的基础上,来为每一个存储字符的节点分配哈夫曼编码。每一个字符节点创建哈夫曼编码的过程如下:   步骤1:从根节点开始,向下寻找每一个叶子节点;   步骤2:如果向左孩子方向走一步,则记0;   步骤3:如果向右孩子方向走一步,则记1;   步骤4:重复上面步骤2-3,直到遍历完成整个哈夫曼树为止,最终得到根节点通往每一个叶子节点的路径字符串,就是这个叶子节点对应字符的哈夫曼编码。   编码结果如图所示:
哈夫曼树的构建过程_哈夫曼树是二叉排序树吗为文章字符创建哈夫曼编码的过程   从上图不难看出:文章中出现的任何字符的编码,都不会构成其他字符编码的前缀编码。   ④文件内容加密   加密的过程,就是将文章中所有的字符使用其对应的哈夫曼编码进行替换的过程。   如上文图中提供的字符串,最终的编码结果为:   ⑤加密内容解密   密文解密的时候,必须同时得到密文和所有字符对应的哈夫曼编码表两部分内容。因为每一个文章中,即使是相同的字符,出现的次数也有可能是不相同的,所以只要是通过不同文章得到的哈夫曼编码表之间也是不通用的。   解密过程步骤如下:   步骤1:顺序取得密文的一个字符,在编码表中比对,有没有这个密文对应的密码字符串;   步骤2:如果没有,则在保留当前密文字符的基础上,下一位密文并拼接到这一位密文的后面;   步骤3:重复步骤1-2,直到能够在编码表中找到对应的密文字符串,使用编码表中的密文字符串对应的明文替换这一段密文;   步骤4:重复步骤1-4,直到密文中所有的内容被翻译成为明文为止。   上述步骤如下图所示:
哈夫曼树的构建过程_哈夫曼树是二叉排序树吗哈夫曼编码译码器解密过程

2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/31141.html

(0)
上一篇 2024年 9月 11日
下一篇 2024年 9月 11日

相关推荐

  • 图像处理平移matlab_matlab左右翻转图像

    图像处理平移matlab_matlab左右翻转图像MATLAB数字图像处理 图像平移图像平移对于图像的平移,MATLAB中是可以利用膨胀函数平移图像。代码:效果图:这里我重点说平移的基本原理及代码实现。首先,我们必须要知道图像是怎么平移的?图像可以看成二维矩阵,由很多的像素点组成,假设一个像素点的坐标为(1,2),我们向下

    2024年 8月 3日
  • Datagrip2024.1.4激活码(Mathtype2024官方永久免费激活码附带激活成功教程版下载安装教程)

    Datagrip2024.1.4激活码(Mathtype2024官方永久免费激活码附带激活成功教程版下载安装教程)

    激活谷笔记 2024年 7月 8日
  • top衣服指什么_top可以指上衣吗

    top衣服指什么_top可以指上衣吗服装种类大全(图文详解)服装(apparel,garments,cothes),指穿于人体起到保护和装饰作用的制品,又称为衣服。常见服装可分为上装,下装,连体装,套装,功能/职业装,上装(tops)1.夹克衫(jacket):衣长较短,宽胸围,

    2024年 9月 1日
  • html中单标记和双标记的区别_html中单标记和双标记的区别

    html中单标记和双标记的区别_html中单标记和双标记的区别html5常见单双标记有哪些标签类别常见标签单标签(定义换行符)(定义水平线)(定义图像)(定义输入框)(提供了 HTML 文档的元数据)(定义文档与外部资源的关系,常用于链接样式表)双标签(定义HTML文档)、(定义文档头部)、(定义文档标题)、、、、、、、、、、、、、、扩展知识:html5标记超

    激活谷笔记 2024年 6月 1日
  • 铃木dl250-a摩托车_铃木摩托车价目表

    铃木dl250-a摩托车_铃木摩托车价目表一款二手的豪爵铃木DL250,售价2.6W值得入手吗?最近有位车友私信问一款20年的豪爵铃木DL250,跑了1700多公里,售价2.6万值不值得入手。通常情况下还不不推荐车友入手二手车的,毕竟很多情况下水很深,特别是很多小白容易上当,因为你所有看到的二手车并不一定就是你想的二手车,虽

    2024年 9月 2日
  • c语言strcpy的头文件_c++语言程序设计

    c语言strcpy的头文件_c++语言程序设计C语言字符串函数strcmp的详解使用和模拟在C语言中,可以使用一系列的字符串函数来处理字符串。下面是一些常用的字符串函数及其用法:1. strlen:用于计算字符串的长度。“`c#include <stdio.h>#include <string.h>int

    激活谷笔记 2024年 8月 27日
  • os 切换输入法_澎湃os切换输入法

    os 切换输入法_澎湃os切换输入法小米澎湃OS内置的小米搜狗输入法,如何关闭输入面板的节日图标?使用过MIUI系统或者小米澎湃OS系统的用户,对于小米搜狗输入法,相信大家都不陌生吧?那么,小米澎湃OS内置的小米搜狗输入法,如何关闭输入面板的节日图标?其实,在【小米搜狗

    2024年 6月 20日
  • Navicat Premium 16.2.7激活(Navicat的安装及使用(自带百度网盘链接奥!!!))

    Navicat Premium 16.2.7激活(Navicat的安装及使用(自带百度网盘链接奥!!!))

    2024年 8月 19日
  • xshell是什么工具_webshell是什么

    xshell是什么工具_webshell是什么渗透测试工程师课程主题WEB漏洞利用与WEB安全工程师培养目标文件上传漏洞利用文件上传功能的作用及如何利用导致文件上传漏洞的成因充分利用不同中间件的文件解析漏洞如何绕过文件上传检测机制,进行文件上传竞争上传的原理及操作

    激活谷笔记 2024年 5月 15日
  • Idea激活2023.3.5(PhpStorm v2023.3.5 便携增强版 – 果核剥壳)

    Idea激活2023.3.5(PhpStorm v2023.3.5 便携增强版 – 果核剥壳)

    激活谷笔记 2024年 7月 14日
  • l298n电机驱动模块怎么连接电机_电机驱动模块

    l298n电机驱动模块怎么连接电机_电机驱动模块基于STM32的智能婴儿车1绪论物联网项目开发 – 智能小车设计 – 创客学院直播室1.1课题背景现有的婴儿车大都需要人工操作,安全装置旨在人工制动,不能对婴儿的所处的环境以及婴儿的哭喊作出相应的应答。停

    2024年 8月 31日
  • 二叉排序树的查找算法代码实现_二叉排序树查找路径符合什么规则

    二叉排序树的查找算法代码实现_二叉排序树查找路径符合什么规则二叉排序树之查找算法二叉排序树(Binary Search Tree,BST)是一种特殊的二叉树,它满足以下条件:1. 对于任意节点,左子树的所有节点的值都小于该节点的值,右子树的所有节点的值都大于该节点的值。2. 左右子树也都是二叉排序树。基于以上性质,二叉排序树可以用于查找

    激活谷笔记 2024年 7月 26日
关注微信