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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。