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使用MD5加密字符串示例
Aug 22 Python
用python结合jieba和wordcloud实现词云效果
Sep 05 Python
Python中的id()函数指的什么
Oct 17 Python
python shell根据ip获取主机名代码示例
Nov 25 Python
Python实现OpenCV的安装与使用示例
Mar 30 Python
PyQt4实时显示文本内容GUI的示例
Jun 14 Python
pyqt5让图片自适应QLabel大小上以及移除已显示的图片方法
Jun 21 Python
pd.DataFrame统计各列数值多少的实例
Dec 05 Python
pytorch 归一化与反归一化实例
Dec 31 Python
Python实现新型冠状病毒传播模型及预测代码实例
Feb 05 Python
Pandas的数据过滤实现
Jan 15 Python
如何用Python和JS实现的Web SSH工具
Feb 23 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
Extended CHM PHP 语法手册之 DIY
2006/10/09 PHP
最令PHP初学者们头痛的十四个问题
2007/01/15 PHP
用Zend Encode编写开发PHP程序
2010/02/21 PHP
ThinkPHP模板中判断volist循环的最后一条记录的验证方法
2014/07/01 PHP
php设计模式之简单工厂模式详解
2014/09/04 PHP
Zend Framework分页类用法详解
2016/03/22 PHP
PHP中遍历数组的三种常用方法实例分析
2019/06/24 PHP
JQuery+JS实现仿百度搜索结果中关键字变色效果
2011/08/02 Javascript
js获取对象为null的解决方法
2013/11/21 Javascript
JS模仿腾讯图片站的图片翻页按钮效果完整实例
2016/06/21 Javascript
nodejs+express实现文件上传下载管理网站
2017/03/15 NodeJs
详解Weex基于Vue2.0开发模板搭建
2017/03/20 Javascript
nodejs判断文件、文件夹是否存在及删除的方法
2017/11/10 NodeJs
详解如何在vue项目中使用layui框架及采坑
2019/05/05 Javascript
vuex + keep-alive实现tab标签页面缓存功能
2019/10/17 Javascript
nodejs制作小爬虫功能示例
2020/02/24 NodeJs
vue动态加载SVG文件并修改节点数据的操作代码
2020/08/17 Javascript
基于python实现的抓取腾讯视频所有电影的爬虫
2016/04/22 Python
Python文件夹与文件的相关操作(推荐)
2016/07/25 Python
python利用正则表达式排除集合中字符的功能示例
2017/10/10 Python
Windows下Anaconda的安装和简单使用方法
2018/01/04 Python
关于python列表增加元素的三种操作方法
2018/08/22 Python
使用keras根据层名称来初始化网络
2020/05/21 Python
PyQt5实现登录页面
2020/05/30 Python
Pytorch学习之torch用法----比较操作(Comparison Ops)
2020/06/28 Python
Pytorch上下采样函数--interpolate用法
2020/07/07 Python
PyQt5的相对布局管理的实现
2020/08/07 Python
Python 处理日期时间的Arrow库使用
2020/08/18 Python
用canvas画心电图的示例代码
2018/09/10 HTML / CSS
网络安全方面的面试题
2016/01/07 面试题
Windows和Linux动态库应用异同
2016/04/17 面试题
经典禁毒标语
2014/06/16 职场文书
2014年幼儿园学期工作总结
2014/12/05 职场文书
银行稽核岗位职责
2015/04/13 职场文书
初中语文教师研修日志
2015/11/13 职场文书
医德医风学习心得体会
2016/01/25 职场文书