如何解决如何使用python随机删除n条边而不断开图
我正在使用 networkx 包,如何随机删除多个边但不会导致任何断开连接(节点数相同)。
我试过对数据帧进行分层采样,但不起作用,不知道该怎么做。 请提供任何建议。
这里我是怎么做的:
removed_edge_cnt = 0
remove_list = set([])
pbar = tqdm(total=n)
while (removed_edge_cnt < n):
removed = True
drop_indices = np.random.choice(orig_data_copy.index,1,replace=False)
edge = orig_data_copy.iloc[drop_indices,:].values.ravel()
orig_data_copy = orig_data_copy.drop(drop_indices) # 不管該邊有沒有要刪掉都要drop避免一直取相同的edge
# print('{}-{}:{}'.format(edge[0],edge[1],G.has_edge(edge[0],edge[1])))
if G.has_edge(edge[0],edge[1]): # 邊存在
G.remove_edge(edge[0],edge[1])
if not nx.is_weakly_connected(G): # 移除是否會造成disconnect
G.add_edge(edge[0],edge[1])
removed = False
if removed:
removed_edge_cnt += 1
remove_list.add((edge[0],edge[1]))
pbar.update(1)
pbar.close()
解决方法
一个完全连通的图是一个从每个节点到另一个节点都有一条路径的图。我假设这就是您所说的“无断开连接”
要检查图是否完全连通,请从任何节点进行深度优先搜索并确认每个节点都被访问过。
因此,删除您的随机边并检查图形是否仍然完全连接。如果没有,请更换链接并重试,直到找到可以移除的边缘。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。