㈠ 普里姆算法的相关概念
1)生成树一个连通图的生成树是它的极小连通子图,在n个顶点的情形下,有n-1条边。生成树是对连通图而言的,是连通图的极小连通子图,包含图中的所有顶点,有且仅有n-1条边。非连通图的生成树则组成一个生成森林;若图中有n个顶点,m个连通分量,则生成森林中有n-m条边。
2)和树的遍历相似,若从图中某顶点出发访遍图中每个顶点,且每个顶点仅访问一次,此过程称为图的遍历,(Traversing Graph)。图的遍历算法是求解图的连通性问题、拓扑排序和求关键路径等算法的基础。图的遍历顺序有两种:深度优先搜索(DFS)和广度优先搜索(BFS)。对每种搜索顺序,访问各顶点的顺序也不是唯一的。
3)在一个无向连通图G中,其所有顶点和遍历该图经过的所有边所构成的子图G′称做图G的生成树。一个图可以有多个生成树,从不同的顶点出发,采用不同的遍历顺序,遍历时所经过的边也就不同。
在图论中,常常将树定义为一个无回路连通图。对于一个带权的无向连通图,其每个生成树所有边上的权值之和可能不同,我们把所有边上权值之和最小的生成树称为图的最小生成树。求图的最小生成树有很多实际应用。例如,通讯线路铺设造价最优问题就是一个最小生成树问题。常见的求最小生成树的方法有两种:克鲁斯卡尔(Kruskal)算法和普里姆(Prim)算法。
㈡ 什么是普利姆算法
Prim算法:是图的最小生成树的一种构造算法。
假设 WN=(V,{E}) 是一个含有 n 个顶点的连通网,TV 是 WN 上最小生成树中顶点的集合,TE 是最小生成树中边的集合。显然,在算法执行结束时,TV=V,而 TE 是 E 的一个子集。在算法开始执行时,TE 为空集,TV 中只有一个顶点,因此,按普里姆算法构造最小生成树的过程为:在所有“其一个顶点已经落在生成树上,而另一个顶点尚未落在生成树上”的边中取一条权值为最小的边,逐条加在生成树上,直至生成树中含有 n-1条边为止。
如果看不懂还可以找一本数据结构的书看,这个算法挺简单的。
btw:其实你有空问,应该有空网络啊~网络就有了。懒得写,我还是直接从网络过来的~
㈢ 杩𨱒版柉鐗规媺绠楁硶鍜宲rim绠楁硶
鐩镄勪笉钖岋纴镙稿绩镐濇兂涓嶅悓銆
1銆佺洰镄勪笉钖岋细杩𨱒版柉鐗规媺绠楁硶涓昏佽В鍐冲崟婧愭渶鐭璺寰勯梾棰桡纴鍗充粠鎸囧畾镄勪竴涓鑺傜偣寮濮嬶纴镓惧嚭锲句腑浠庤妭镣瑰埌镓链夊叾浠栬妭镣圭殑链鐭璺寰勶纴钥屾櫘閲屽嗙畻娉曞垯鐢ㄤ簬瑙e喅链灏忕敓鎴愭爲闂棰桡纴鍗冲湪杩为氩浘涓阃夋嫨涓浜涜竟锛屼娇寰楄繖浜涜竟鏋勬垚镄勫瓙锲句粛铹惰繛阃氾纴骞朵笖镓链夎竟镄勬潈閲崭箣鍜屾渶灏忋
2銆佹牳蹇冩濇兂涓嶅悓锛氲开𨱒版柉鐗规媺绠楁硶姣忔′粠链琚璁块梾杩囩殑鑺傜偣涓阃夋嫨璺濈绘渶鐭镄勮妭镣癸纴骞舵洿鏂板叾鐩搁偦鑺傜偣镄勮窛绂伙纴钥屾櫘閲屽嗙畻娉曞垯浠庝竴涓鑺傜偣寮濮嬶纴姣忔¢夋嫨涓𨱒℃潈鍊兼渶灏忕殑杈癸纴骞朵缭璇佽繖𨱒¤竟涓崭细涓庡凡阃夎竟鏋勬垚鐜銆
㈣ prim算法是什么
普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树。意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点(英语:Vertex (graph theory)),且其所有边的权值之和亦为最小。
算法的发展:
该算法于1930年由捷克数学家沃伊捷赫·亚尔尼克(英语:Vojtěch Jarník)发现;并在1957年由美国计算机科学家罗伯特·普里姆(英语:Robert C. Prim)独立发现;1959年,艾兹格·迪科斯彻再次发现了该算法。因此,在某些场合,普里姆算法又被称为DJP算法、亚尔尼克算法或普里姆-亚尔尼克算法。
㈤ prim算法是什么
prim算法是图论中的一种算法。
普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树。意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点(英语:Vertex (graph theory)),且其所有边的权值之和亦为最小。
简介
最小生成树是数据结构中图的一种重要应用,它的要求是从一个带权无向完全图中选择n-1条边并使这个图仍然连通(也即得到了一棵生成树),同时还要考虑使树的权最小。
为了得到最小生成树,人们设计了很多算法,最着名的有prim算法和kruskal算法。教材中介绍了prim算法,但是讲得不够详细,理解起来比较困难,为了帮助大家更好的理解这一算法,本文对书中的内容作了进一步的细化,希望能对大家有所帮助。
㈥ 利用Prim(普里姆)算法 构造最小生成树 程序
算法同样是解决最小生成树的问题。
其算法为:在这n个点中的相通的边进行排序,然后不断地将边添加到集合中(体现了贪心的算法特点),在并入集合之前,必须检查一下这两点是不是在一个集合当中,这就用到了并查集的知识。直到边的集合达到了n-1个。
与prim算法的不同:prim算法为单源不断寻找连接的最短边,向外扩展,即单树形成森林。而Kruskal算法则是不断寻找最短边然后不断将集合合并,即多树形成森林。
复杂度的不同:prim算法的复杂度是O(n^2),其中n为点的个数。Kruskal算法的复杂度是O(e*loge),其中e为边的个数。两者各有优劣,在不同的情况下选择不同的算法。
Prim算法用于求无向图的最小生成树
设图G =(V,E),其生成树的顶点集合为U。
①、把v0放入U。
②、在所有u∈U,v∈V-U的边(u,v)∈E中找一条最小权值的边,加入生成树。
③、把②找到的边的v加入U集合。如果U集合已有n个元素,则结束,否则继续执行②。
其算法的时间复杂度为O(n^2)
Prim算法实现:
(1)集合:设置一个数组set(i=0,1,..,n-1),初始值为 0,代表对应顶点不在集合中(注意:顶点号与下标号差1)
(2)图用邻接阵表示,路径不通用无穷大表示,在计算机中可用一个大整数代替。
{先选定一个点,然后从该点出发,与该点相连的点取权值最小者归入集合,然后再比较在集合中的两点与其它各点的边的权值最小者,再次进入集合,一直到将所有的点都归入集合为止。}