このコードの時間の複雑さを減らす方法は?
-
29-09-2020 - |
質問
グラフG=(V,E)
を持っています。NODE
のノードV
サブセットのリスト。NODE
の各ノードの隣接ノードのすべての隣接ノードを見つけて、それらの隣人が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])
. 解決
二次時間を取得するには、次の手順を実行します。
$ m= n(\ text {node})$ $ g $
compute $ g '=(g - \ text {node})^ 3 $ 、 2nd
次のことを実行します。 $ u $ 、 $ m $ 、 $ uv \ notin e(g ')$ の場合、 $ uv $ $ g $ 。
このようにあなたはもうshortest_path
を計算する必要はありません。
所属していません cs.stackexchange