最小生成树
生成树 连通图包含全部顶点的有效连通子图
性质
1.不一定唯一
最小生成树可能唯一可能不唯一,当所有边的权重都不一样的时候最小生成树一定唯一,如果图只有结点数减一条边时一定唯一。
算法思想
prim
先加入顶点A,找出A与其他为加入顶点边最短的边
同理找出顶点A和顶点C与为加入顶点之间最短的边
同上,依次比遍历完所有的顶点
prim 算法的实现
算法实现过程(此处有错误)
KRUSKAL
kruskal代码实现
最短路径
两个顶点之间带权路径长度最短的路劲为最短路劲
Dijkstra
算法描述
Dijkstra代码实现
Floyd
Floyd代码实现
Floyd的时间复杂度是V3看似比Dijkstra好大其实并不一定,因为Floyd算出了所有顶点之间的最短距离,如果要算出所有顶点之间的最短距离,floyd其实和dijkstra是一样的甚至更快。
拓扑排序
表示一定的传递关系
有向无环图(DAJ)
AOV网
要求
拓扑排序需要要求无环不然就会出现所有顶点都有入度的情况
拓扑排序的结果不一定唯一
代码实现
关键路径
AOE网
事件最早发生时间
结点需要在所有入边都完成了之后才能开始,最早发生时间要取最大边,从原点开始计算相邻结点的最早发生时间,每个结点的最早发生时间就是活动上的时间加上上一个结点的最早发生时间的最大值,最早发生时间决定了工程的总时间
事件最迟发生时间
从汇点开始,每个结点的出边加上上一节点的最迟发生时间取最小值,汇点的最迟发生时间就等于汇点的最早发生时间,最迟发生时间决定了工程在不改变总时间的情况下最多能推迟的时间。
活动的最早开始时间
活动的最早开始时间,就是其开始事件的最早开始时间
活动的最迟开始时间
活动的最迟开始时间就是其结束事件的最迟开始时间
活动的差额
差额为0的活动就是关键活动,关键活动组成的路径就是关键路径,关键路径决定了工程的总时间,如果想要缩短工程的总时间的话据需要缩短关键路径上的活动时间。
关键路径计算
先计算事件的最早发生时间,然后通过事件的最早发生事件计算出最早发生活动时间,计算出事件的最迟发生事件,然后通过事件的最迟发生事件计算出最迟发生活动时间,用活动最早发生时间减去活动最迟发生时间,取这个差值为0的活动,为关键路径
当有多个关键路径的时候,应该缩短所有关键路径都出现了的活动的时间来缩短整个工程时间。
真题
2012:若矩阵中主对角线以下的元素均为0,则关于该图拓扑排序的结论是,存在可能不唯一。