哈夫曼树(C++封装)
来源:互联网 发布:多元统计分析数据下载 编辑:程序博客网 时间:2024/05/17 09:21
一天一个算法,边回想算法细节,边捡回C++,试验性程序,留作记念。
哈夫曼树概念
哈夫曼(Huffman)树又称最优二叉树。它是n个带权叶子结点构成的二叉树中,带权路径长度WPL最小的二叉树。因为构造这种树的算法是最早由哈夫曼于1952年提出的,所以被称之为哈夫曼树。
二叉树的性质
二叉树中有五点性质非常重要,需要记住。
性质1:在二叉树的第 i 层上至多有2^(i-1)个结点
性质2:深度为k的二叉树至多有2^k-1个结点
性质3:对任何一颗二叉树T,如果其终端结点数为n0,度为2的结点数为n2,则n0=n2+1
性质4:具有n个结点的完全二叉树的深度为[log(n)]+1([x]表示不大于x的最大整数)
性质5:如果对一棵有n个结点的完全二叉树(其深度为[log(n)]+1)的结点按层序编号(从第1层到第[log(n)]+1层,每层从左到右),对任一结点i(1<=i<=n)有:
(1).如果i=1,则结点i是二叉树的根,无双亲;如果i>1,则其双亲是结点[i/2]
(2).如果2i>n,则结点i无左孩子(结点i为叶子结点);否则其左孩子是结点2i
(3).如果2i+1>n,则结点i无右孩子;否则其右孩子是结点2i+1
基本术语
结点的权
“权”就相当于“重要度”,我们形象的用一个具体的数字来表示,然后通过数字的大小来决定谁重要,谁不重要。
路径
树中从“一个结点”到“另一个结点”之间的分支。
路径长度
一个路径上的分支数量。
树的路径长度
从树的根节点到每个节点的路径长度之和。
节点的带权路径路径长度
其实也就是该节点到根结点的路径长度乘以该节点的权。
树的带权路径长度
树中各个叶节点的路径长度*该叶节点的权的和,常用WPL(Weight Path Length)表示。
构建方法
第一步: 我们将所有的节点都作为独根结点。
第二步: 我们将最小的C和A组建为一个新的二叉树,权值为左右结点之和。
第三步: 将上一步组建的新节点加入到剩下的节点中,排除上一步组建过的左右子树,我们选中B组建新的二叉树,然后取权值。
第四步: 同上。
哈夫曼树的结构
哈夫曼树的各种操作
类定义(头文件)
用法示例
- C#--封装
- 【C#】封装
- 模块的封装(一):C语言类的封装
- [C\C++]何谓封装
- 结构体封装(C语言)
- 小朋友学C++(7):封装
- 哈夫曼树(C++封装)
- c#dll封装虚拟机
- C中的封装?
- OOP之封装 【C#】
- OOP之封装 【C#】
- c语言数据封装
- [C#]DataGridView封装类
- SWIG封装C代码
- C语言封装dll
- objective-c 封装
- C语言实现封装
- C sharp中的“封装”
- state(转载)
- 关于PHP默认Expires- Thu, 19 Nov 1981...的故事
- jsp母版页组装
- 加速 SBT 下载依赖库的速度
- 友盟指数:一图看尽最新的手机市场格局
- 哈夫曼树(C++封装)
- 大牛Laruence眼中的价值
- Understanding the nature of ARM PC register
- 如何快速上手 IntelliJ IDEa
- 安装SyntaxHighlighter for Typecho
- 小小标签,强大功能——深藏不露的 input
- 搞不清楚NULL, "", '\0', '0', 0, "0"的程序猿(C系列)应该好好练习基本功
- 技术是最简单的
- autoInstall.bat apk批量安装