k_edge_augmentation#
- k_edge_augmentation(G, k, avail=None, weight=None, partial=False)[源代码]#
查找k-edge-connect g的边集。
如果不去除k或更多的边,将边从增广添加到g,则不可能断开g。此函数使用最有效的可用函数(取决于k的值,如果问题是加权的或未加权的)来搜索k-edge连接g的可用边的最小权重子集。通常,找到k-edge增强是NP困难的,因此解决方案不会浪费到最小。此外,K边增广可能不存在。
- 参数
- G网络X图表
无向图。
- k整数
所需的边连接
- avail字典或一组2或3个元组
可用于增强的可用边。
如果未指定,则G补码中的所有边都可用。否则,每个项目都是一个可用的边缘(具有可选的权重)。
在未加权的情况下,每个项都是边
(u, v)
.在加权的情况下,每个项都是3元组
(u, v, d)
或是带着物品的口述(u, v): d
. 第三项,d
,可以是字典或实数。如果d
是一本字典d[weight]
与重量相对应。- weight字符串
在以下情况下用于查找权重的键
avail
是一组3元组,其中每个元组中的第三项是词典。- partial布尔值
如果Partial为True并且不存在可行的k边扩充,则生成所有的部分k边扩充。将部分增强中的边添加到G中,最小化k边连接的分量的数量,并最大化这些分量之间的边连通性。有关详细信息,请参见
partial_k_edge_augmentation()
。
- 产量
- edge元组
一旦与G相加,就会使G成为k边连通的边。如果PARTIAL为FALSE,则在不可能的情况下引发错误。否则,生成的边形成部分增强,它k-边连接G的任何可能的部分,并最大限度地连接其余部分。
- 加薪
- NetworkXUnfeasible
如果部分是假的,并且不存在k边增强。
- NetworkXNotImplemented
如果输入图是有向图或多重图。
- ValueError:
如果k小于1
笔记
当k=1时,返回最优解。
当k=2时
avail
如果为“无”,则返回最佳解。否则,当k=2时,返回最优解的2-近似值。- 对于k>3,这个问题是NP困难的,这使用了一个随机算法
产生一个可行的解决方案,但不能保证解决方案的重量。
实例
>>> # 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)]