求Huffman树及其matlab程序详解

news2025/2/23 23:02:17

#################本文为学习《图论算法及其MATLAB实现》的学习笔记#################

算法用途

求Haffman树

算法思想

根据定理4.17,给出求Huffman树的算法步骤如下:
①对给出的所要求的叶子顶点的权进行从小到大排序,写出的权重向量 A=(p_{1},p_{2},\dots,p_{n});
②根据定理4.17,写出兄弟的权重分别为 p_{1} 和 p_{2} 以及父亲的权重为 (p_{1}+p_{2}) 的一棵单元树;
③对权重分别为 p_{1}+p_{2},p_{3},\dots,p_{n} 的 (n-1) 个叶权值重新从小到大进行排序,重复②和③,直到只剩下一片叶子;
④算法结束。

程序参数说明

A 表示已知的叶子顶点的权重向量,而叶子顶点的权重就是权重向量的分量。
W 表示所求的 Huffman 树的输出形式,即以Huffman 树所有单元树集合的输出形式。
有关程序运行后所求的Huffman树的输出形式W的说明:
①W的每一行为三个顶点构成的树,且前两列为叶子,最后一列为根,其相应的值代表该节点的权值。
②W中的所有单元树按照从下到上的顺序排列,将这些单元树中权值相同的两个顶点合并为一个顶点(但是任意三个权值相同的顶点不能合并,W中完全相同的行也不能合并),即可得到 Huffman 树。

算法程序详解

%求Huffman树
function [ W ] = huftref( A )
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% 输入: A: 已知叶子顶点的权重向量
%%% 输出: W: 所求的Huffman树的输出,从下到上顺序排列,前两列为叶子,最后一列为根
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

k = 1;
Y = sort(A);        % 将 A 升序排列
n = length(A);      % 计算顶点数
B = Y(1) + Y(2);    % B 为父亲权重
W = [Y(1) Y(2) B];  % 兄弟权重为Y(1)Y(2),父亲权重为 B 的一棵单元树
Y1 = Y;
m = 0;

while m == 0
    k = k+1;
    B1 = [B Y1(3:length(Y1))];
    f = length(B1);             % 计算更新后的顶点数,即叶子数
    if f >= 2
        Y1 = sort(B1);          % 重新对 B,Y(3),…,Y(n) 排序
        B = Y1(1) + Y1(2);      % 重复步骤(1)(2)
        W(k,:) = [Y1(1) Y1(2) B];   % 将新的单元数写入 Huffman 树中
    else
        m = 1;
    end
end

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2146397.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

9月19日微语报,星期四,农历八月十七

9月19日微语报,星期四,农历八月十七,工作愉快,生活喜乐! 一份微语报,众览天下事! 1、台风“普拉桑”将影响东海,自然资源部启动海洋灾害三级应急响应。 2、国家体育总局&#xff…

Spring6梳理9—— 依赖注入之注入对象类型属性

9.1 依赖注入之外部注入对象类型属性 9.1.1 创建dept与emp类 1.dept类 package com.atguigu.spring6.iocxml.ditest;//部门类 public class Dept {private String dname;public String getDname() {return dname;}public void setDname(String dname) {this.dname dname;…

强化雨天巡检,智能巡检机器人确保变电站安全运行

中央气象台9月19日6时继续发布暴雨黄色预警:预计,9月19日8时至20日8时,内蒙古中部、河北北部、安徽东南部、江苏南部、上海、浙江大部、海南岛以及青海东北部、甘肃西南部、辽宁中部、福建西北部、江西中部等地部分地区有大到暴雨&#xff0c…

Linux系统编程入门 | 模拟实现 ls -l 命令

模拟实现代码 #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #include <pwd.h> #include <grp.h> #include <time.h> #include <string.h>int main(int argc, char* argv[]) {if (a…

Sidewalk介绍

目录 1 前言2 简介2.1 注意事项 3 结束语 1 前言 Sidewalk是Amazon出的一个针对IoT物联网的协议&#xff0c;类似于LoRaWAN协议&#xff0c;针对小而美的低功耗设备。Amazon Sidewalk支持低带宽和远程连接&#xff0c;使用BLE进行短距离通信&#xff0c;使用900MHz的频率的LoR…

Selenium实现滑动滑块验证码验证!

背景&#xff1a;在部分的登录中有滑动验证码的验证&#xff0c;由于滑动验证码的缺块是随机的就导致实现起来比较困难&#xff01; 01、实现方案 模板匹配 通过openCV分析两个图片的相似度&#xff0c;获取两个相似度很高图片的坐标&#xff0c;从而计算两个图片的距离。 轮…

(k8s)Kubernetes部署Promehteus

转载&#xff1a;Kubernetes&#xff08;k8s&#xff09;部署Promehteus 一、概述 在1.8版本以后heapster由metrics-server替代&#xff1b;从k8s的v1.11版本开始已经全面转向以Prometheus为核心的新监控体系架构&#xff1b;kube-prometheus 中包含了 prometheus 监控所用到的…

Sui Builder House锦集,原生USDC和CCTP即将登陆Sui

在9月17日新加坡Sui Builder House活动上&#xff0c;我们度过了充满知识分享和社区建设的精彩一天&#xff01;感谢数百位参会的开发者&#xff0c;一同庆祝Sui社区&#xff0c;并了解最新的动态&#xff01; 在过去的24小时内&#xff0c;发布了以下重要消息&#xff0c;不容…

C语言 | Leetcode C语言题解之第416题分割等和子集

题目&#xff1a; 题解&#xff1a; bool canPartition(int* nums, int numsSize) {if (numsSize < 2) {return false;}int sum 0, maxNum 0;for (int i 0; i < numsSize; i) {sum nums[i];maxNum fmax(maxNum, nums[i]);}if (sum & 1) {return false;}int tar…

网络封装分用

目录 1,交换机 2,IP 3,接口号 4,协议 分层协议的好处: 5,OSI七层网络模型. 6,TCP/IP五层网络模型(主流): [站在发送方视角] [接收方视角] 1,交换机 交换机和IP没有关系,相当于是对路由器接口的扩充,这时相当于主机都与路由器相连处于局域网中,把越来越多的路由器连接起…

月入10000+,蓝海项目!少儿英语赛道

一、项目原理 少儿英语赛道的话&#xff0c;我们主要通过英语小短文&#xff0c;来让孩子学习英语&#xff0c;虽然现在有很多英语的课程&#xff0c;但针对少儿的英语是比较少的&#xff0c;所以这个赛道还是很吃香的。 整体流程也简单&#xff0c;先用AI写出故事&#xff0…

axure的下载,激活,汉化全过程,多图

1.前言 下载地址&#xff1a;https://pan.baidu.com/s/12xo1mJer2hmBK7QrYM5v-Q?pwd0107#list/path%2Fcsdn%E5%85%B1%E4%BA%AB%E6%96%87%E4%BB%B6 源文章&#xff1a;https://blog.csdn.net/iwanttostudyc/article/details/123773796?ops_request_misc%257B%2522request%25…

基于SpringBoot+Vue的篮球馆会员信息管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于JavaSpringBootVueMySQL的…

高中数学:立体几何-平面的定义与公理

文章目录 一、平面定义及画法1、定义2、表示方法 二、公理1、公理12、公理23、公理3 一、平面定义及画法 1、定义 平面是向四周无限延展的。 2、表示方法 我们常用矩形的直观图&#xff0c;即平行四边形表示平面&#xff0e; 我们常用希腊字母α&#xff0c;β&#xff0c…

docker创建rabbitmq容器

创建rabbitmq容器 1.docker导入镜像 2.写docker-compose文件 并创建容器 3.访问15672端口 账号和密码都是guest

资产市场的战争-基于资产的媒体矩阵宣传和IP打造

在资产市场的战争中,基于资产的媒体矩阵宣传和IP打造是提升品牌竞争力、增强市场影响力的重要手段。 不同类型的媒体平台 以下是对这两个方面的详细分析: 一、基于资产的媒体矩阵宣传 1. 媒体矩阵的构建 平台选择:根据资产的特点和目标受众,选择合适的媒体平台进行宣传。…

TMS320F28335的GPIO

1 TMS320F28335 GPIO 介绍 1.1 GPIO 概念 1.2 GPIO 结构框图

neo4j安装为服务+配置环境变量

目录 neo4j安装为服务 windows services 参照JDK&#xff0c;将neo4j加入到环境变量 neo4j安装为服务 windows services 我的上一篇文章详细写明了如何安装启动neo4j《neo4j安装启动教程对应的jdk配置》&#xff0c;文末的启动neo4j是通过cmd命令行访问bin目录&#xff0c;这…

【设计模式-适配】

Adapter Pattern&#xff08;适配器模式&#xff09; 是一种结构型设计模式&#xff0c;其主要目的是让不兼容的接口能够协同工作。适配器模式通过引入一个适配器类&#xff0c;转换一个类的接口&#xff0c;使得原本不兼容的接口可以互相配合&#xff0c;从而实现接口的兼容性…

国庆旅游高峰期,景区如何利用可视化大屏保障游客安全?

国庆假期即将来临&#xff0c;中国文化和旅游部发布的数据显示&#xff0c;今年国庆期间国内旅游市场将迎来爆发式增长&#xff0c;预计出游人次将达到8.96亿&#xff0c;同比增长86%&#xff0c;旅游收入预计将达到7825亿元人民币&#xff0c;同比增长138%。这一繁荣景象无疑给…