networkx.algorithms.connectivity.edge_augmentation.k_edge_augmentation
的用法。用法:
k_edge_augmentation(G, k, avail=None, weight=None, partial=False)
找到k-edge-connect G 的边集。
将增强的边添加到 G 使得无法断开 G,除非删除 k 或更多边。此函数使用可用的最有效函数(取决于 k 的值以及问题是加权还是未加权)来搜索k-edge-connects G 的可用边的最小权重子集。通常,找到k-edge-augmentation 是NP-hard,所以解决方案并不一定是最小的。此外,k-edge-augmentation 可能不存在。
- G:NetworkX 图
一个无向图。
- k:整数
所需的边连接
- avail:dict 或一组 2 或 3 个元组
可用于增强的可用边。
如果未指定,则 G 的补集中的所有边都可用。否则,每个项目都是可用边(具有可选权重)。
在未加权的情况下,每个项目都是一条边
(u, v)
。在加权情况下,每个项目都是一个三元组
(u, v, d)
或带有项目(u, v): d
的字典。第三项d
可以是字典或实数。如果d
是一个字典d[weight]
对应权重。- weight:string
如果
avail
是一组 3 元组,其中每个元组中的第三项是字典,则用于查找权重的键。- partial:布尔值
如果 partial 为 True 且不存在可行的 k-edge-augmentation,则生成所有的 partial k-edge-augmentation。将部分增强中的边添加到 G,最小化 k-edge-connected 组件的数量并最大化这些组件之间的边连接。有关详细信息,请参阅
partial_k_edge_augmentation()
。
- edge:元组
一旦添加到 G 中,将导致 G 变为 k-edge-connected 的边。如果 partial 为 False,如果这是不可能的,则会引发错误。否则,生成的边会形成部分增强,其中k-edge-connects G 的任何可能部分,并最大限度地连接其余部分。
- NetworkXUnfeasible
如果 partial 为 False 并且不存在 k-edge-augmentation。
- NetworkXNotImplemented
如果输入图是有向图或多重图。
- ValueError:
如果 k 小于 1
参数:
生成(Yield):
抛出:
注意:
当 k=1 时,这将返回最优解。
当 k=2 且
avail
为 None 时,这将返回最优解。否则,当 k=2 时,这将返回最优解的 2 近似值。- 对于 k>3,这个问题是NP-hard,它使用随机算法
产生一个可行的解决方案,但不保证解决方案的权重。
例子:
>>> # Unweighted cases >>> G = nx.path_graph((1, 2, 3, 4)) >>> G.add_node(5) >>> sorted(nx.k_edge_augmentation(G, k=1)) [(1, 5)] >>> sorted(nx.k_edge_augmentation(G, k=2)) [(1, 5), (5, 4)] >>> sorted(nx.k_edge_augmentation(G, k=3)) [(1, 4), (1, 5), (2, 5), (3, 5), (4, 5)] >>> complement = list(nx.k_edge_augmentation(G, k=5, partial=True)) >>> G.add_edges_from(complement) >>> nx.edge_connectivity(G) 4
>>> # Weighted cases >>> G = nx.path_graph((1, 2, 3, 4)) >>> G.add_node(5) >>> # avail can be a tuple with a dict >>> avail = [(1, 5, {"weight": 11}), (2, 5, {"weight": 10})] >>> sorted(nx.k_edge_augmentation(G, k=1, avail=avail, weight="weight")) [(2, 5)] >>> # or avail can be a 3-tuple with a real number >>> avail = [(1, 5, 11), (2, 5, 10), (4, 3, 1), (4, 5, 51)] >>> sorted(nx.k_edge_augmentation(G, k=2, avail=avail)) [(1, 5), (2, 5), (4, 5)] >>> # or avail can be a dict >>> avail = {(1, 5): 11, (2, 5): 10, (4, 3): 1, (4, 5): 51} >>> sorted(nx.k_edge_augmentation(G, k=2, avail=avail)) [(1, 5), (2, 5), (4, 5)] >>> # If augmentation is infeasible, then a partial solution can be found >>> avail = {(1, 5): 11} >>> sorted(nx.k_edge_augmentation(G, k=2, avail=avail, partial=True)) [(1, 5)]
相关用法
- Python NetworkX k_edge_components用法及代码示例
- Python NetworkX k_edge_subgraphs用法及代码示例
- Python NetworkX k_clique_communities用法及代码示例
- Python NetworkX k_components用法及代码示例
- Python NetworkX katz_centrality用法及代码示例
- Python NetworkX kamada_kawai_layout用法及代码示例
- Python NetworkX katz_centrality_numpy用法及代码示例
- Python NetworkX kosaraju_strongly_connected_components用法及代码示例
- Python NetworkX karate_club_graph用法及代码示例
- Python NetworkX negative_edge_cycle用法及代码示例
- Python NetworkX voronoi_cells用法及代码示例
- Python NetworkX numerical_edge_match用法及代码示例
- Python NetworkX inverse_line_graph用法及代码示例
- Python NetworkX LFR_benchmark_graph用法及代码示例
- Python NetworkX write_graph6用法及代码示例
- Python NetworkX DiGraph.__contains__用法及代码示例
- Python NetworkX average_degree_connectivity用法及代码示例
- Python NetworkX eulerian_circuit用法及代码示例
- Python NetworkX single_source_dijkstra_path_length用法及代码示例
- Python NetworkX from_dict_of_dicts用法及代码示例
- Python NetworkX weisfeiler_lehman_subgraph_hashes用法及代码示例
- Python NetworkX transitive_closure_dag用法及代码示例
- Python NetworkX intersection用法及代码示例
- Python NetworkX MultiGraph.size用法及代码示例
- Python NetworkX Graph.size用法及代码示例
注:本文由纯净天空筛选整理自networkx.org大神的英文原创作品 networkx.algorithms.connectivity.edge_augmentation.k_edge_augmentation。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。