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代码编辑器的选用(详解)
Sep 13 Python
Python之ReportLab绘制条形码和二维码的实例
Jan 15 Python
python Celery定时任务的示例
Mar 13 Python
如何利用python查找电脑文件
Apr 27 Python
python学生管理系统开发
Jan 30 Python
windows系统中Python多版本与jupyter notebook使用虚拟环境的过程
May 15 Python
使用python进行广告点击率的预测的实现
Jul 04 Python
Pycharm小白级简单使用教程
Jan 08 Python
Python脚本实现监听服务器的思路代码详解
May 28 Python
Python Tornado核心及相关原理详解
Jun 24 Python
python打开音乐文件的实例方法
Jul 21 Python
Python+OpenCV实现图片中的圆形检测
Apr 07 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
destoon实现首页显示供应、企业、资讯条数的方法
2014/07/15 PHP
PHP动态生成指定大小随机图片的方法
2016/03/25 PHP
jquery.tmpl JQuery模板插件
2011/10/10 Javascript
页面载入结束自动调用js函数示例
2013/09/23 Javascript
js实现简单的购物车有图有代码
2014/05/26 Javascript
原生js事件的添加和删除的封装
2014/07/01 Javascript
轻松创建nodejs服务器(8):非阻塞是如何实现的
2014/12/18 NodeJs
jQuery中:radio选择器用法实例
2015/01/03 Javascript
几种经典排序算法的JS实现方法
2016/03/25 Javascript
jQuery操作iframe中js函数的方法小结
2016/07/06 Javascript
深入理解Angularjs中的$resource服务
2016/12/31 Javascript
vue的基本用法与常见指令
2017/08/15 Javascript
Node.js readline 逐行读取、写入文件内容的示例
2018/03/01 Javascript
Bootstrap实现可折叠分组侧边导航菜单
2018/03/07 Javascript
angular实现页面打印局部功能的思考与方法
2018/04/13 Javascript
JS实现同一DOM元素上onClick事件与onDblClick事件并存的解决方法
2018/06/07 Javascript
Vue点击切换颜色的方法
2018/09/13 Javascript
Javascript执行流程细节原理解析
2020/05/14 Javascript
关于小程序优化的一些建议(小结)
2020/12/10 Javascript
[02:43]DOTA2亚洲邀请赛场馆攻略——带你走进东方体育中心
2018/03/19 DOTA
python使用Flask框架获取用户IP地址的方法
2015/03/21 Python
python中栈的原理及实现方法示例
2019/11/27 Python
Python函数参数定义及传递方式解析
2020/06/10 Python
解决tensorflow模型压缩的问题_踩坑无数,总算搞定
2021/03/02 Python
使用CSS3创建动态菜单效果
2015/07/10 HTML / CSS
详解HTML5 data-* 自定义属性
2018/01/24 HTML / CSS
百联网上商城:i百联
2017/01/28 全球购物
Charles & Keith欧盟:新加坡时尚品牌
2019/08/01 全球购物
中学门卫岗位职责
2013/12/26 职场文书
《台湾的蝴蝶谷》教学反思
2014/02/20 职场文书
班班通校本培训方案
2014/03/12 职场文书
教师爱岗敬业演讲稿
2014/05/05 职场文书
党的群众路线教育实践活动个人对照检查材料(医生)
2014/11/05 职场文书
建议书范文
2015/02/05 职场文书
2019年中学生的思想品德评语集锦
2019/12/19 职场文书
分析Python list操作为什么会错误
2021/11/17 Python