前提・質問
複雑ネットワークの無向辺グラフで、ノードの位置が100m以内の時、ノードとノードをエッジ(枝)で繋げるプログラムを書いています。ノードの数は7000個あり、それぞれに座標(x,y)が与えられています。
リストの中身はnode_list((id,x,y))で、ループを回して、x,yの差が100m以内のノード同士を探しています。
1つのノードに対して、すべてのノードでx,yの差を求めているため、ループの回数が7000の階乗回回しています。
ループの回数を減らすためにはどうしたらいいでしょうか?
発生している問題
7000!回ループなので、処理が重くて計算ができないです。
該当のソースコード
for i in range(len(node_list)):
for j in range(len(node_list) - i):
x_difference = node_list[i][1] - node_list[j][1]
y_difference = node_list[i][2] - node_list[j][2]
if abs(x_difference) < 100 and abs(y_difference) < 100:
if node_list[i][0] != node_list[j][0]:
if (node_list[i][0], node_list[j][0]) not in edge_list and (
node_list[j][0], node_list[i][0]) not in edge_list:
node_edge_list.append((node_list[i][0], node_list[j][0]))
edge_list.append((node_list[i][0], node_list[j][0]))
edge_list.append((node_list[j][0], node_list[i][0]))
python3
回答3件
あなたの回答
tips
プレビュー