首页 > 编程语言 >求Huffman树及其matlab程序详解

求Huffman树及其matlab程序详解

时间:2024-09-20 20:55:58浏览次数:9  
标签:权重 叶子 算法 详解 matlab Y1 顶点 Huffman

#################本文为学习《图论算法及其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

 

标签:权重,叶子,算法,详解,matlab,Y1,顶点,Huffman
From: https://blog.csdn.net/weixin_72217561/article/details/142357151

相关文章

  • 【Webpack】三种模式详解
    文章目录一、Webpack模式概述1.模式的作用2.配置模式二、开发模式(development)1.开发模式的特点开发模式的主要特点包括:2.开发模式的配置3.开发模式的实际应用三、生产模式(production)1.生产模式的特点生产模式的主要特点包括:2.生产模式的配置3.生产模式的实......
  • 一文详解Unity下RTMP推送|轻量级RTSP服务|RTSP|RTMP播放模块说明
    技术背景好多开发者,对Unity下的模块,不甚了解,实际上,除了Windows/Linux/Android/iOSNativeSDK,大牛直播SDK发布了Unity环境下的RTMP推流|轻量级RTSP服务(Windows平台+Linux平台+Android平台)和RTMP|RTSP直播播放(Windows、Linux、Android和iOS平台全覆盖)低延迟的解决方案。目前,大牛直播......
  • 编程基础:常量、变量与字面量详解
    摘要:文章介绍了编程基础:变量可变,常量不变,字面量是初始赋值。我们在学习编程的时候,经常听到这3个词:常量变量字面量那么它们是什么意思呢?我们写2行代码,来帮助我们理解。inta=666;constintb=777;变量在第1行代码中,a是变量,666是字面量。或者我们可以说,变量a的初始值是......
  • 【Webpack】处理CSS资源详解
    文章目录一、Webpack处理CSS的基本概念1.Webpack中的CSS处理2.`Loader`的作用二、配置Webpack处理CSS资源1.基本配置2.使用`MiniCssExtractPlugin`提取CSS3.处理Sass或Less等预处理器4.使用PostCSS处理CSS三、CSSModules的使用1.CSSModules概述2.配置CSSMo......
  • 产品设计详解 - AxureMost
    产品设计详解-AxureMost产品设计详解-AxureMost产品设计的可用性影响着用户体验,在交互过程中,除了可用性外,用户还会经历一种更加微妙的纯主观的心理和情感体验,这种体验难以表达和度量,却极大地影响了用户体验。本章从可用性、心流、沉浸感、情感和美感5个方面来介绍对......
  • MATLAB heatmap 坐标
    MATLAB的heatmap坐标数字密集,希望等间距稀疏打印坐标刻度。XLabels=1:100;%ConverteachnumberinthearrayintoastringCustomXLabels=string(XLabels);%ReplaceallbutthefifthelementsbyspacesCustomXLabels(mod(XLabels,5)~=0)="";%Setth......
  • selenium定位详解
    css定位一、css中的id定位(1)id简写定位(#)fromseleniumimportwebdriverfromtimeimport*dx=webdriver.Chrome()dx.get("https://www.baidu.com/")dx.find_element_by_css_selector("#kw").send_keys("css中id简写定位#")(2)id全称定位fromsel......
  • MATLAB的人脸签到考勤系统
    MATLAB的人脸签到考勤系统可以通过图像处理和机器学习技术来实现人脸识别和签到功能。下面是一个简单的实现步骤:数据采集:首先,需要收集一批员工的人脸图像作为训练数据。可以使用摄像头或者从已有的照片中提取人脸图像。数据预处理:对采集到的人脸图像进行预处理,包括人脸检测......
  • Matlab 基于NRBO-Transformer-LSTM-SVM多特征分类预测 (多输入单输出)[24年算法]
    基于NRBO-Transformer-LSTM-SVM多特征分类预测(多输入单输出)NRBO优化参数为隐藏层节点数、正则化系数、学习率!你先用你就是创新!!!1.程序已经调试好,无需更改代码替换数据集即可运行!!!数据格式为excel!2.评价指标包含:分类准确率、灵敏度、特异性曲线下面积(AUC值)、卡帕(Kappa)系......
  • DC-1通关详解
    一、环境搭建:1、靶机描述DC-1是一个专门建立的脆弱实验室,目的是获得渗透测试领域的经验。它是为初学者设计的挑战,但它到底有多容易取决于你的技能和知识,以及你的学习能力。要成功完成这一挑战,您需要掌握Linux技能,熟悉Linux命令行,并具有基本渗透测试工具的经验,例如可以在Kali......