私はn個のノードで構成されたグラフGを使いたいと考えていました。そして、各n番目のノードについて、その隣人の辞書を開きます。どのネイバーが最大の数値属性を持っているかを調べる。少なくとも100人の隣人が存在し得る。そしてすなわちノードの近隣から最大のノードを返します
[node,biggestneighbor]
[node,biggestneighbor]
[node,biggestneighbor]
このようなノードの外観の属性データ、各ノードのリストとその最大の隣人を返す:
G.node[0]
{'type': 'a', 'pos': [0.76, 0.11]}
と私が興味を持って属性がある
G.node[0]['pos'][0]
0.76
これは誰でも知っていますか?そうでない場合、開始ロジックは良い出発点のように見えますか?またはよりスマートな人ははるかに良いアイデアを持っていますか?
def thebiggestneighbor(G,attribute,nodes=None):
if nodes is None:
node_set = G
else:
node_set = G.subgraph(nodes)
node=G.node
for u,nbrsdict in G.adjacency_iter():
if u not in node_set:
continue
for v,eattr in nbrsdict.items():
vattr=node[v].get(attribute,None)
# then something like this but for many nodes. probably better subtraction
# of all nodes from each other and which one yeilds the biggest numner
#
# if x.[vattra] > x.[vattrb] then
# a
# elif x.[vattra] < x.[vattrb] then
# b
yield (u,b)
数値属性でソートされたリストのネイバーを維持すると、問題はO(n)になります。ノードを追加する時間はO(nlogn)になります。 –
ルークに感謝、私はPythonに新しいので、ypurコードを試しています。今のところ私に期待通りの出力が得られません。つまり、20ノードのGで、リスト20のelemnts以上の長さを私に与えてくれます。私はこれを行う必要があります... – user1320502