我正在编写代码将网络图转换为可用于生成虚拟网络的配置文件,而我无法确定vlan中的节点。
vlan:一组节点,其中每个节点与组中的每个其他节点都有一条边。一个节点可以在几个vlan中。
例如:节点a,b,c具有相互连接的边缘,并被视为vlan。节点c,d,e具有彼此连接的边缘,并且被认为是另一个vlan。
我的第一种方法是迭代图中所有节点的列表。在每次迭代中,我将跟随每个边缘并查看当前节点的每个边缘是否是连接节点的边缘。
//If true, node.edges is a vlan
for node in graph
for edge in node.edges
for check_edge in node.edges
if(check_edge != edge && !(check_edge in edge.edges))
return false
return true
这似乎是一个非常糟糕的主意。有什么建议吗?
答案 0 :(得分:0)
你要做的是找到派系,这是一个非常hard problem。没有任何假设,你能做的最好的是指数时间。我建议查看cliques of a fixed sized算法列表,因为它似乎是你想要的最好的(也许)。但是,假设您的算法是O(nk^3)
,其中包含n个节点和k个边,那么似乎并没有显着的改进。重要的是要意识到找到所有派系将是一个非常难以解决的难题。