NetworkX之Prim算法(实例讲解)


Posted in Python onDecember 22, 2017

引言

Prim算法与Dijkstra的最短路径算法类似,它采用贪心策略。算法开始先把图中权值最小的边添加到树T中,然后不断把权值最小的边E(E的一个端点在T中,另一个在G-T中)。当没有符合条件的E时算法结束,此时T就是G的一个最小生成树。

NetworkX是一款Python的软件包,用于创造、操作复杂网络,以及学习复杂网络的结构、动力学及其功能。 本文借助networkx.Graph类实现Prim算法。

正文

Prim算法的代码

Prim

NetworkX之Prim算法(实例讲解)

def prim(G, s):
 dist = {} # dist记录到节点的最小距离
 parent = {} # parent记录最小生成树的双亲表
 Q = list(G.nodes()) # Q包含所有未被生成树覆盖的节点
 MAXDIST = 9999.99 # MAXDIST表示正无穷,即两节点不邻接
 # 初始化数据
 # 所有节点的最小距离设为MAXDIST,父节点设为None
 for v in G.nodes():
  dist[v] = MAXDIST
  parent[v] = None
 # 到开始节点s的距离设为0
 dist[s] = 0
 # 不断从Q中取出“最近”的节点加入最小生成树
 # 当Q为空时停止循环,算法结束
 while Q:
  # 取出“最近”的节点u,把u加入最小生成树
  u = Q[0]
  for v in Q:
   if (dist[v] < dist[u]):
    u = v
  Q.remove(u)
  # 更新u的邻接节点的最小距离
  for v in G.adj[u]:
   if (v in Q) and (G[u][v]['weight'] < dist[v]):
    parent[v] = u
    dist[v] = G[u][v]['weight']
 # 算法结束,以双亲表的形式返回最小生成树
 return parent

测试数据

从~到 2 3 4 5 6 7 8
1 1.3 2.1 0.9 0.7 1.8 2.0 1.8
2 0.9 1.8 1.2 2.8 2.3 1.1
3 2.6 1.7 2.5 1.9 1.0
4 0.7 1.6 1.5 0.9
5 0.9 1.1 0.8
6 0.6 1.0
7 0.5

NetworkX之Prim算法(实例讲解)

测试代码

import matplotlib.pyplot as plt
import networkx as nx
g_data = [(1, 2, 1.3), (1, 3, 2.1), (1, 4, 0.9), (1, 5, 0.7), (1, 6, 1.8), (1, 7, 2.0), (1, 8, 1.8), (2, 3, 0.9), (2, 4, 1.8), (2, 5, 1.2), (2, 6, 2.8), (2, 7, 2.3), (2, 8, 1.1), (3, 4, 2.6), (3, 5, 1.7), (3, 6, 2.5), (3, 7, 1.9), (3, 8, 1.0), (4, 5, 0.7), (4, 6, 1.6), (4, 7, 1.5), (4, 8, 0.9), (5, 6, 0.9), (5, 7, 1.1), (5, 8, 0.8), (6, 7, 0.6), (6, 8, 1.0), (7, 8, 0.5)]
def draw(g):
 pos = nx.spring_layout(g)
 nx.draw(g, pos, \
   arrows=True, \
   with_labels=True, \
   nodelist=g.nodes(), \
   style='dashed', \
   edge_color='b', \
   width=2, \
   node_color='y', \
   alpha=0.5)
 plt.show()
g = nx.Graph()
g.add_weighted_edges_from(g_data)
tree = prim(g, 1)
mtg = nx.Graph()
mtg.add_edges_from(tree.items())
mtg.remove_node(None)
draw(mtg)

运行结果

NetworkX之Prim算法(实例讲解)

以上这篇NetworkX之Prim算法(实例讲解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python奇偶行分开存储实现代码
Mar 19 Python
用Python一键搭建Http服务器的方法
Jun 01 Python
python清除函数占用的内存方法
Jun 25 Python
python实现机器学习之多元线性回归
Sep 06 Python
TensorFlow实现模型评估
Sep 07 Python
Python 从相对路径下import的方法
Dec 04 Python
Python面向对象之类和对象实例详解
Dec 10 Python
Python中那些 Pythonic的写法详解
Jul 02 Python
一篇文章搞定Python操作文件与目录
Aug 13 Python
python实现把两个二维array叠加成三维array示例
Nov 29 Python
Python request操作步骤及代码实例
Apr 13 Python
python中数组和列表的简单实例
Mar 25 Python
Python实现控制台中的进度条功能代码
Dec 22 #Python
Python中的探索性数据分析(功能式)
Dec 22 #Python
Python反射用法实例简析
Dec 22 #Python
Python文本特征抽取与向量化算法学习
Dec 22 #Python
用Python实现KNN分类算法
Dec 22 #Python
Python数据拟合与广义线性回归算法学习
Dec 22 #Python
python 动态加载的实现方法
Dec 22 #Python
You might like
Base64在线编码解码实现代码 演示与下载
2011/01/08 PHP
PHP实现微信公众平台音乐点播
2014/03/20 PHP
php 微信开发获取用户信息如何实现
2016/12/13 PHP
JS添加删除一组文本框并对输入信息加以验证判断其正确性
2013/04/11 Javascript
在子窗口中关闭父窗口的一句代码
2013/10/21 Javascript
Jquery ajax基础教程
2015/11/20 Javascript
BootStrap table删除指定行的注意事项(笔记整理)
2017/02/05 Javascript
微信小程序 动态绑定事件并实现事件修改样式
2017/04/13 Javascript
jquery获取元素到屏幕四周可视距离的方法
2018/09/05 jQuery
详解JavaScript中typeof与instanceof用法
2018/10/24 Javascript
JS数组扁平化(flat)方法总结详解
2019/06/24 Javascript
[01:32]寻找你心中的那团火 DOTA2 TI9火焰传递活动今日开启
2019/05/16 DOTA
Python下载指定页面上图片的方法
2016/05/12 Python
对python中执行DOS命令的3种方法总结
2018/05/12 Python
解决Tensorflow安装成功,但在导入时报错的问题
2018/06/13 Python
Python中numpy模块常见用法demo实例小结
2019/03/16 Python
详解Python用户登录接口的方法
2019/04/17 Python
python调用自定义函数的实例操作
2019/06/26 Python
python selenium xpath定位操作
2020/09/01 Python
Python通过类的组合模拟街道红绿灯
2020/09/16 Python
css3实现超立体3D图片侧翻倾斜效果
2014/04/16 HTML / CSS
html5中为audio标签增加停止按钮动作实现方法
2013/01/04 HTML / CSS
bonprix荷兰网上商店:便宜的服装、鞋子和家居用品
2020/07/04 全球购物
Trench London官方网站:高级风衣和意大利皮夹克
2020/07/11 全球购物
会话Bean的种类
2013/11/07 面试题
后勤副校长自我鉴定
2013/10/13 职场文书
校园歌手大赛策划书
2014/01/17 职场文书
解除合同协议书
2014/04/17 职场文书
关于清明节的演讲稿
2014/09/13 职场文书
党的群众路线教育实践活动方案
2014/10/31 职场文书
老人与海读书笔记
2015/06/26 职场文书
安全生产感想
2015/08/07 职场文书
解决Jupyter-notebook不弹出默认浏览器的问题
2021/03/30 Python
教你使用vscode 搭建react-native开发环境
2021/07/07 Javascript
Java实现学生管理系统(IO版)
2022/02/24 Java/Android
解决Mysql中的innoDB幻读问题
2022/04/29 MySQL