-
优化算法小结
优化算法小结
最优二叉树问题
Huffman算法
- 算法流程:
- 找权最小的两个结点s1、s2作为左右孩子;
- 将s3=s1+s2加入权重集合中,重新挑选权最小的两个;
- 重复执行即可。
- 重点:
最小生成树问题
Prim算法
- 算法流程:
- 建立点集,加入起始点;
- 从与起始点相连的边中选权最小的结点加入点集;
- 循环执行:将所有与点集中的点有联线的未访问点中取权最小的加入点集;
- 重点:是所有点集点与外边点联线中权最小的。
Kruskal算法
- 算法流程:
- 在所有边中,依次添加权值最小的边;
- 如此重复,直至加上 n-1 条边为止。
- 重点:无回路,且所有边中权最小才能加入。
最短路径问题
Dijkstra算法
- 基本思想:求出源点到每一个点的最短路径;
- 算法流程:
- 记录所有与源点1相连的点及其路径权;
- 取权最小的点2加入,此时最短即二者连线;
- 记录所有与点2相连线的权,同时修改之前记录的权,看是从点1直连近还是从点2走更近;
- 同样取最小的加入,并记此时到点3的权为源点到点3最短距离;
- 以此类推,逐个加入;
- 重点:
- 动态修改权重;
- 在所有权中取最小的,而非只看与当前点的连线;
- 最终记录里应该记录修改后的前驱结点;
Floyd算法
- 基本思想:求得v和j之间的最短路径,通过尝试在vj之间加入别的点;
- 算法流程:
- 从 vi 到 vj 的所有可能存在的路径中,选出一条长度最短的路径。
- vi 到 vj的最短路径应是下述这些路径中长度最小者:
- 若<vi,vj>存在,则存在路径{vi,vj};//路径中不含其它顶点
- 若<vi,v1>,<v1,vj>存在,则存在路径{vi,v1,vj};//路径中所含顶点序号不大于1
- 若{vi,…,v2}, {v2,…,vj}存在,则存在一条路径{vi, …, v2, …vj};//路径中所含顶点序号不大于2
- 即尝试v到j的所有可能路径并选择权最小的;
关键路径问题
求关键活动
- 基本思想:操作过程类似Dijkstra算法,但是不同的是记录的是源点到每一个点权重最大的路径;
- 算法流程
- 第一阶段略,参考Dijkstra算法,记录源点到每一个点权重最大的情况,记作每个节点的ve,源点记0;
- 第二阶段:
- 取第一阶段中权最大的点作为汇点;
- 查找每一个点到汇点的路径最大权重情况,并用第一阶段的权减去最大权重;
- 计算结果记作每个节点的vl,源点记0,汇点的vl=ve;
- 第三阶段:
- 将每条边列表,记录权值;
- 查表记录e,e即每条边的起点的ve;
- 查表计算l,l为每条边终点的vl-这条边的权;
- 计算l-e,为零的边即关键活动。
-
相关阅读:
git 重命名文件夹
关于IDEA的Incoming窗口的问题
mysql替换字段中部分字符串
IDEA项目改包名改项目名并启动【我】
IDEA在自带市场安装黑色主题及调整包管理器字体大小【我】
解决Invalid bound statement (not found)(Mybatis的Mapper绑定问题)
java中Date日期类型的大小比较
MyBatis-Plus Wrapper条件构造器查询大全
idea黑色主题
python3安装mysqlclient,解决django使用pymysql报错的问题
-
原文地址:https://www.cnblogs.com/fzlzc/p/11097265.html
Copyright © 2020-2023
润新知