图论

合集下载

图论知识点

图论知识点

图论知识点摘要:图论是数学的一个分支,它研究图的性质和应用。

图由节点(或顶点)和连接这些节点的边组成。

本文将概述图论的基本概念、类型、算法以及在各种领域的应用。

1. 基本概念1.1 节点和边图由一组节点(V)和一组边(E)组成,每条边连接两个节点。

边可以是有向的(指向一个方向)或无向的(双向连接)。

1.2 路径和环路径是节点的序列,其中每对连续节点由边连接。

环是一条起点和终点相同的路径。

1.3 度数节点的度数是与该节点相连的边的数量。

对于有向图,分为入度和出度。

1.4 子图子图是原图的一部分,包含原图的一些节点和连接这些节点的边。

2. 图的类型2.1 无向图和有向图无向图的边没有方向,有向图的每条边都有一个方向。

2.2 简单图和多重图简单图是没有多重边或自环的图。

多重图中,可以有多条边连接同一对节点。

2.3 连通图和非连通图在无向图中,如果从任意节点都可以到达其他所有节点,则称该图为连通的。

有向图的连通性称为强连通性。

2.4 树树是一种特殊的连通图,其中任意两个节点之间有且仅有一条路径。

3. 图的算法3.1 最短路径算法如Dijkstra算法和Bellman-Ford算法,用于在加权图中找到从单个源点到所有其他节点的最短路径。

3.2 最大流最小割定理Ford-Fulkerson算法用于解决网络流中的最大流问题。

3.3 匹配问题如匈牙利算法,用于解决二分图中的匹配问题。

4. 应用4.1 网络科学图论在网络科学中有广泛应用,如社交网络分析、互联网结构研究等。

4.2 运筹学在运筹学中,图论用于解决物流、交通网络优化等问题。

4.3 生物信息学在生物信息学中,图论用于分析蛋白质相互作用网络、基因调控网络等。

5. 结论图论是数学中一个非常重要和广泛应用的领域。

它不仅在理论上有着深刻的内涵,而且在实际应用中也发挥着关键作用。

随着科技的发展,图论在新的领域中的应用将会不断涌现。

本文提供了图论的基础知识点,包括概念、图的类型、算法和应用。

图论期末总结

图论期末总结

图论期末总结一、引言图论是一门研究图和网络结构的数学学科。

图论不仅在数学领域中有着广泛的应用,而且在计算机科学、物理学、化学、生物学等交叉学科中也扮演着重要的角色。

在本学期的图论课程中,我系统地学习了图论的基本概念、算法和应用,对图论的知识有了更深入的理解和认识。

在本文中,我将对本学期学习的图论知识进行总结和归纳。

二、基本概念1. 图的定义与表示:图是由一组顶点和一组边组成的数学模型。

在图中,顶点表示图中的实体,边表示顶点之间的关系。

图可以用邻接矩阵或邻接表来表示。

2. 图的类型:图可以分为有向图和无向图、加权图和非加权图、简单图和多重图等。

有向图的边具有方向性,无向图的边没有方向性。

加权图的边带有权重,非加权图的边没有权重。

简单图没有自环和平行边,多重图可以有自环和平行边。

3. 图的基本术语:顶点的度数是指与该顶点相关联的边的数量。

入度是有向图中指向该顶点的边的数量,出度是有向图中从该顶点发出的边的数量。

路径是由边连接的一系列顶点,路径的长度是指路径上边的数量。

连通图是指从一个顶点到任意其他顶点都存在路径。

三、图的算法1. 图的遍历算法:深度优先搜索(DFS)和广度优先搜索(BFS)是两种常用的图遍历算法。

DFS从一个顶点出发,探索所有可能的路径,直到无法继续深入为止。

BFS从一个顶点开始,逐层探索图中的其他顶点,直到所有顶点都被访问过为止。

2. 最短路径算法:最短路径算法用来计算图中两个顶点之间的最短路径。

迪杰斯特拉算法和弗洛伊德算法是两种常用的最短路径算法。

迪杰斯特拉算法适用于没有负权边的图,通过每次选择到某个顶点的最短路径来逐步扩展最短路径树。

弗洛伊德算法适用于有负权边的图,通过每次更新两个顶点之间的最短路径来逐步求解最短路径。

3. 最小生成树算法:最小生成树算法用于找到连接图中所有顶点的最小代价树。

克鲁斯卡尔算法和普林姆算法是两种常用的最小生成树算法。

克鲁斯卡尔算法通过每次选择代价最小的边来逐步扩展最小生成树。

图论课后习题答案

图论课后习题答案

图论课后习题答案图论是数学中的一个分支,主要研究图的结构和性质。

图论的课后习题通常包括证明题、计算题和应用题。

下面给出一些典型的图论课后习题答案:1. 证明题:证明一个图是连通的当且仅当它的任意两个顶点都存在一条路径相连。

答案:首先定义连通图的概念:一个图是连通的,如果对于任意两个顶点,都存在一条路径将它们连接起来。

接下来,我们证明两个方向:- 如果一个图是连通的,那么对于任意两个顶点\( u \)和\( v \),根据定义,必然存在一条路径\( P \)将它们连接起来。

- 反之,如果对于任意两个顶点\( u \)和\( v \),都存在一条路径将它们连接起来,那么我们可以构造一个从任意顶点\( u \)出发,访问图中所有顶点的路径,这表明图是连通的。

2. 计算题:给定一个有\( n \)个顶点的完全图,计算它的边数。

答案:在完全图中,每个顶点都与其他所有顶点相连。

因此,对于一个顶点,它将与\( n-1 \)个其他顶点相连。

但是,每条边被计算了两次(因为它连接了两个顶点),所以边数应该是\( \frac{n(n-1)}{2} \)。

3. 应用题:在一个社交网络中,每个用户可以与其他人建立联系。

如果一个用户与至少一半的用户建立了联系,那么这个社交网络是连通的吗?答案:是的,这个社交网络是连通的。

假设社交网络中有\( n \)个用户,如果一个用户与至少\( \lceil \frac{n}{2} \rceil \)个用户建立了联系,那么我们可以构造一条从任意用户\( u \)到这个中心用户的路径。

由于中心用户与至少一半的用户建立了联系,我们可以继续通过这些联系到达其他用户,从而证明社交网络是连通的。

4. 证明题:证明在任何图中,边数至少是顶点数减一。

答案:考虑一个图的生成树,它是一个最小的连通子图,包含图中的所有顶点,并且没有环。

在生成树中,边数等于顶点数减一。

由于任何图都至少包含一个生成树,因此原图的边数至少与生成树的边数相同,即至少是顶点数减一。

图论导引参考答案

图论导引参考答案

图论导引参考答案图论导引参考答案图论是数学中的一个分支,研究的是图的性质和图之间的关系。

图由节点和边组成,节点表示对象,边表示对象之间的连接关系。

图论在计算机科学、网络分析、社交网络等领域有着广泛的应用。

本文将介绍图论的基本概念和常见算法,并提供一些参考答案来帮助读者更好地理解和应用图论。

一、图的基本概念1.1 有向图和无向图图可以分为有向图和无向图两种类型。

有向图中,边有方向,表示节点之间的单向关系;而无向图中,边没有方向,表示节点之间的双向关系。

1.2 路径和环路径是指图中一系列节点和边的连续序列,路径的长度为路径中边的数量。

如果路径的起点和终点相同,则称之为环。

1.3 连通图和连通分量在无向图中,如果任意两个节点之间都存在路径,则称该图为连通图。

连通图中的极大连通子图称为连通分量。

1.4 强连通图和强连通分量在有向图中,如果任意两个节点之间都存在路径,则称该图为强连通图。

强连通图中的极大强连通子图称为强连通分量。

二、图的存储方式2.1 邻接矩阵邻接矩阵是一种常见的图的存储方式,使用一个二维矩阵来表示图中节点之间的连接关系。

矩阵的行和列分别表示节点,矩阵中的元素表示节点之间是否存在边。

2.2 邻接表邻接表是另一种常见的图的存储方式,使用一个数组和链表的结构来表示图中节点之间的连接关系。

数组中的每个元素表示一个节点,链表中的每个节点表示与该节点相连的边。

三、常见图算法3.1 深度优先搜索(DFS)深度优先搜索是一种用于遍历图的算法。

从图中的一个节点开始,沿着一条路径一直深入直到无法继续为止,然后回溯到上一个节点,继续深入其他路径。

DFS可以用于判断图的连通性、寻找路径等问题。

3.2 广度优先搜索(BFS)广度优先搜索也是一种用于遍历图的算法。

从图中的一个节点开始,先访问其所有相邻节点,然后再依次访问这些节点的相邻节点,以此类推。

BFS可以用于计算最短路径、寻找连通分量等问题。

3.3 最小生成树算法最小生成树算法用于求解一个连通图的最小生成树,即包含图中所有节点且边的权重之和最小的子图。

图论毕业论文

图论毕业论文

图论毕业论文图论是数学的一个分支,主要研究图的性质和结构。

它对于解决各种实际问题具有重要的意义,如交通网络优化、电子芯片设计等。

本文将就图论的概念、基本性质以及其在实际问题中的应用等方面进行论述。

首先,图论是研究图的性质和结构的数学学科。

图是由节点和边组成的数学结构,可以用来描述各种实际问题,如交通网络、社交关系等。

图由节点和边构成,节点表示图中的元素或对象,边表示节点之间的关系。

图可以分为有向图和无向图,有向图中的边有方向性,无向图中的边没有方向性。

图的回路是指从一个节点出发,沿着边走过一系列节点之后再回到起始节点的路径。

图的连通性是指图中的任意两个节点之间存在一条路径。

其次,图论具有一些基本性质。

首先是图的度数。

图的度数是指图中一个节点与其相邻节点的边的个数。

度数为奇数的节点称为奇节点,度数为偶数的节点称为偶节点。

其次是图的邻接矩阵和关联矩阵。

邻接矩阵是一个n×n的矩阵,其中n是图的节点数,矩阵元素a_ij表示节点i与节点j之间是否存在边。

关联矩阵是一个n×m的矩阵,其中n是图的节点数,m是图的边数,矩阵元素b_ij表示节点i是否与边j相关联。

最后是图的连通性。

图的连通性决定了图中是否存在从一个节点到达另一个节点的路径。

如果图中的任意两个节点之间都存在路径,则图是连通的;否则,图是非连通的。

最后,图论在实际问题中有广泛的应用。

首先是交通网络优化。

图论可以用来优化交通网络中的路径规划和交通流量分析等问题,从而提高交通的效率和安全性。

其次是电子芯片设计。

图论可以用来分析电子芯片中各个元件之间的连接关系,从而提高芯片的性能和可靠性。

此外,图论还可以用来解决诸如社交网络分析、物流规划等实际问题。

综上所述,图论是数学的一个分支,主要研究图的性质和结构。

它对于解决各种实际问题具有重要的意义。

未来,随着科学技术的不断发展,图论在实际问题中的应用将会越来越广泛。

因此,对图论的进一步研究和应用具有重要的意义。

图论基础知识的名词解释

图论基础知识的名词解释

图论基础知识的名词解释图论是数学的一个分支,研究图的属性和关系。

图是由节点和节点之间的边组成的抽象模型,被广泛应用于计算机科学、网络分析、医学和社会科学等领域。

下面,我们将解释一些图论中常用的基础概念和术语。

1. 图 (Graph)图是图论研究的基本对象,由一组节点和连接这些节点的边组成。

节点也被称为顶点 (Vertex),边则是节点之间的连接线。

图可以分为有向图 (Directed Graph) 和无向图 (Undirected Graph) 两种类型。

在有向图中,边有方向,从一个节点指向另一个节点;而在无向图中,边没有方向,节点之间的关系是双向的。

2. 顶点度数 (Degree of a Vertex)顶点度数指的是一个顶点与其他顶点相邻的边的数量。

在无向图中,顶点度数即与该顶点相连的边的数量;在有向图中,则分为入度 (In-degree) 和出度 (Out-degree)。

入度表示指向该节点的边的数量,而出度表示从该节点出发的边的数量。

3. 路径 (Path)路径指的是通过边连接的一系列节点,形成的顺序序列。

路径的长度是指路径上边的数量。

最短路径 (Shortest Path) 是指连接两个节点的最短长度的路径。

最短路径算法被广泛应用于计算机网络中的路由选择和地图导航系统中的路径规划。

4. 连通图 (Connected Graph)连通图是指图中的任意两个节点之间都存在路径的图。

如果一个图不是连通图,那么它可以被分割为多个连通分量 (Connected Component)。

连通图在社交网络分析和传感器网络等领域中具有重要的应用。

5. 完全图 (Complete Graph)完全图是指任意两个节点之间都存在边的图。

在完全图中,每对节点之间都有一条边相连。

n个节点的完全图有n(n-1)/2条边。

完全图经常用于描述需要互相交流的问题,如计算机网络中的通信。

6. 树 (Tree)树是一种无环连通图,其中任意两个节点之间有且仅有一条路径相连。

数学中的图论及其应用

数学中的图论及其应用

数学中的图论及其应用图论是一门数学基础理论,用来描述事物之间的关联。

图论主要研究节点之间的连接关系和路径问题。

它的研究对象是图,图是由节点和边组成的,边表示节点之间的连接关系,节点表示事物。

图论是一种十分实用的数学工具,它是计算机科学、物理学、化学、生物学、管理学等领域的重要工具,也是人工智能和网络科学等领域的基础。

一、图论的基本概念1.1 图图是由节点和边组成的,表示事物之间的关系。

节点是图中的基本元素,用点或圆圈表示;边是连接节点的元素,用线或箭头表示。

1.2 有向图和无向图有向图是指边有方向的图,每一条边用有向箭头表示;无向图是指边没有方向的图,每一条边用线表示。

1.3 节点的度和邻居节点节点的度是指与节点相连的边的数量,具有相同度的节点称为同阶节点;邻居节点是指与节点相连的节点。

1.4 遍历和路径遍历是指从起点出发访问图中所有节点的过程;路径是指跨越边连接的节点序列,路径长是指路径中边的数量。

二、图论的应用2.1 网络科学网络科学是研究节点和边之间的关系,以及节点和边之间的动态演化的学科。

网络科学中的图模型是节点和边的结合体,其应用包括社会网络、生物网络和物理网络等。

社会网络是指人们之间的社交网络,它描述了人与人之间的关系。

社交网络可以用图模型表示,节点表示人,边表示人与人之间的互动关系,例如朋友关系、家庭关系等。

生物网络是指由生物分子构成的网络,例如蛋白质相互作用网络、代谢网络等。

在生物网络中,节点可以表示蛋白质或基因,边可以表示蛋白质或基因之间相互作用的联系,这些联系可以进一步探究生物进化和疾病发生的机理。

物理网络是指由物理粒子构成的网络,例如网络电子、量子态等。

在物理网络中,节点可以表示量子比特或电子,边可以表示色散力或超导电性等物理现象。

2.2 计算机科学图论在计算机科学中的应用非常广泛,例如数据结构、算法设计和网络安全等方面。

图论在计算机科学中的经典应用包括最短路径算法、最小生成树算法等。

图论

图论

四色问题又称四色猜想,是世界近代三大数学难题之一。
四色猜想的提出来自英国。1852年,毕业于伦敦大学的弗 南西斯.格思里来到一家科研单位搞地图着色工作时,发现 了一种有趣的现象:“看来,每幅地图都可以用四种颜色 着色,使得有共同边界的国家都被着上不同的颜色。”
1878~1880年两年间,著名律师兼数学家肯普和泰勒两人 分别提交了证明四色猜想的论文,宣布证明了四色定理。 但后来数学家赫伍德以自己的精确计算指出肯普的证明是 错误的。不久,泰勒的证明也被人们否定了。
1976年,美国数学家阿佩尔与哈肯在美国伊利诺斯大学的 两台不同的电子计算机上,用了1200个小时,作了100亿 判断,终于完成了四色定理的证明。不过不少数学家并不 满足于计算机取得的成就,他们认为应该有一种简捷明快 的书面证明方法。
在拓扑学的发展历史中,还有一个著名而且重要的关于多 面体的定理也和欧拉有关。这个定理内容是:如果一个凸 多面体的顶点数是v、棱数是e、面数是f,那么它们总有 这样的关系:f+v-e=2。 根据多面体的欧拉定理,可以得出这样一个有趣的事实: 只存在五种正多面体。它们是正四面体、正六面体、正八 面体、正十二面体、正二十面体。
1859年,英国数学家哈密顿发明了一种游戏:用一个规则 的实心十二面体,它的20个顶点标出世界著名的20个城市, 要求游戏者找一条沿着各边通过每个顶点刚好一次的闭回 路,即「绕行世界」。 用图论的语言来说,游戏的目的是在十二面体的图中找出 一个生成圈。这个问题后来就叫做哈密顿问题。由於运筹 学、计算机科学和编码理论中的很多问题都可以化为哈密 顿问题,从而引起广泛的注意和研究。 在图论的历史中,还有一个最著名的问题——四色猜想。 这个猜想说,在一个平面或球面上的任何地图能够只用四 种颜色来着色,使得没有两个相邻的国家有相同的颜色。 每个国家必须由一个单连通域构成,而两个共点。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

3 图论图论在计算机科学、信息科学、人工智能、网络理论、系统工程、控制论、运筹学和经济管理等领域有着广泛的应用。

但很多图论问题虽易表达,却难以求解,其中有相当多的图论问题均属NP完全问题。

本章主要介绍工程实用简单图论问题的并行算法及其MPI编程实现,包括传递闭包、连通分量、最短路径和最小生成树等。

1.1 传递闭包设A是一个含N个顶点的有向图G的布尔邻接矩阵(Boolean Adjacent Matrix),即元素a ij=1当且仅当从顶点i到j有一条有向边。

所谓A的传递闭包(Transitive Closure),记为A+,是一个N×N的布尔矩阵,其元素b ij=1当且仅当:①i=j;或②从i出发存在有向路径到j,又称为顶点i到j可达。

从G的布尔邻接矩阵A求出G的传递闭包,就称为传递闭包问题。

传递闭包问题有很强的应用背景,在科学计算中广泛存在。

传递闭包问题的经典解法之一就是利用布尔矩阵的乘法来求解。

本节将把这一算法分别在串行和并行机上实现。

1.1.1 传递闭包串行算法利用布尔矩阵相乘求解传递闭包问题的原理为:对于布尔矩阵(A+I)k中的任一元素b ij,b ij=1表示从i到j存在长度小于等于k的可达路径,否则,b ij=0。

显然对于k=1,(A+I)1中b ij=1当且仅当从i到j路径长度为0(i=j)或为1(从i到j存在有向边);(A+I)2中,b ij=1当且仅当从i到j路径长度小于等于2;((A+I)2) 2中,b ij=1当且仅当从i到j路径长度小于等于4,等等。

因为任意两点间如果存在可达路径,长度最多为N-1,所以k≥N-1时,(A+I)k 就是所求的传递闭包A+。

于是(A+I)矩阵的㏒N次自乘之后所得的矩阵就是所求的传递闭包。

根据前面的叙述,很自然的有下面的传递闭包串行算法15.1,其时间复杂度为O(N3㏒N)。

算法15.1传递闭包串行算法输入:图G的布尔邻接矩阵A输出:A的传递闭包Mprocedure closureBegin(1)读入矩阵A/* 以下作A = A+I的运算*/(2)for i=0 to N-1 doa(i, i) = 1endfor/* 以下是A矩阵的㏒N次自乘,结果放入M矩阵;每次乘后,结果写回A矩阵*/(3)for k=1 to㏒N do(3.1)for i=0 to N-1 dofor j=0 to N-1 dos=0while (s<N) and (a(i,s)=0 or a(s,j)=0) dos = s+1endwhileif s<N then m(i,j)=1 else m(i,j)=0endforendfor/* 计算结果从M写回A */(3.2)for i=0 to N-1 dofor j=0 to N-1 doa(i, j) = m(i, j)endforendforendforEnd1.1.2 传递闭包并行算法本小节将把上一小节里的算法并行化。

在图论问题的并行化求解中,经常使用将N个顶点(或连通分量)平均分配给p个处理器并行处理的基本思想。

其中每个处理器分配到n 个顶点,即n=N/p。

无法整除时,一般的策略是在尽量均分的前提下,给最后一个处理器分配较少的顶点。

为了使算法简明,在本章中,仅在算法的MPI实现中才考虑不能整除的情况。

在以后的几节中,N、p、n都具有上面约定的意义,不再多说。

为了并行处理,这里将矩阵(A+I)进行划分,分别交给p个处理器。

在每次矩阵乘法的计算中,将N×N的结果矩阵(A+I)2均匀划分成p×p个子块,每块大小为n×n。

处理器i 负责计算位于第i子块行上的p个子块。

对整个子块行的计算由p次循环完成,每次计算一个子块。

每个处理器为了计算一个n×n大小的子块,需要用到源矩阵(A+I)中对应的连续n 行(局部数据a)和连续n列的数据(局部数据b)。

计算完成后,各处理器循环交换局部数据b,就可以进行下一个子块的计算了。

于是,总体算法由2层循环构成,外层是矩阵M=A+I的㏒N次自乘,每次首先完成矩阵M的一次自乘,然后将结果写回M;内层是p个子块的计算,每次首先完成各自独立的计算,然后处理器间循环交换局部数据b。

算法运行期间,矩阵M的数据作为全局数据由处理器0维护。

根据以上思想,并行算法描述见下面的算法15.2,使用了p个处理器,其时间复杂度为O(N3/p㏒N)。

其中myid是处理器编号,下同。

算法15.2传递闭包并行算法输入:图G的布尔邻接矩阵A输出:A的传递闭包Mprocedure closure-parallelBegin/* 由处理器0读入矩阵A到M中,并进行M=M+I运算对应源程序中readmatrix()函数*/(1)if myid=0 then(1.1) 读入矩阵A,放入M中(1.2) for i=0 to N-1 dom(i,i)=1endforendif(2)各处理器变量初始化/* 以下是主循环,矩阵M的㏒N次自乘*/(3)for i=1 to㏒N par_do/* 以下向各处理器发送对应子块行和列数据对应源程序中sendmatrix()函数*/(3.1)for j=1 to p-1 do(ⅰ) 处理器0发送第j个子块行的数据给处理器j,成为j的局部数据a(ⅱ) 处理器0发送第j个子块列的数据给处理器j,成为j的局部数据bendfor/* 以下是各处理器接收接收和初始化局部数据a和b对应源程序中getmatrix()函数*/(3.2)处理器0更新自己的局部数据a和b(3.3)处理器1到p-1从处理器0接受数据,作为局部数据a和b/* 以下是乘法运算过程,对应源程序中paramul()函数*/(3.4)for j=0 to p-1 do(ⅰ) 处理器k计算结果矩阵的子块(k, ((k+j) mod p))(ⅱ) 各处理器将数据b发送给前一个处理器(ⅲ) 各处理器从后一个处理器接收数据bendfor/* 以下是各处理器将局部计算结果写回M数组对应源程序中writeback()函数*/(3.5)if myid=0 then(ⅰ) 计算结果直接写入矩阵M(ⅱ) 接受其它处理器发送来的计算结果并写入Melse发送计算结果的myid子块行数据给处理器0endifendforEndMPI源程序请参见所附光盘。

1.2 连通分量图G的一个连通分量(Connected Component)是G的一个最大连通子图,该子图中每对顶点间均有一条路径。

根据图G,如何找出其所有连通分量的问题称为连通分量问题。

解决该问题常用的方法有3种:①使用某种形式的图的搜索技术;②通过图的布尔邻接矩阵计算传递闭包;③顶点倒塌算法。

本节将介绍如何在并行环境下实现顶点倒塌算法。

1.2.1 顶点倒塌法算法原理描述顶点倒塌(Vertex Collapse)算法中,一开始图中的N个顶点看作N个孤立的超顶点(Super Vertex),算法运行中,有边连通的超顶点相继合并,直到形成最后的整个连通分量。

每个顶点属于且仅属于一个超顶点,超顶点中标号最小者称为该超顶点的根。

该算法的流程由一系列循环组成。

每次循环分为三步:①发现每个顶点的最小标号邻接超顶点;②把每个超顶点的根连到最小标号邻接超顶点的根上;③所有在第2步连接在一起的超顶点倒塌合并成为一个较大的超顶点。

图G的顶点总数为N,因为超顶点的个数每次循环后至少减少一半,所以把每个连通分量倒塌成单个超顶点至多㏒N次循环即可。

顶点i所属的超顶点的根记为D(i),则一开始时有D(i)=i,算法结束后,所有处于同一连通分量中的顶点具有相同的D(i)。

1.2.2 连通分量并行算法算法中为顶点设置数组变量D和C,其中D(i)为顶点i所在的超顶点号,C(i)为和顶点i或超顶点i相连的最小超顶点号等,根据程序运行的阶段不同,意义也有变化。

算法的主循环由5个步骤组成:①各处理器并行为每个顶点找出对应的C(i);②各处理器并行为每个超顶点找出最小邻接超顶点,编号放入C(i)中;③修改所有D(i)=C(i);④修改所有C(i)=C(C(i)),运行㏒N次;⑤修改所有D(i)为C(i)和D(C(i))中较小者。

其中最后3步对应意义为超顶点的合并。

顶点倒塌算法是专为并行程序设计的,多个顶点的处理具有很强的独立性,很适合分配给多个处理器并行处理。

这里让p个处理器分管N个顶点。

则顶点倒塌算法的具体描述见算法15.3,使用了p个处理器,其时间复杂度为O(N2/p㏒N),其中步骤(2)为主循环,内含5个子步骤对应上面的描述。

算法15.3 顶点倒塌算法输入:图G的邻接矩阵A输出:向量D( 0 :N-1 ),其中D(i)表示顶点i的标识procedure collapse-verticesBegin/* 初始化 */(1)for每个顶点i par_doD(i) = iendfor(2)for k=1 to㏒N do/* 以下并行为每个顶点找邻接超顶点中最小的对应源程序中D_to_C()函数 */(2.1) for每个i, j : 0 ≤ i, j ≤ N-1 par_doC(i) = min{ D(j) | a(i,j)=1 and D(i)≠D(j) }if没有满足要求的D(j) thenC(i) = D(i)endifendfor/* 以下并行求每个超顶点的最小邻接超顶点对应源程序中C_to_C()函数 */(2.2) for每个i, j : 0 ≤ i, j ≤ N-1 par_doC(i) = min{ C(j) | D(j)=i and C(j)≠i }if没有满足要求的C(j) thenC(i) = D(i)endifendfor(2.3)for每个i : 0 ≤ i ≤ N-1 par_doD(i) = C(i)endfor(2.4)for i=1 to㏒N do/* 以下对应源程序中CC_to_C()函数 */for每个j : 0 ≤ j ≤ N-1 par_doC(j) = C(C(j))endforendfor/* 以下对应源程序中CD_to_D()函数 */(2.5)for每个i : 0 ≤ i ≤ N-1 par_doD(i) = min{ C(i), D(C(i)) }endforendforEndMPI源程序请参见章末附录。

1.3 单源最短路径单源最短路径(Single Source Shortest Path)问题是指求从一个指定顶点s到其它所有顶点i之间的距离,因为是单一顶点到其它顶点的距离,所以称为单源。

设图G(V,E)是一个有向加权网络,其中V和E分别为顶点集合和边集合,其边权邻接矩阵为W,边上权值w(i,j) > 0,i,j∈V,V={0,1,…,N-1}。

相关文档
最新文档