第10章 树
树
树的定义与性质
无向树
- 无向树、森林的定义:
- 无向树的等价定义(或者性质):
任意非平凡树都至少有两片叶(使用握手定理和树的性质m=n-1可证)
生成树
生成树
- 定义:(注意树是生成子图)
- 生成树存在的充要条件:一个图存在生成树的充分必要条件是是连通的
- 求连通图中生成树的方法:
- 破圈法:每次删除回路中的一条边直到无回路。其删除的边的总数为m-n+1
- 避圈法:每次选取G中一条与已选取的边不构成回路的边。选取的边的总数为n—1
- 广度优先搜索算法:
使用广度优先搜索求生成树的例子:
最小生成树
最小生成树:
- 定义:
- 构造方法:
- Kruskal算法:避圈选小边
- Prim算法:无需避圈,选小邻边(选邻接点)
- Kruskal算法:避圈选小边
根树
根树的定义与分类
有向树:一个有向图,若略去所有有向边的方向所得到的无向图是一棵树,则这个有向图称为有向树
根树
- 定义:(平凡树不是根树)
- 画法:使用“倒置法”,可以省去全部箭头,不会发生误解,例:
有序树:如果在根树中规定了每一层上结点的次序,这样的根树称为有序树
k元树
- 定义:
- k元完全树中分支点与叶结点数目之间的关系:
在k元完全树中,若叶数为,分支点数为,则有.(可用握手定理和树的性质m=n-1证明)
根树的遍历
3种遍历方式:先序、中序、后序
根树转二元树:即构造兄弟孩子树
例如:(a,b,c对应转换过程)
森林转二元树:将每个树的根视作兄弟,然后运用“根树转二元树”的方法
例如:(a,b对应转换过程)
最优树与赫夫曼算法(哈夫曼算法)
即构造哈夫曼树
多用于解决的问题:识别不同频率的东西,使得时间最优/最少
前缀和前缀码:
最优树:
构造哈夫曼树:(权值均不同则哈夫曼树唯一,否则不唯一)
哈夫曼树构造例子:
根树的应用
波兰符号法与逆波兰符号法:
- 中序遍历算式树:中缀符号法
- 先序遍历算式树:前缀符号法(波兰符号法)
- 后序遍历算式树:后缀符号法(逆波兰符号法)
决策树:在决策树中,分支点是问题,分支是问题的选择,叶子是决策
关键道路法:
- 事件活动拓扑图:是有向无环图,其中顶点表示事件,边表示活动,活动进行的条件是事件已开始,事件开始的条件是该事件之前的活动均已完成
- 关键道路/PERT图/最长道路:完成所有任务的最关键(没有时间缓冲)路径(有一条或多条)
- 关键道路算法:计算每个事件的最早发生时间:,计算时得到的路径即关键路径
或者采用书上的做法:
寻找关键路径例子:
其中可见关键路径为
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
2021-03-12 计算机网络笔记(2)