Prim和Dijkstra算法的区别 prim算法和kruskal算法的区别

Prim\u548cDijkstra\u7b97\u6cd5\u7684\u533a\u522b

\u5728\u56fe\u8bba\u4e2d\uff0cPrim\u7b97\u6cd5\u662f\u8ba1\u7b97\u6700\u5c0f\u751f\u6210\u6811\u7684\u7b97\u6cd5\uff0c\u800cDijkstra\u7b97\u6cd5\u662f\u8ba1\u7b97\u6700\u77ed\u8def\u5f84\u7684\u7b97\u6cd5\u3002\u4e8c\u8005\u770b\u8d77\u6765\u6bd4\u8f83\u7c7b\u4f3c\uff0c\u56e0\u4e3a\u5047\u8bbe\u5168\u90e8\u9876\u70b9\u7684\u96c6\u5408\u662fV\uff0c\u5df2\u7ecf\u88ab\u6311\u9009\u51fa\u6765\u7684\u70b9\u7684\u96c6\u5408\u662fU\uff0c\u90a3\u4e48\u4e8c\u8005\u90fd\u662f\u4ece\u96c6\u5408V-U\u4e2d\u4e0d\u65ad\u7684\u6311\u9009\u6743\u503c\u6700\u4f4e\u7684\u70b9\u52a0\u5165U\uff0c\u90a3\u4e48\u4e8c\u8005\u662f\u5426\u7b49\u4ef7\u5462\uff1f\u4e5f\u5c31\u662f\u8bf4\u662f\u5426Dijkstra\u4e5f\u53ef\u4ee5\u8ba1\u7b97\u51fa\u6700\u5c0f\u751f\u6210\u6811\u800cPrim\u4e5f\u53ef\u4ee5\u8ba1\u7b97\u51fa\u4ece\u7b2c\u4e00\u4e2a\u9876\u70b9v0\u5230\u5176\u4ed6\u70b9\u7684\u6700\u77ed\u8def\u5f84\u5462\uff1f\u7b54\u6848\u662f\u5426\u5b9a\u7684\uff0c\u5426\u5219\u5c31\u4e0d\u5fc5\u6709\u4e24\u4e2a\u7b97\u6cd5\u4e86\u3002
\u4e8c\u8005\u7684\u4e0d\u540c\u4e4b\u5904\u5728\u4e8e\u201c\u6743\u503c\u6700\u4f4e\u201d\u7684\u5b9a\u4e49\u4e0d\u540c\uff0cPrim\u7684\u201c\u6743\u503c\u6700\u4f4e\u201d\u662f\u76f8\u5bf9\u4e8eU\u4e2d\u7684\u4efb\u610f\u4e00\u70b9\u800c\u8a00\u7684\uff0c\u4e5f\u5c31\u662f\u628aU\u4e2d\u7684\u70b9\u770b\u6210\u4e00\u4e2a\u6574\u4f53\uff0c\u6bcf\u6b21\u5bfb\u627eV-U\u4e2d\u8ddfU\u7684\u8ddd\u79bb\u6700\u5c0f\uff08\u4e5f\u5c31\u662f\u8ddfU\u4e2d\u4efb\u610f\u4e00\u70b9\u7684\u8ddd\u79bb\u6700\u5c0f\uff09\u7684\u4e00\u70b9\u52a0\u5165U\uff1b\u800cDijkstra\u7684\u201c\u6743\u503c\u6700\u4f4e\u201d\u662f\u76f8\u5bf9\u4e8ev0\u800c\u8a00\u7684\uff0c\u4e5f\u5c31\u662f\u6bcf\u6b21\u5bfb\u627eV-U\u4e2d\u8ddfv0\u7684\u8ddd\u79bb\u6700\u5c0f\u7684\u4e00\u70b9\u52a0\u5165U\u3002
\u4e00\u4e2a\u53ef\u4ee5\u8bf4\u660e\u4e8c\u8005\u4e0d\u7b49\u4ef7\u7684\u4f8b\u5b50\u662f\u6709\u56db\u4e2a\u9876\u70b9(v0, v1, v2, v3)\u548c\u56db\u6761\u8fb9\u4e14\u8fb9\u503c\u5b9a\u4e49\u4e3a(v0, v1)=20, (v0, v2)=10, (v1, v3)=2, (v3, v2)=15\u7684\u56fe\uff0c\u7528Prim\u7b97\u6cd5\u5f97\u5230\u7684\u6700\u5c0f\u751f\u6210\u6811\u4e2dv0\u8ddfv1\u662f\u4e0d\u76f4\u63a5\u76f8\u8fde\u7684\uff0c\u4e5f\u5c31\u662f\u5728\u6700\u5c0f\u751f\u6210\u6811\u4e2dv0v1\u7684\u8ddd\u79bb\u662fv0->v2->v3->v1\u7684\u8ddd\u79bb\u662f27\uff0c\u800c\u7528Dijkstra\u7b97\u6cd5\u5f97\u5230\u7684v0v1\u7684\u8ddd\u79bb\u662f20\uff0c\u4e5f\u5c31\u662f\u4e8c\u8005\u76f4\u63a5\u8fde\u7ebf\u7684\u957f\u5ea6\u3002

\u8fb9\u6570\u8f83\u5c11\u53ef\u4ee5\u7528Kruskal,\u56e0\u4e3aKruskal\u7b97\u6cd5\u6bcf\u6b21\u67e5\u627e\u6700\u77ed\u7684\u8fb9\u3002 \u8fb9\u6570\u8f83\u591a\u53ef\u4ee5\u7528Prim\uff0c\u56e0\u4e3a\u5b83\u662f\u6bcf\u6b21\u52a0\u4e00\u4e2a\u9876\u70b9\uff0c\u5bf9\u8fb9\u6570\u591a\u7684\u9002\u7528\u3002

在图论中,Prim算法是计算最小生成树的算法,而Dijkstra算法是计算最短路径的算法。二者看起来比较类似,因为假设全部顶点的集合是V,已经被挑选出来的点的集合是U,那么二者都是从集合V-U中不断的挑选权值最低的点加入U。
二者的不同之处在于“权值最低”的定义不同,Prim的“权值最低”是相对于U中的任意一点而言的,也就是把U中的点看成一个整体,每次寻找V-U中跟U的距离最小(也就是跟U中任意一点的距离最小)的一点加入U;而Dijkstra的“权值最低”是相对于v0而言的,也就是每次寻找V-U中跟v0的距离最小的一点加入U。

一个可以说明二者不等价的例子是有四个顶点(v0, v1, v2, v3)和四条边且边值定义为(v0, v1)=20, (v0, v2)=10, (v1, v3)=2, (v3, v2)=15的图,用Prim算法得到的最小生成树中v0跟v1是不直接相连的,也就是在最小生成树中v0v1的距离是v0->v2->v3->v1的距离是27,而用Dijkstra算法得到的v0v1的距离是20,也就是二者直接连线的长度。

Prim算法中寻找的是下一个与MST中任意顶点相距最近的顶点; Dijkstra算法寻找的是下一个离给定顶点(单源)最近的顶点。 另外,当有两条具有同样的最小权值的边可供选择时,任选一条即可,所以构造的MST不是惟一的。 Prim算法和Dijkstra算法十分相似,惟一的区别是: Prim算法要寻找的是离已加入顶点距离最近的顶点; Dijkstra算法是寻找离固定顶点距离最近的顶点。 所以Prim算法的时间复杂度分析与Dijkstra算法相同,都是 O(|V^2|)

  • 杩澃鏂壒鎷夌畻娉鍜prim绠楁硶
    绛旓細1銆佺洰鐨勪笉鍚岋細杩澃鏂壒鎷夌畻娉涓昏瑙e喅鍗曟簮鏈鐭矾寰勯棶棰橈紝鍗充粠鎸囧畾鐨勪竴涓妭鐐瑰紑濮嬶紝鎵惧嚭鍥句腑浠庤妭鐐瑰埌鎵鏈夊叾浠栬妭鐐圭殑鏈鐭矾寰勶紝鑰屾櫘閲屽绠楁硶鍒欑敤浜庤В鍐虫渶灏忕敓鎴愭爲闂锛屽嵆鍦ㄨ繛閫氬浘涓夋嫨涓浜涜竟锛屼娇寰楄繖浜涜竟鏋勬垚鐨勫瓙鍥句粛鐒惰繛閫氾紝骞朵笖鎵鏈夎竟鐨勬潈閲嶄箣鍜屾渶灏忋2銆佹牳蹇冩濇兂涓嶅悓锛氳开鏉版柉鐗规媺绠楁硶姣忔浠庢湭琚闂繃鐨...
  • Prim鍜孌ijkstra绠楁硶鐨勫尯鍒
    绛旓細鍦ㄥ浘璁轰腑锛Prim绠楁硶鏄绠楁渶灏忕敓鎴愭爲鐨勭畻娉曪紝鑰孌ijkstra绠楁硶鏄绠楁渶鐭矾寰勭殑绠楁硶銆備簩鑰呯湅璧锋潵姣旇緝绫讳技锛屽洜涓哄亣璁惧叏閮ㄩ《鐐圭殑闆嗗悎鏄疺锛屽凡缁忚鎸戦夊嚭鏉ョ殑鐐圭殑闆嗗悎鏄疷锛岄偅涔堜簩鑰呴兘鏄粠闆嗗悎V-U涓笉鏂殑鎸戦夋潈鍊兼渶浣庣殑鐐瑰姞鍏銆備簩鑰呯殑涓嶅悓涔嬪鍦ㄤ簬鈥滄潈鍊兼渶浣庘濈殑瀹氫箟涓嶅悓锛孭rim鐨勨滄潈鍊兼渶浣庘濇槸鐩稿浜嶶涓...
  • 杩樺師娉曡В棰樼殑涓夌鏂规硶
    绛旓細A.鍗曟簮鏈鐭矾寰勪腑鐨Dijkstra绠楁硶锛欴ijkstra鎻愬嚭鎸夊悇椤剁偣涓庢簮鐐箆闂寸殑璺緞闀垮害鐨勯掑娆″簭锛岀敓鎴愬埌鍚勯《鐐圭殑鏈鐭矾寰勭殑绠楁硶銆傛棦鍏堟眰鍑洪暱搴︽渶鐭殑涓鏉℃渶鐭矾寰勶紝鍐嶅弬鐓у畠姹傚嚭闀垮害娆$煭鐨勪竴鏉℃渶鐭矾寰勶紝渚濇绫绘帹锛岀洿鍒颁粠婧愮偣v 鍒板叾瀹冨悇椤剁偣鐨勬渶鐭矾寰勫叏閮ㄦ眰鍑轰负姝侭.鏈灏忕敓鎴愭爲鐨Prim绠楁硶:Prim绠楁硶鍩轰簬...
  • 璁$畻鏈烘湁鍝簺绠楁硶
    绛旓細3. 鍥剧畻娉 鍥剧畻娉曠敤浜庡鐞嗕笌鍥惧舰鐩稿叧鐨勬暟鎹粨鏋勫拰闂锛屽鏈鐭矾寰勯棶棰樸佹渶灏忕敓鎴愭爲绛夈傚父瑙佺殑鍥剧畻娉曞寘鎷Dijkstra绠楁硶銆Prim绠楁硶绛夈傝繖浜涚畻娉曞湪澶勭悊澶嶆潅缃戠粶闂涓彂鎸ョ潃閲嶈浣滅敤銆4. 鍔ㄦ佽鍒掔畻娉 鍔ㄦ佽鍒掔畻娉曟槸涓绉嶈В鍐虫渶浼樺寲闂鐨勭畻娉曪紝閫氳繃灏嗛棶棰樺垎瑙d负瀛愰棶棰樺苟瀛樺偍瀛愰棶棰樼殑瑙o紝浠庤屽疄鐜板鏉傞棶棰樼殑绠...
  • 骞垮害浼樺厛绠楁硶姹傛渶鐭矾寰
    绛旓細骞垮害浼樺厛鎼滅储绠楁硶锛堝張绉板搴︿紭鍏堟悳绱級鏄渶绠渚跨殑鍥剧殑鎼滅储绠楁硶涔嬩竴锛岃繖涓绠楁硶涔熸槸寰堝閲嶈鐨勫浘鐨勭畻娉曠殑鍘熷瀷銆Dijkstra鍗曟簮鏈鐭矾寰绠楁硶鍜孭rim鏈灏忕敓鎴愭爲绠楁硶閮介噰鐢ㄤ簡鍜屽搴︿紭鍏堟悳绱㈢被浼肩殑鎬濇兂銆傚箍搴︿紭鍏堢畻娉曠殑鍩烘湰鎬濇兂鏄埄鐢ㄩ槦鍒楀疄鐜拌妭鐐圭殑閬嶅巻銆傞鍏堝皢璧风偣鍔犲叆闃熷垪涓紝鐒跺悗浠庨槦鍒椾腑鍙栧嚭涓涓妭鐐癸紝閬嶅巻璇ヨ妭鐐圭殑...
  • 鍥捐渚嬮鍙婄瓟妗堟湁鍝簺?
    绛旓細瑙g瓟鏂规硶锛氭垜浠彲浠ヤ娇鐢Dijkstra绠楁硶鎴栬匜loyd-Warshall绠楁硶鏉ヨВ鍐宠繖涓棶棰樸侱ijkstra绠楁硶閫傜敤浜庢病鏈夎礋鏉冭竟鐨勫浘锛岃孎loyd-Warshall绠楁硶鍒欏彲浠ュ鐞嗗寘鍚礋鏉冭竟鐨勫浘銆傛渶灏忕敓鎴愭爲闂锛氱粰瀹氫竴涓棤鍚戝浘锛屾壘鍑鸿繛鎺ユ墍鏈夐《鐐逛笖鎬绘潈鍊兼渶灏忕殑鏍戙傝В绛旀柟娉曪細鎴戜滑鍙互浣跨敤Kruskal绠楁硶鎴栬Prim绠楁硶鏉ヨВ鍐宠繖涓棶棰樸侹ruskal绠楁硶...
  • 鏈灏忔爲闂鐨勬眰瑙f柟娉
    绛旓細甯哥敤鐨勬眰鏈灏忔爲鐨勭畻娉曟湁:鐮村湀娉曘侀伩鍦堟硶銆佽竟鍓叉硶鍜孌ijkstra绠楁硶绛夌瓑銆傚熀鏈蹇 鏈灏忔爲闂鏄綉缁滄渶浼樺寲闂涔嬩竴锛屾槸鎸囧浣曚粠缃戠粶鐨勬敮鎾戞爲涓眰鍑烘渶灏忔爲鐨勯棶棰樸傛眰瑙f渶灏忔爲闂甯哥敤鐮村湀娉曞拰璐┆绠楁硶銆傛渶灏忕敓鎴愭爲闂鏄粍鍚堜紭鍖栦腑鐨勪竴涓噸瑕佺殑闂銆傝嚜浜斿崄骞翠唬鍚庢湡Rosenstiehl,Prim鍜Kruskal鍏堝悗缁欏嚭姹傝В杩...
  • 璇︾粏浠嬬粛骞垮害浼樺厛鎼滅储鐨勫疄鐜,鍘熺悊,c++绋嬪簭
    绛旓細瀹藉害浼樺厛鎼滅储绠楁硶锛堝張绉板箍搴︿紭鍏堟悳绱級鏄渶绠渚跨殑鍥剧殑鎼滅储绠楁硶涔嬩竴锛岃繖涓绠楁硶涔熸槸寰堝閲嶈鐨勫浘鐨勭畻娉曠殑鍘熷瀷銆Dijkstra鍗曟簮鏈鐭矾寰绠楁硶鍜孭rim鏈灏忕敓鎴愭爲绠楁硶閮介噰鐢ㄤ簡鍜屽搴︿紭鍏堟悳绱㈢被浼肩殑鎬濇兂銆傚叾鍒悕鍙堝彨BFS锛屽睘浜庝竴绉嶇洸鐩悳瀵绘硶锛岀洰鐨勬槸绯荤粺鍦板睍寮骞舵鏌ュ浘涓殑鎵鏈夎妭鐐癸紝浠ユ壘瀵荤粨鏋溿傛崲鍙ヨ瘽璇达紝瀹冨苟涓...
  • C璇█绠楁硶鏈夊摢浜 骞朵妇渚嬪拰鍒嗘瀽
    绛旓細A.Prim绠楁硶:procedure prim(v0:integer);varlowcost,closest:array[1..maxn] of integer;i,j,k,min:integer;beginfor i:=1 to n do beginlowcost[i]:=cost[v0,i];closest[i]:=v0;end;for i:=1 to n-1 do begin{瀵绘壘绂荤敓鎴愭爲鏈杩戠殑鏈姞鍏ラ《鐐筴}min:=maxlongint;for j:=1 to n doif ...
  • 绠楁硶鎬庝箞瀛
    绛旓細Prim绠楁硶姣忎竴姝ラ兘閫夋嫨杩炴帴U鍜孷-U鐨勬潈鍊兼渶灏忕殑杈瑰姞鍏ョ敓鎴愭爲銆 #include<iostream>#include<algorithm>#define MAX_V 100#define INF 1000 using namespace std; int main(){int V,E;int i,j,m,n;int cost[MAX_V][MAX_V];int mincost[MAX_V];bool used[MAX_V];cin>>V>...
  • 扩展阅读:dijkstra算法详细步骤 ... 大二dijkstra算法例题 ... dijkstra最短路径画图 ... 用dijkstra算法求下图 ... dijkstra经典例题及答案 ... 最小生成树prim算法 ... dijkstra算法例题 图论 ... dijkstra算法答题过程 ... dijkstra标号法步骤 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网