【头歌】构建哈夫曼树及编码

构建哈夫曼树及编码

第1关:构建哈夫曼树

任务描述

本关任务:构建哈夫曼树,从键盘读入字符个数n及这n个字符出现的频率即权值,构造带权路径最短的最优二叉树(哈夫曼树)。

相关知识

哈夫曼树的定义

设二叉树具有n个带权值的叶子结点{w1,w2,...,wn},从根结点到每个叶子结点都有一个路径长度。

从根结点到各个叶子结点的路径长度与相应结点权值的乘积的和称为该二叉树的带权路径长度,记作:

其中,wi为第i个叶子结点的权值,li为第i个叶子结点的路径长度。

例如: 哈夫曼树

以上二叉树的带权路径长度值: WPL=1×3+3×3+5×2+7×1=29

给定一组具有确定权值的叶子结点,可以构造出许多形状的二叉树,把其中具有最小带权路径长度的二叉树称为哈夫曼树。

例如,用4个整数1、3、5、7作为4个叶子结点的权值,可以构造出不同的二叉树,它们的带权路径长度可能不相同,如下:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

《Zookeeper》源码分析(二十三)之 客户端的命令处理过程

目录 客户端的命令处理过程1. ZooKeeper.create()2. ClientCnxn.submitRequest()3. SendThread.run()4. ClientCnxnSocket.doTransport()5. SendThread.readResponse() 客户端的命令处理过程 以创建节点命令为例,整个过程流程如下: CliCommand命令在抽…

uniapp国际化npm install vue-i18n报错

npm install vue-i18n //npmyarn add vue-i18n //yarn在vue2环境下,默认安装 npm install vue-i18n 的版本是 vue-i18n9.1.9,所以报错。 npm view vue-i18n versions --json 用以上命令查看版本: vue2建议5.0版本 npm install vue-i1…

Wireshark数据抓包分析之ARP协议

一、实验目的: 通过wireshark的数据抓包了解这个ARP协议的具体内容 二、预备知识: 1.Address Resolution Protocol协议,就是通过目标IP的值,获取到目标的mac地址的一个协议 2.ARP协议的详细工作过程,下面描述得非常清晰&#xff…

VScode使用SSH连接linux

1、官网下载和安装软件 https://code.visualstudio.com/Download 2、安装插件 单击左侧扩展选项,搜索插件安装 总共需要安装的插件如下所示 3、配置连接服务器的账号 安装完后会在左侧生成了远程连接的图标,单击此图标,然后选择设置图标…

[LitCTF 2023]Flag点击就送!

进入环境后是一个输入框,可以提交名字 然后就可以点击获取flag,结果回显提示,需要获取管理员 可以尝试将名字改为admin 触发报错,说明可能存在其他的验证是否为管理员的方式 通过抓包后,在cookie字段发现了 特殊的东西…

数据隐私与安全在大数据时代的挑战与应对

文章目录 数据隐私的挑战数据安全的挑战应对策略和方法1. 合规和监管2. 加密技术3. 匿名化和脱敏4. 安全意识培训5. 隐私保护技术 结论 🎈个人主页:程序员 小侯 🎐CSDN新晋作者 🎉欢迎 👍点赞✍评论⭐收藏 ✨收录专栏&…

spring框架:简介+依赖注入

目录 一、spring简介 二、创建项目 三、spring创建对象 四、SpringBean管理 1.注入实现-XML 2.注入实现-注解 一、spring简介 spring诞生与2003年,是一个轻量级的、IOC( Inversion Of Control 控制反转)和AOP(Aspect Oriented Programming 面向切面编程)的jav…

【rust/egui】(六)看看template的app.rs:TextEdit

说在前面 rust新手,egui没啥找到啥教程,这里自己记录下学习过程环境:windows11 22H2rust版本:rustc 1.71.1egui版本:0.22.0eframe版本:0.22.0上一篇:这里 TextEdit 文本编辑框 其定义为&#…

有限与无限游戏 | 真北荐书

2023佛山敏捷之旅暨DevOps Meetup志愿者为进行大会的组织与准备,每周三晚有一个例会。 例会前等人的时间,涌现出一个小的分享环节。今天分享这本书:《有限与无限游戏》。 大家选择成为志愿者,是一个无限游戏。而组织活动和完成各种…

uni-app里使用webscoket

实现思路和vue中是一样的。如果想看思路可以看这篇文章:websocket 直接上可以运行的代码: 一、后端nodeJS代码: 1、新建项目文件夹 2、初始化项目: npm init -y 3、项目里安装ws npm i ws --save 4、nodeJS代码&#xff1…

STL list基本用法

目录 list的使用构造函数和赋值重载迭代器(最重要)容量相关插入删除元素操作reversesortuniqueremovesplice list的底层实际是双向链表结构 list的使用 构造函数和赋值重载 构造函数说明list()无参构造list (size_type n, const value_type& val value_type())构造的li…

Python学习笔记_进阶篇(一)_浅析tornado web框架

tornado简介 1、tornado概述 Tornado就是我们在 FriendFeed 的 Web 服务器及其常用工具的开源版本。Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快。得利于…

Clock Domain Crossing(CDC)跨时钟域

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 ​跨时钟域(CDC)指的是信号由一个时钟域进入另一个时钟域,以下图为例。 ● F1属于clk1时钟域 ● Q1属于clk1时钟域的信号 ● F2属于clk2时钟域 ● Q2属于clk2时钟域的信号 ● Q1对于F2来说是…

〔017〕Stable Diffusion 之 常用模型推荐 篇

✨ 目录 🎈 模型网站🎈 仿真系列🎈 国风系列🎈 卡通动漫系列🎈 3D系列🎈 一些好用的lora模型 🎈 模型网站 由于现在大模型超级多,导致每种画风的模型太多,那么如何选择最…

数据结构(Java实现)-二叉树(下)

获取二叉树的高度 检测值为value的元素是否存在(前序遍历) 层序遍历 判断一棵树是不是完全二叉树 获取节点的路径 二叉树的最近公共祖先

c++的IO流

前言 很多编程语言都有自己的输入输出流,流是一种抽象的概念,为了方便我们使用各种输入输出设备从而抽象出来的概念。 目录 1.C语言的输入和输出 2.流的概念 3.CIO流 3.1C标准I/O流 3.2C文件I/O流 4.stringstream的简单介绍 1.C语言的输入和输出 在…

MIUI 欧版刷机教程(操作篇)

文章目录 0 前置条件1 下载ROM包2 确定刷机方式3 线刷教程4 卡刷教程使用系统更新使用 TWRP 问题汇总 0 前置条件 必须先解除手机的 bootloader 锁。详细教程参见官网:申请解锁小米手机 (miui.com)。 1 下载ROM包 在 MIUI EU 官方论坛(需要科学上网&a…

css-选择器、常见样式、标签分类

CSS CSS简介 层叠样式表(英文全称:Cascading Style Sheets)是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言。CSS不仅可以静态地修饰网页,还可…

呈现数据的精妙之道:选择合适的可视化方法

在当今数据时代,数据可视化已成为理解和传达信息的重要手段。然而,选择适合的数据可视化方法对于有效地呈现数据至关重要。不同的数据和目标需要不同的可视化方法,下面我们将探讨如何选择最佳的数据可视化方法来呈现数据。 1. 理解数据类型&a…

蓝蓝设计-UI设计公司作品-博晖创新原子吸收光谱仪软件交互及界面设计

博晖创新原子吸收光谱仪软件交互及界面设计 图标设计 | 交互设计 | 界面设计 博晖公司拥有强大的自主研发实力,建立了专业的研发团队,通过不断的技术创新,形成了分子诊断、免疫诊断、原子吸收、原子荧光及质谱五大技术平台,并成功…