문제

그래프 G=(V,E)가 있습니다.NODE의 Nodes V 서브 세트 목록입니다.NODE에서 각 노드의 모든 인접 노드를 찾아서 이웃 사람들이 2보다 큰 거리가있는 경우에 가장자리를 추가하고 싶습니다.이 코드의 시간 복잡성을 2 차 타임 이하로 줄일 수 있습니다.

import networkx as nx
import random

G = nx.erdos_renyi_graph(30, 0.05)

node=[]
for j in range(5): 
        node.append(random.randint(1,30))

for i in node:
    lst=list(G.neighbors(i))
    if(len(lst)>1):
         for j in range(len(lst)):
             for k in range(j+1,len(lst)):
                 if(len(nx.shortest_path(G,lst[j],lst[k]))>2):
                     G.add_edge(lst[j],lst[k])
.

도움이 되었습니까?

해결책

2 차 시간을 얻으려면 다음을 수행하십시오.

$ m= n (\ text {node}) $ $ g $ .

Compute $ g '= (g - \ text {node}) ^ 3 $ , 2nd 전원 그래프 $ g $ 노드에서 정점이없는

다음을 수행합니다. $ u $ $ V $ $ M $ , $ UV \ NOTIN (g ') $ , $ uv $ $ g $ .

이 방법으로 shortest_path를 더 이상 계산할 필요가 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 cs.stackexchange
scroll top