克鲁斯卡尔算法的算法描述 克鲁斯卡尔算法

kruskal\u7b97\u6cd5\u7684\u4ecb\u7ecd

\u6c42\u52a0\u6743\u8fde\u901a\u56fe\u7684\u6700\u5c0f\u751f\u6210\u6811\u7684\u7b97\u6cd5\u3002kruskal\u7b97\u6cd5\u603b\u5171\u9009\u62e9n- 1\u6761\u8fb9\uff0c\uff08\u5171n\u4e2a\u70b9\uff09\u6240\u4f7f\u7528\u7684\u8d2a\u5a6a\u51c6\u5219\u662f\uff1a\u4ece\u5269\u4e0b\u7684\u8fb9\u4e2d\u9009\u62e9\u4e00\u6761\u4e0d\u4f1a\u4ea7\u751f\u73af\u8def\u7684\u5177\u6709\u6700\u5c0f\u8017\u8d39\u7684\u8fb9\u52a0\u5165\u5df2\u9009\u62e9\u7684\u8fb9\u7684\u96c6\u5408\u4e2d\u3002\u6ce8\u610f\u5230\u6240\u9009\u53d6\u7684\u8fb9\u82e5\u4ea7\u751f\u73af\u8def\u5219\u4e0d\u53ef\u80fd\u5f62\u6210\u4e00\u68f5\u751f\u6210\u6811\u3002kruskal\u7b97\u6cd5\u5206e \u6b65\uff0c\u5176\u4e2de \u662f\u7f51\u7edc\u4e2d\u8fb9\u7684\u6570\u76ee\u3002\u6309\u8017\u8d39\u9012\u589e\u7684\u987a\u5e8f\u6765\u8003\u8651\u8fd9e \u6761\u8fb9\uff0c\u6bcf\u6b21\u8003\u8651\u4e00\u6761\u8fb9\u3002\u5f53\u8003\u8651\u67d0\u6761\u8fb9\u65f6\uff0c\u82e5\u5c06\u5176\u52a0\u5165\u5230\u5df2\u9009\u8fb9\u7684\u96c6\u5408\u4e2d\u4f1a\u51fa\u73b0\u73af\u8def\uff0c\u5219\u5c06\u5176\u629b\u5f03\uff0c\u5426\u5219\uff0c\u5c06\u5b83\u9009\u5165\u3002

\u5176\u5b9e\u8fd9\u4e2aparent \u6570\u7ec4\u5c31\u662f\u7528\u6765\u5224\u65ad\u65b0\u9009\u62e9\u7684\u8fb9\u662f\u5426\u548c\u73b0\u6709\u7684\u8fb9\u6784\u6210\u73af\u8def
\u8fd9\u4e2a\u7ed3\u6784\u5c31\u662f\u4e00\u4e2a\u6811\u7684\u53cc\u4eb2\u8868\u793a\uff0c\u5f53\u65b0\u8fb9\u7684\u4e24\u4e2a\u9876\u70b9\u6240\u5728\u7684\u6811\u6839\u4e0d\u662f\u540c\u4e00\u4e2a\u65f6\uff0c\u81ea\u7136\u5c31\u662f\u8868\u793a\u52a0\u5165\u8fd9\u4e24\u4e2a\u9876\u70b9\u95f4\u7684\u8fb9\u4e0d\u591f\u6210\u73af\u8def
\u8fd9\u79cd\u7ed3\u6784\u901a\u79f0\u201c\u5e76\u67e5\u96c6\u201d\uff0c\u7528\u6765\u68c0\u6d4b\u7b49\u4ef7\u5173\u7cfb\u7684\uff0c\u8fd9\u91cc\u7528\u6765\u5224\u65ad\u9876\u70b9\u662f\u5426\u5728\u4e00\u4e2a\u96c6\u5408\u4e2d\uff0c\u53ef\u4ee5\u770b\u6bd4\u8f83\u5168\u9762\u7684\u300a\u6570\u636e\u7ed3\u6784\u300b\u6559\u6750\u6811\u90a3\u4e2a\u4e00\u7ae0\u7684\u4ecb\u7ecd

克鲁斯卡尔算法的时间复杂度为O(eloge)(e为网中边的数目),因此它相对于普里姆算法而言,适合于求边稀疏的网的最小生成树。
克鲁斯卡尔算法从另一途径求网的最小生成树。假设连通网N=(V,{E}),则令最小生成树的初始状态为只有n个顶点而无边的非连通图T=(V,{∮}),图中每个顶点自成一个连通分量。在E中选择代价最小的边,若该边依附的顶点落在T中不同的连通分量上,则将此边加入到T中,否则舍去此边而选择下一条代价最小的边。依次类推,直至T中所有顶点都在同一连通分量上为止。
例如图为依照克鲁斯卡尔算法构造一棵最小生成树的过程。代价分别为1,2,3,4的四条边由于满足上述条件,则先后被加入到T中,代价为5的两条边(1,4)和(3,4)被舍去。因为它们依附的两顶点在同一连通分量上,它们若加入T中,则会使T中产生回路,而下一条代价(=5)最小的边(2,3)联结两个连通分量,则可加入T。因此,构造成一棵最小生成树。
上述算法至多对 e条边各扫描一次,假若以“堆”来存放网中的边,则每次选择最小代价的边仅需O(loge)的时间(第一次需O(e))。又生成树T的每个连通分量可看成是一个等价类,则构造T加入新的过程类似于求等价类的过程,由此可以以“树与等价类”中介绍的 mfsettp类型来描述T,使构造T的过程仅需用O(eloge)的时间,由此,克鲁斯卡尔算法的时间复杂度为O(eloge)。



  • 鍏嬮瞾鏂崱灏旂畻娉曠殑绠楁硶鎻忚堪
    绛旓細鍏嬮瞾鏂崱灏旂畻娉浠庡彟涓閫斿緞姹傜綉鐨勬渶灏忕敓鎴愭爲銆傚亣璁捐繛閫氱綉N=锛圴锛寋E}锛夛紝鍒欎护鏈灏忕敓鎴愭爲鐨勫垵濮嬬姸鎬佷负鍙湁n涓《鐐硅屾棤杈圭殑闈炶繛閫氬浘T=锛圴锛寋鈭畗锛夛紝鍥句腑姣忎釜椤剁偣鑷垚涓涓繛閫氬垎閲忋傚湪E涓夋嫨浠d环鏈灏忕殑杈癸紝鑻ヨ杈逛緷闄勭殑椤剁偣钀藉湪T涓笉鍚岀殑杩為氬垎閲忎笂锛屽垯灏嗘杈瑰姞鍏ュ埌T涓紝鍚﹀垯鑸嶅幓姝よ竟鑰岄夋嫨涓...
  • 鍏嬮瞾鏂崱灏旂畻娉浠嬬粛
    绛旓細1銆佸厠椴佹柉鍗″皵绠楁硶鏄眰杩為氱綉鐨勬渶灏忕敓鎴愭爲鐨勫彟涓绉嶆柟娉銆備笌鏅噷濮嗙畻娉曚笉鍚岋紝瀹冪殑鏃堕棿澶嶆潅搴︿负O锛坋loge锛夛紙e涓虹綉涓殑杈规暟锛夛紝鎵浠ワ紝閫傚悎浜庢眰杈圭█鐤忕殑缃戠殑鏈灏忕敓鎴愭爲銆2銆佸厠椴佹柉鍗″皵锛圞ruskal锛夌畻娉曚粠鍙︿竴閫斿緞姹傜綉鐨勬渶灏忕敓鎴愭爲銆傚叾鍩烘湰鎬濇兂鏄細鍋囪杩為氱綉G=锛圴锛孍锛夛紝浠ゆ渶灏忕敓鎴愭爲鐨勫垵濮嬬姸鎬佷负鍙湁...
  • 鍏嬮瞾鏂崱灏旂畻娉
    绛旓細鍏嬮瞾鏂崱灏旂畻娉曟槸涓绉嶇敤浜庡鎵炬渶灏忕敓鎴愭爲鐨勮椽蹇冪畻娉銆傚叾涓昏鎬濇兂鏄寜鐓ц竟鐨勬潈閲嶄粠灏忓埌澶ц繘琛屾帓搴忥紝鐒跺悗浠庢渶灏忕殑杈瑰紑濮嬮夋嫨锛屾瘡娆¢夋嫨涓鏉¤竟鍔犲叆鍒扮敓鎴愭爲涓紝淇濊瘉閫夋嫨鐨勮竟涓嶄細鏋勬垚鐜傞氳繃杩欐牱鐨勬柟寮忥紝鏈缁堝彲浠ユ壘鍒颁竴妫靛寘鍚墍鏈夐《鐐逛笖鎬绘潈閲嶆渶灏忕殑鐢熸垚鏍戙傝缁嗚В閲婂涓嬶細涓銆佺畻娉曟杩 鍏嬮瞾鏂崱灏旂畻娉曞熀浜庤椽蹇...
  • 鍏嬮瞾鏂崱灏旂畻娉浠嬬粛
    绛旓細涓嬮潰鏄竴涓畝鍗曠殑渚嬪瓙鏉ヨ鏄鍏嬮瞾鏂崱灏旂畻娉曠殑鎵ц杩囩▼锛氬亣璁炬垜浠湁涓涓寘鍚4涓《鐐圭殑杩為氬姞鏉冩棤鍚戝浘锛岄《鐐瑰垎鍒负A銆丅銆丆銆丏锛岃竟鐨勬潈鍊煎涓嬶細AB: 1 AC: 3 AD: 5 BC: 2 BD: 4 CD: 6 鎸夌収鍏嬮瞾鏂崱灏旂畻娉曠殑鎵ц姝ラ锛屾垜浠彲浠ュ緱鍒颁互涓嬭繃绋嬶細1. 灏嗘墍鏈夎竟鎸夌収鏉冨间粠灏忓埌澶ф帓搴忥細AB(1)銆丅C(2)銆...
  • 鍏嬮瞾鏂崱灏旂畻娉
    绛旓細鍏嬮瞾鏂崱灏旂畻娉曪細鏄竴绉嶇敤鏉ュ鎵捐緝灏忕敓鎴愭爲鐨勭畻娉銆傚湪鍓╀笅鐨勬墍鏈夋湭閫夊彇鐨勮竟涓紝鎵捐緝灏忚竟锛屽鏋滃拰宸查夊彇鐨勮竟鏋勬垚鍥炶矾锛屽垯鏀惧純锛岄夊彇娆″皬杈广傚熀鏈濇兂锛氬厛鏋勯犱竴涓彧鍚 n 涓《鐐广佽竟闆嗕负绌虹殑瀛愬浘锛屾妸瀛愬浘涓悇涓《鐐圭湅鎴愬悇妫垫爲涓婄殑鏍圭粨鐐癸紝涔嬪悗锛屼粠缃戠殑杈归泦 E 涓夊彇涓鏉℃潈鍊艰緝灏忕殑杈癸紝鑻ヨ鏉¤竟...
  • 鍏嬮瞾鏂灏旂畻娉曚粈涔堟槸鍏嬮瞾鏂崱灏旂畻娉
    绛旓細1銆佽绠楁渶灏忕敓鎴愭爲鐨勭畻娉曞厠椴佹柉鍗″皵绠楁硶 鍋囪 WN=(V,{E}) 鏄竴涓惈鏈 n 涓《鐐圭殑杩為氱綉锛屽垯鎸夌収鍏嬮瞾鏂崱灏旂畻娉曟瀯閫犳渶灏忕敓鎴愭爲鐨勮繃绋嬩负锛氬厛鏋勯犱竴涓彧鍚 n 涓《鐐癸紝鑰岃竟闆嗕负绌虹殑瀛愬浘锛岃嫢灏嗚瀛愬浘涓悇涓《鐐圭湅鎴愭槸鍚勬5鏍戜笂鐨勬牴缁撶偣锛屽垯瀹冩槸涓涓惈鏈 n 妫垫爲鐨勪竴涓.鏋椼2銆佷箣鍚庯紝浠庣綉鐨勮竟闆...
  • kruskal绠楁硶Kruskal绠楁硶
    绛旓細鍏嬮瞾鏂崱灏旂畻娉鏄竴绉嶇敤浜庢瀯寤烘渶灏忕敓鎴愭爲鐨勫父鐢ㄧ畻娉曪紝褰撳鐞嗗惈鏈 n 涓《鐐圭殑杩為氱綉 WN=(V,{E}) 鏃讹紝鍏舵楠ゅ涓嬶細棣栧厛锛屼粠涓涓垵濮嬬姸鎬佸紑濮嬶紝鏋勫缓涓涓粎鍖呭惈 n 涓《鐐逛笖杈归泦涓虹┖鐨勫瓙鍥撅紝瑙嗘瘡涓《鐐逛负鐙珛鐨勬爲鏍癸紝褰㈡垚涓涓敱 n 妫垫爲缁勬垚鐨勬.鏋椼傛帴鐫锛屼粠鎵鏈夎竟 E 涓寫閫夋潈鍊兼渶灏忕殑杈癸紝濡傛灉杩...
  • 姹傛渶灏忕敓鎴愭爲鐨鍏嬮瞾鏂崱灏旂畻娉鏄庢牱鐨?
    绛旓細姹傛渶灏忕敓鎴愭爲鐨鍏嬮瞾鏂崱灏旂畻娉锛氣憼灏嗗甫鏉冭繛閫氬浘G=<n,m>鐨勫悇杈规寜鏉冧粠灏忓埌澶т緷娆℃帓鍒楋紝濡俥1,e2,鈥,em,鍏朵腑e1鐨勬潈鏈灏忥紝em鐨勬潈鏈澶э紝m涓鸿竟鏁般傗憽鍙栨潈鏈灏忕殑涓ゆ潯杈规瀯鎴愯竟闆員0锛屽嵆T0={e1,e2},浠巈3璧凤紝鎸夋搴忛愪釜灏嗗悇杈瑰姞杩涢泦鍚圱0涓幓锛岃嫢鍑虹幇鍥炶矾鍒欏皢杩欐潯杈规帓闄わ紙涓嶅姞杩涘幓锛夛紝鎸夋娉曚竴鐩...
  • 鍏嬮瞾鏂崱灏旂畻娉鍙互鍥炲埌璧峰鐐瑰悧
    绛旓細鍙互銆鍏嬮瞾鏂崱灏(Kruskal)绠楁硶锛屾槸鐢ㄦ潵姹傚姞鏉冭繛閫氬浘鐨勬渶灏忕敓鎴愭爲鐨勭畻娉銆傚熀鏈濇兂锛氭寜鐓ф潈鍊间粠灏忓埌澶х殑椤哄簭閫夋嫨n-1鏉¤竟锛屽苟淇濊瘉杩檔-1鏉¤竟涓嶆瀯鎴愬洖璺傚叿浣撳仛娉曪細棣栧厛鏋勯犱竴涓彧鍚玭涓《鐐圭殑妫灄锛岀劧鍚庝緷鏉冨间粠灏忓埌澶т粠杩為氱綉涓夋嫨杈瑰姞鍏ュ埌妫灄涓紝骞朵娇妫灄涓笉浜х敓鍥炶矾锛岀洿鑷虫.鏋楀彉鎴愪竴妫垫爲涓烘銆
  • 鏈灏忕敓鎴愭爲
    绛旓細•鏈灏忕敓鎴愭爲杈圭殑涓暟绛変簬椤剁偣鐨勪釜鏁板噺涓銆 鏈枃灏嗕粙缁嶄袱绉嶆渶灏忕敓鎴愭爲鐨勭畻娉锛屽垎鍒负鍏嬮瞾鏂崱灏旂畻娉(Kruskal Algorithm)鍜屾櫘鍒╁绠楁硶(Prim Algorithm)銆鍏嬮瞾鏂崱灏旂畻娉曠殑鏍稿績鎬濇兂鏄細鍦ㄥ甫鏉冭繛閫氬浘涓紝涓嶆柇鍦板湪杈归泦鍚堜腑鎵惧埌鏈灏忕殑杈癸紝濡傛灉璇ヨ竟婊¤冻寰楀埌鏈灏忕敓鎴愭爲鐨勬潯浠讹紝灏卞皢鍏舵瀯閫狅紝鐩村埌鏈鍚庡緱...
  • 扩展阅读:c语言算法描述的三种方法 ... 卡尔丹公式图解 ... 算法描述方法是哪四个 ... 算法有哪几种表示方法 ... 算法的五种表示方法 ... 算法描述的基本特征 ... 算法描述流程图 ... 普里姆算法写题的步骤 ... 什么是算法算法的描述方法 ...

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