이 코드의 시간 복잡성을 줄이는 방법은 무엇입니까?
-
29-09-2020 - |
문제
그래프 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
를 더 이상 계산할 필요가 없습니다.
제휴하지 않습니다 cs.stackexchange