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简单读取json文件功能示例
Nov 30 Python
Python字典创建 遍历 添加等实用基础操作技巧
Sep 13 Python
Python3.5字符串常用操作实例详解
May 01 Python
windows安装TensorFlow和Keras遇到的问题及其解决方法
Jul 10 Python
numpy求平均值的维度设定的例子
Aug 24 Python
Python实现遗传算法(二进制编码)求函数最优值方式
Feb 11 Python
浅谈Django QuerySet对象(模型.objects)的常用方法
Mar 28 Python
Django自关联实现多级联动查询实例
May 19 Python
在django中查询获取数据,get, filter,all(),values()操作
Aug 09 Python
Python Map 函数的使用
Aug 28 Python
python代数式括号有效性检验示例代码
Oct 04 Python
python opencv肤色检测的实现示例
Dec 21 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
php存储过程调用实例代码
2013/02/03 PHP
PHP如何通过传引用的思想实现无限分类(代码简单)
2015/10/13 PHP
laravel自定义分页效果
2017/07/23 PHP
用JTrackBar实现的模拟苹果风格的滚动条
2007/08/06 Javascript
js获取select标签的值且兼容IE与firefox
2013/12/30 Javascript
js解析json读取List中的实体对象示例
2014/03/11 Javascript
用nodejs实现PHP的print_r函数代码
2014/03/14 NodeJs
jQuery点击输入框显示验证码图片
2016/05/19 Javascript
js当前页面登录注册框,固定div,底层阴影的实例代码
2016/10/04 Javascript
微信公众号开发 实现点击返回按钮就返回到聊天界面
2016/12/15 Javascript
Bootstrap CSS布局之按钮
2016/12/17 Javascript
Three.js基础部分学习
2017/01/08 Javascript
jquery将标签元素的高设为屏幕的百分比
2017/04/19 jQuery
Vue自定义弹窗指令的实现代码
2018/08/13 Javascript
Angular 利用路由跳转到指定页面的指定位置方法
2018/08/31 Javascript
JavaScript switch语句使用方法简介
2019/12/30 Javascript
Python多线程中阻塞(join)与锁(Lock)使用误区解析
2018/04/27 Python
深入浅析Python的类
2018/06/22 Python
Python爬虫框架Scrapy基本用法入门教程
2018/07/26 Python
python调用matlab的m自定义函数方法
2019/02/18 Python
Python序列对象与String类型内置方法详解
2019/10/22 Python
Python多线程thread及模块使用实例
2020/04/28 Python
Python读写Excel表格的方法
2021/03/02 Python
CSS3实现的文本3D效果附图
2014/09/03 HTML / CSS
纯CSS3实现移动端展开和收起效果的示例代码
2020/04/26 HTML / CSS
Canvas绘制浮动球效果的示例
2017/12/29 HTML / CSS
当当网官方旗舰店:中国图书销售夺金品牌
2018/04/02 全球购物
BabyBjörn婴儿背带法国官网:BabyBjorn法国
2018/06/16 全球购物
《谁的本领大》教后反思
2014/04/25 职场文书
四风问题查摆剖析材料
2014/10/11 职场文书
护理医院见习报告
2014/11/03 职场文书
学生自我评语
2015/01/04 职场文书
慰问信范文
2015/02/14 职场文书
Python爬虫基础之爬虫的分类知识总结
2021/05/13 Python
十大冰系宝可梦排名,颜值最高的阿罗拉九尾,第三使用率第一
2022/03/18 日漫
SQL SERVER中的流程控制语句
2022/05/25 SQL Server