• 数据结构——图论


    =====================
    最小生成树:
    prime:
    一个集合U表示已加入最小生成树的点,集合E表示最小生成树的边:
    一开始,任选一个顶点加入集合U中,找到集合U中的顶点里权值最小的边,加入至E。将边中另一个顶点加入集合U中,重复上述过程,直到所有顶点加入至集合U中
    kruskal:
    集合U表示加入最小生成树的点,集合E表示最小生成树的边
    将所有边的权值从小到大排序,最小的边并且两个顶点属于不同的连通分量时,加入至E,顶点加入至U,直到所有的顶点加入至集合U中。
    =====================
    DAG:无环有向图
    实现对相同子式的共享,从而节省存储空间
    =====================
    AOV 顶点表示活动,弧表示活动之间的优先关系
    注:AOV网中不能出现回路
    =====================
    拓扑排序:
    从AOV网中选择一个没有前趋的顶点并且输出它
    从AOV网中删除该顶点,并且删除以该顶点为弧尾的弧
    结果:全部顶点被输出
    否则:AOV网中存在回路
    =====================
    AOE 顶点代表事件,有向边表示活动,边上的权值代表活动持续的时间
    源点:入度为0 汇点:出度为0
    性质:
    只有该顶点代表的事件结束后,以该顶点出发的活动才能开始
    只有在进入某顶点的各活动结束后,该顶点所代表的时间才能发生
    关键路径:由关键活动组成的从源点到汇点的路径
    关键活动:活动的最早发生时间=活动的最早结束时间
    1)事件最早发生时间ve[k]
    只有进入v[k]的所有活动<vj,vk>,v[k]代表的事件才能发生。而活动<vj,vk>最早结束时间=ve[j]+value<vj,vk>.
    所以:ve[k]=max(ve[j]+value<vj,vk>),前提是<vj,vk>存在,1<=k<=n-1
    2)事件最迟发生时间vl[k]
    <vk,vj>代表从vk出发的活动,为了不拖延整个工期,vk发生的最迟时间必须保证不推迟从vk出发的所有活动。
    所以vl[k]=min(vl[j]-<vk,vj>),前提是<vk,vj>存在,1<=k<=n-1(逆拓扑排序)
    3) 活动ai最早发生时间ee[i]
    活动ai由<vj,vk>表示,只有事件vj发生了,活动ai才能开始。活动ai最早发生时间等于事件vj最早发生时间。
    所以ee[i]=ve[j].
    4) 活动ai最迟发生时间el[i]
    活动ai由<vj,vk>表示,只要保证事件vk最迟发生时间不拖后。
    所以el[i]=vl[j]-value<vk,vj>.
    =====================
    最短路:
    Dijkstra:
    单源点求最短路径:
    将v0作为源点,集合S是已经确定最短路的顶点,将与v0相关联最小权值的边的顶点加入集合S中,更新S中的点与剩余的点的最短路径,再找与集合S中相关联的权值最小的边,将另一个的顶点加入至S中,更新S中的点与剩余的点的最短路径,重复上述过程,直至所有顶点加入至S中
    每一对顶点之间的最短路径:
    每次以一个顶点为源点重复执行Dijkstra算法n次求得
    floyd:
    if(d[i][k]+d[k][j]<d[i][j]) d[i][j]=d[i][k]+d[k][j];

  • 相关阅读:
    《程序员修炼之道:从小工到专家》阅读笔记02
    第二阶段团队冲刺10
    第二阶段团队冲刺09
    周总结
    第二阶段团队冲刺08
    第二阶段团队冲刺07
    小A和小B和幽灵追两人(双向BFS)
    C. 真假亚瑟王(暴力)
    小A的柱状图(栈的应用,找左右边界)
    小A买彩票
  • 原文地址:https://www.cnblogs.com/LLLAIH/p/10037788.html
Copyright © 2020-2023  润新知