当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python NetworkX maximum_spanning_edges用法及代码示例


本文简要介绍 networkx.algorithms.tree.mst.maximum_spanning_edges 的用法。

用法:

maximum_spanning_edges(G, algorithm='kruskal', weight='weight', keys=True, data=True, ignore_nan=False)

在无向加权图的最大生成森林中生成边。

最大生成树是图(树)的子图,具有最大可能的边权总和。生成森林是图的每个连接组件的生成树的联合。

参数

G无向图

一个无向图。如果G 已连接,则算法会找到生成树。否则,会找到一个生成林。

algorithmstring

查找最大生成树时使用的算法。有效选择是‘kruskal’, ‘prim’或‘boruvka’。默认为‘kruskal’。

weightstring

用于权重的边数据键(默认 ‘weight’)。

keysbool

除了边之外,是否在多重图中产生边键。如果G 不是多重图,则忽略它。

data布尔型,可选

如果 True 产生边数据以及边。

ignore_nan布尔(默认值:假)

如果发现NaN 作为边权重,通常会引发异常。如果 ignore_nan is True 则忽略该边。

返回

edges迭代器

G 的最大生成树中的边上的迭代器。连接节点 uv 的边表示为元组:(u, v, k, d)(u, v, k)(u, v, d)(u, v)

如果G是多图,keys表示边键k是否会在边元组的第三个位置上报。 data 指示边数据字典d 是否会出现在边元组的末尾。

如果G 不是多重图,则如果data 为True,则元组为(u, v, d),如果data 为False,则为(u, v)

注意

对于 Borůvka 的算法,每条边必须有一个权重属性,并且每条边的权重必须是不同的。

对于其他算法,如果图边没有权重属性,则将使用默认权重 1。

来自 David Eppstein 的修改代码,2006 年 4 月 http://www.ics.uci.edu/~eppstein/PADS/

例子

>>> from networkx.algorithms import tree

通过 Kruskal 算法找到最大跨越边

>>> G = nx.cycle_graph(4)
>>> G.add_edge(0, 3, weight=2)
>>> mst = tree.maximum_spanning_edges(G, algorithm="kruskal", data=False)
>>> edgelist = list(mst)
>>> sorted(sorted(e) for e in edgelist)
[[0, 1], [0, 3], [1, 2]]

通过 Prim 算法找到最大跨越边

>>> G = nx.cycle_graph(4)
>>> G.add_edge(0, 3, weight=2)  # assign weight 2 to edge 0-3
>>> mst = tree.maximum_spanning_edges(G, algorithm="prim", data=False)
>>> edgelist = list(mst)
>>> sorted(sorted(e) for e in edgelist)
[[0, 1], [0, 3], [2, 3]]

相关用法


注:本文由纯净天空筛选整理自networkx.org大神的英文原创作品 networkx.algorithms.tree.mst.maximum_spanning_edges。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。