我希望能够通过由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)。 – 2012-04-10 00:07:43
谢谢卢克,即时通讯新的Python,所以即时通讯代码尝试。现在它给我的输出并不像我预期的那样,即对于G中的20个节点,它给我的比列表长20个元素多得多。我需要对此进行研究...... – user1320502 2012-04-10 00:19:38