python - 在有向(或无向)图中查找所有 st 节点切割
问题描述
我需要在 st 图中找到所有可能的节点切割。这是一个有向图,但找到无向图的切割就足够了(我可以在之后过滤它们)。
Networkx 提供以下功能:
但它不是针对有向图实现的(没问题),并且它不考虑 st graphs,因此该解决方案在我的情况下没有用(至少对于函数包含源 S 的割集)。
我尝试实现组合方法(检查所有可能的节点组合),它可以工作,但效率极低,从超过 10 个节点的图形开始,执行时间过长。
我试图检查是否可以修改诸如minimum_st_node_cut之类的网络功能,但没有成功,我不知道是否可以列出所有可能的削减。
如果它为此提供了一些有用的工具(甚至是编程语言,如果需要),我也可以使用任何其他库。
解决方案
IGraph提供了一种算法,但我无法评估它的计算效率。对于我的 93 个节点的实例,它直到我在几个小时后停止它才能找到切割。不过,它适用于较小的实例:
import numpy as np
from igraph import Graph
# Create adjacancy matrix
adjacency = np.array([ [0,0,0],
[0,0,1],
[1,0,0],])
iG = Graph.Adjacency((adjacency > 0).tolist())
cuts = iG.all_st_cuts(1,2)
推荐阅读
- python - Opencv 屏幕记录作为视频处理的输入
- zeromq - (Windows) 将 ZeroMQ 添加到 ZeroBrane?
- python - 如何让我在 discord.py 中的机器人遍历列表并一一显示元素
- python - 保存文件适用于 Jupyter 和 Pycharm,但不适用于 VSCode
- ruby-on-rails - 使用 TimeCop 比较日期时,获得几分之一秒的差异而不是相等的时间
- kotlin - 如何格式化包含列表中记录集的数据类
- pytorch - Pytorch cifar10 图像未标准化
- python - AttributeError:“NoneType”对象没有属性“label_map”
- lua - 在 Lua 中编辑具有不确定维度的多维表
- python - 无法从课外更改图像源