当前位置: 首页 > news >正文

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

构建哈夫曼树及编码

第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个叶子结点的权值,可以构造出不同的二叉树,它们的带权路径长度可能不相同,如下:

http://www.lryc.cn/news/141037.html

相关文章:

  • 创建本地镜像
  • 网络编程套接字(2): 简单的UDP网络程序
  • Android Mvvm设计模式的详解与实战教程
  • 软考A计划-系统集成项目管理工程师-小抄手册(共25章节)-下
  • 渗透测试是什么?怎么做?
  • 【软件安装】Python安装详细教程(附安装包)
  • 微信小程序的form表单提交
  • WOFOST模型与PCSE模型应用
  • 5-W806-RC522-SPI
  • Python实现自动登录+获取数据
  • yolov8热力图可视化
  • 【SpringBoot】第一篇:redis使用
  • Springboot profile多环境配置
  • (1)进程与线程区别
  • 学习JAVA打卡第四十天
  • 【跟小嘉学 Rust 编程】十四、关于 Cargo 和 Crates.io
  • 防关联指纹浏览器:高效地管理你的Facebook账户
  • 前端学习记录~2023.8.15~JavaScript重难点实例精讲~第7章 ES6(1)
  • WebSocket详解以及应用
  • 如何评估开源项目的活跃度和可持续性?
  • 远程Linux/ubuntu服务器后台不间断运行py文件/sh脚本
  • 记录一个诡异的bug
  • Xamarin.Android中的Fragment
  • portainer初体验
  • 4G数传方案(合宙cat1模块)
  • ElasticSearch - 海量数据索引拆分的一些思考
  • 【SA8295P 源码分析】83 - SA8295P HQNX + Android 完整源代码下载方法介绍
  • 【设计模式--原型模式(Prototype Pattern)
  • 初识 Redis
  • php灵异事件,啥都没干数据变了?