关键路径(AOE)
1.关键路径研究的问题是:(1)完成整项工程至少需要的时间 (2) 哪些活动是关键(即这些事件缩短可以使整个时间缩短)
2.活动为边,事件为点
3.某个事件vi的最早开始时间(以vi为尾的活动(边)的最早开始时间)和常理一样,是指在给vi做铺垫的前几个事件中 用的时间最长 的 事件都马不停蹄的做完后(其中用时短的活动肯定能做完)
4.vi的最迟开始时间,是在整个事件都按最早时间发生的
前提下(即汇点最早时间内完成),由vi之后的事件的最迟开始时间倒推得到的。注:其取其中的最小值是因为 vi最迟开始 -> 意味着vi后的活动的最迟开始 -> 你得保证所有的活动都得完成 -> 所以给该事件的最迟取(vi+1事件的最迟-活动时间)的最小值(否则有的活动完不成)
5.算法实现中涉及到两个栈,其一与拓扑排序中的作用一样(避免重复检测),其二是将一中出栈元素压入二栈中,以方便后者算每个事件的最迟开始时间。(逆拓扑)
最短路径
迪杰斯特拉(贪心算法): 按路径长度递增的次序产生最短路径
弗洛伊德(动态规划):
1.三重循环 k i j (1->N)
2.最外层为k,指明它是中间顶点序号不大于k的路径,由于是动规思想,你必须先将前k层算出,才能算k+1.
3.i j 循环构成一个二维数组,所以可以用矩阵表达该问题
3.i j 循环构成一个二维数组,所以可以用矩阵表达该问题
拓扑排序(AOV)
1.拓扑排序定义:某个事件的发生需要其他事件做铺垫,旨在找到一个事件发生的先后次序,使整个事件可以顺利进行。(例如某门课程的学习需要其他课程辅助)
2.拓扑排序方法:重复下面的步骤
(1)选一个没有前驱的顶点输出
(2)从图中删除该顶点和所有以它为尾的弧
3.其中算法中涉及到的栈原因是为了避免重复检测入度为零的点。
图的遍历
1.非连通图由连通图构成
2.连通图的深度优先遍历:先输出再放到栈里面类似于先序遍历。
3.连通图的广度优先遍历:运用队列
3.连通图的广度优先遍历:运用队列
二叉树的遍历
先序,中序,后序其实每次都遍历每个结点三次,区别在于每次访问结点的位置(三次遍历时)不一样,所以在递归遍历时,他们形式基本一样;在非递归遍历时,栈操作的后序遍历要多一步保存前驱结点的操作。(具体见书P167)
先序,中序,后序其实每次都遍历每个结点三次,区别在于每次访问结点的位置(三次遍历时)不一样,所以在递归遍历时,他们形式基本一样;在非递归遍历时,栈操作的后序遍历要多一步保存前驱结点的操作。(具体见书P167)