1

接続とネットワークの2つの辞書オブジェクトがあります。これはグラフとして視覚化できます。各ノードはコンピューターであり、接続はコンピューターとノード間のエッジを表します。ネットワークは、コンピュータがその一部となることができる独自のネットワークの辞書オブジェクトです。

1,2  
2,3  
4,5  
5,1 

ノード1から1への
接続の4つの接続情報は、{1-> 1,2-> 1,3-> 1,4->2,5->1}
およびネットワーク{1->0,2->になります。 1}
は、
コンピューター1、2、3、5がn /w1の一部であることを意味します。
コンピューター4はn/w2の一部です。n/w2はn/w1
に相互接続され
ています。その際の接続情報
、読み取られた接続情報ごとに、次のように非順次ループを実行する必要があります

while network.has_key(connections[node1]):
    connections[node1]=network[connections[node1]] 

上記のループを最適化するためのより良い方法はありますか?必要に応じて、目的のためにコード全体を共有できます

4

2 に答える 2

2

私はあなたの質問をよく理解していませんでしたが、グラフ関連の質問に対するストック回答がここに当てはまると思います:

独自のデータ表現やアルゴリズムを考え出すのではなく、NetworkXを使用してください。習得するのは難しいかもしれませんが、長期的には時間と頭痛の種を節約できます。

于 2011-10-03T16:52:29.637 に答える
1
while network.has_key(connections[node1]):
    connections[node1]=network[connections[node1]] 

そのコードは、 に対してnetwork[connections[node1]]1 回、 に対して 1 回、2 回ルックアップをhas_key行い[]ます。

また、繰り返しアクセスしますconnections[node1]

代わりに、次のことができます。

current = connections[node1]
while True:
    try:
         current = network[current]
    except KeyError:
         break
connections[node1] = current

しかし、コードの残りの部分を作り直すことで、より良い改善が得られる可能性があります。しかし、そのためにはhttp://codereview.stackexchange.comの方が優れたサイトであることがわかるかもしれません。

于 2011-10-03T16:51:30.697 に答える