Graph Algorithms(图算法)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhougb3/article/details/80518129
  1. (u,v)是有向图中的边,我们就称顶点v领接顶点u。

  2. 从顶点u到顶点v的路径是顶点序列<v0,v1,v2...vk>,其中v0 = v,vk=u。路径中的顶点是唯一的,则称路径是简单的。起点和终点一致则为一个环。如果所有的中间顶点都不相同,则称环是简单的。

  3. 如果图中的每一对顶点都邻接,则称图为完全图。树林是无圈图,树是连通无圈图。如果图是树,则边为顶点数减去一。

  4. 在计算机程序中,有两种表示图的标准方法。一种是矩阵,一种是邻接表(也可以存储有权图,可以定义一个Edge类)。
    这里写图片描述


prime算法(dijkstra算法类似)

n个元素分给p个进程,各自计算本进程内最短值发给P0,P0得到全部最小值后广播给各个进程。给最小值节点纳入最小生成树,更新其他节点的距离。重复操作。

全部顶点间最短路径

使用dijkstra算法

1. 源划分形式:一个进程执行一个单源最短路。进程数目过多性能不好。由并发带来的等效率函数为O(N*N*N)

2. 源并行形式:每个顶点分配p/n个进程,算法总共能用到的进程数目为n*n。

使用Floyd算法

  1. 串行算法:三层for循环,每次借助一个中间点来计算两个点间最小值。

  2. 并行算法:

    1. 二维块映射:每个进程根据Dk-1计算Dk。

    2. 流水线二维块映射:每个进程计算完Dk-1后就发送给同行同列相邻进程。其他进程会进行转发。本进程开始第k次迭代。

传递闭包
连通分量

1维块映射到各个进程
这里写图片描述


稀疏图算法

最大独立集(再加入任何一个节点则违反了)

串行算法:每次拿一个数到独立集中,删除和这个数邻接的所有数,直到为空。
并行算法:luby算法(给每个顶点一个随机值,每次拿随机值最小的节点并删除他和他的邻接节点,重复到为空)

单源最短路径

串行算法的时间复杂度是O(E*logn),E是更新次数,logn是更新时间。

并行算法可以将距离相等的值(安全顶点)一起拿出来更新,或者将不安全节点也更新,可以回退。

分布式内存形式:每个进程管几个节点,各自维护一个优先队列。包含源节点的先更新再传给其他节点。如果其他节点有了一个通往源点的路径(一般是该节点可以到达传来的节点)则将其加入优先队列。优先队列会每次得出一个最小值。如果传来的节点使得原来的路径变小了,则原来的节点要重新加入优先队列。
这里写图片描述
二维块映射:
这里写图片描述
二维循环映射:少了空闲的时间,但是多了通信的时间。
一维块映射:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/zhougb3/article/details/80518129
今日推荐