如何改进Python代码以应用于有向图的n个节点?

2024-05-14 22:09:59 发布

您现在位置:Python中文网/ 问答频道 /正文

对于四节点图(a、B、C、D),有6条潜在边:AB、AC、AD、BC、BD、CD。选择边的概率为0.2。你知道吗

由于只有38个连接图的边的可能组合,下面的代码可以计算概率。你知道吗

但是,它是组合的手动输入。所以我的问题是,如果有6个节点(A,B,C,D,E,F)有15个可能的边,我如何修改我的代码以应用于n个节点。你知道吗

如果节点数大于4,则此代码将不可行。你知道吗

有没有办法不输入连通图的所有可能组合就解决这个问题?你知道吗

def graph_sim(X):    
possible_edges = ['AB', 'AC', 'AD', 'BC', 'BD', 'CD'] 
distinct_connected_graphs = [
      ['AB', 'AC', 'AD', 'BC', 'BD', 'CD'], 
      ['AB', 'AC', 'AD', 'BC', 'BD'], ['AB', 'AC', 'BC', 'BD', 'CD'], ['AB', 'AC', 'AD', 'BD', 'CD'],
      ['AB', 'AC', 'AD', 'BC', 'CD'], ['AC', 'AD', 'BC', 'BD', 'CD'], ['AB', 'AD', 'BC', 'BD', 'CD'],
      ['AB', 'AC', 'AD', 'BC'], ['AB', 'AC', 'AD', 'BD'], ['AB', 'AC', 'AD', 'CD'],
      ['AB', 'AC', 'BC', 'BD'], ['AB', 'AC', 'BC', 'CD'], ['AB', 'AC', 'BD', 'CD'],
      ['AB', 'AD', 'BC', 'BD'], ['AB', 'AD', 'BC', 'CD'], ['AB', 'AD', 'BD', 'CD'],
      ['AB', 'BC', 'BD', 'CD'], ['AC', 'AD', 'BC', 'BD'], ['AC', 'AD', 'BC', 'CD'], 
      ['AC', 'AD', 'BD', 'CD'], ['AC', 'BC', 'BD', 'CD'], ['AD', 'BC', 'BD', 'CD'],
      ['AB', 'AC', 'AD'], ['AB', 'AC', 'BD'], ['AB', 'AC', 'CD'], ['AB', 'AD', 'BC'], 
      ['AB', 'AD', 'CD'], ['AB', 'BC', 'BD'], ['AB', 'BC', 'CD'], ['AB', 'BD', 'CD'],
      ['AC', 'BC', 'BD'], ['AC', 'AD', 'BD'], ['AC', 'BC', 'CD'], ['AC', 'AD', 'BC'],
      ['AC', 'BD', 'CD'], ['AD', 'BC', 'BD'], ['AD', 'BC', 'CD'], ['AD', 'BD', 'CD']
                            ]
directed_graph = [
    [edge for prob, edge in zip(np.random.uniform(low= 0.0, high= 1.0, size=6), possible_edges) if prob < 0.2]
    for i in range(X)]
connected_realisations = [i for i in directed_graph if i in distinct_connected_graphs]

print("-------------------------")
print("* The probability that a graph is connected in", X, "realisations is:", len(connected_realisations)/X)
print("* The number of connected graphs in", X, "realisations is:", len(connected_realisations))
return
graph_sim(2000)

Tags: 代码infor节点abcdbdad

热门问题