算法_Prim_Python

本文用到的包

from heapq import *
import networkx as nx

Prim算法用于在无向网络中找出一棵树。其精髓就是选一个初始节点,在网络上考虑扩散过程,不断地将节点添加到树中。Prim算法是可以找到最小权重树(minimum spanning tree)的,本处暂时不考虑考虑权重。如下网络


图1. 网络示意图
图1. 网络示意图

本网络在这里已经介绍,只需要在Python生成和Processing绘制时去掉方向即可。定义Prim函数如下

def prim(G, s): 
    P, Q = {}, [(0, None, s)] 
    while Q: 
        _, p, u = heappop(Q) 
        if u in P: continue 
        P[u] = p 
        for v, w in G[u].items(): 
            heappush(Q, (1, u, v))
    del P[s]
    T=nx.DiGraph()
    for i in P:
        T.add_edge(P[i],i)
    return T

测试:

T=prim(G, 0)
T.edges()

得到

[(0, 1), (1, 2), (1, 3), (2, 4), (2, 5), (2, 6)]

图2. Prim树
图2. Prim树
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 课程介绍 先修课:概率统计,程序设计实习,集合论与图论 后续课:算法分析与设计,编译原理,操作系统,数据库概论,人...
    ShellyWhen阅读 2,382评论 0 3
  • 1 序 2016年6月25日夜,帝都,天下着大雨,拖着行李箱和同学在校门口照了最后一张合照,搬离寝室打车去了提前租...
    RichardJieChen阅读 5,243评论 0 12
  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,788评论 0 33
  • 那么漫长的等待,不是为了证明自己到底有多爱你,而是为了证明自己到底有多么不甘心。 为自己争口气,为自己而活。
    躲雨De屋檐阅读 317评论 0 1
  • 浅夏的风吹的树叶沙沙作响,藏在树叶底下的鸟儿正在冲着朝阳叽叽喳喳的叫个不停,路旁一些早开的花已经开始泛黄,即将凋谢...
    枳淮南阅读 469评论 0 2