![离散数学复习:树的应用](/assets/imgs/bgs/(2).png)
离散数学复习:树的应用
大约 3 分钟
离散数学复习:树的应用
你妈的,终于快解放了
![好看的](/assets/imgs/bgs/(18).png)
表达式的(逆)波兰序记法
使用根树来表达一个计算表达式.
使用内点来表示表达式中的运算符,使用内点的左/右子树表示对应的运算分量.
使用前序遍历 / 后序遍历可以得到该表达式的前/后缀形式.
使用中序遍历可以得到中缀形式, 但不同的根树(不同的表达式)可能具有相同的中缀形式, 因此不使用.
- 前缀形式表达式的计算: 从右向左遍历表达式,遇到运算符就对运算符右边的两个运算对象进行计算.
- 后缀形式表达式的计算: 从左向右遍历表达式,遇到运算符就对运算符左边的两个运算对象进行计算.
二叉搜索树(略)
这么简单的东西自己看看得了
前缀码
前缀
如果符号串可以表示为符号串和(均可以为空串)的并置,则称为的一个前缀.
设是符号串的集合, 且对于任意, 若, 有互不为前缀, 则称为前缀码.
若中的任意串只含有符号, 则称为二元前缀码.
使用二叉树生成二元前缀码
生成方法
- 给边标号: 对于每个内点, 对其出边标号.左出边标, 右出边标.
- 给叶子编号: 从根节点到每个叶子节点存在唯一的通路; 构成该通路的边的标号依次并置(从根节点开始), 所得的串称为该树叶的编号.
给定一棵完全二叉树, 可以产生唯一的二元前缀码.
最优前缀码
问题: 使用二元前缀码 表示个不同的字母, 如果各个字母的使用频率不同,如何设计编码方案使得总传输量最小?
最优二叉树
若是二叉树,且的每个叶子节点均含有数值权重, 则该二叉树的权重可以表示为, 其中表示在树中的层数.
具有相同权序列的二叉树中权值最小的二叉树称为最优二叉树.
Huffman编码算法
- 输入: 正实数序列.
- 输出: 具有个树叶, 权序列为的最优二叉树.
- 算法过程:
- 将个树叶初始化为根权为的棵根树.
- 每次选择当前森林中两棵根权最小的树,以它们为左, 右子树构建一棵新的, 根权为两棵子树根权(根权为树的根节点的权重, 等于该根对应的子树的权值之和)之和的根树.
- 当森林中只剩下一棵根树时停止.
- 注意: 该算法形成的结果可能不唯一.