我有两个字典对象,连接和网络。这可以显示为图形,其中每个节点是计算机,连接描绘计算机和节点之间的边缘。网络是独特网络的字典对象,其中计算机可以作为其中一部分,对于前
1,2
2,3
4,5
5,1
是节点1到1的四个连接信息
因此,连接将是{1-> 1,2-> 1,3-> 1,4-> 2,5-> 1}
和网络{1->> 0,2-> 1}
这意味着
计算机1,2,3,5是n / w 1的一部分
计算机4是n / w 2的一部分
再次n / w 2与n / w 1互连
我必须阅读一个包含数千个此类连接信息的文件
这样做时,对于每个连接信息读取,我必须执行如下的非顺序循环
while network.has_key(connections[node1]):
connections[node1]=network[connections[node1]]
有没有更好的方法来优化上述循环?如果需要,我可以为此目的共享我的整个代码
答案 0 :(得分:2)
我真的不明白你的问题,但我觉得图表相关问题的股票回答适用于此:
使用NetworkX而不是尝试提供自己的数据表示和算法。它可能更难学,但从长远来看,它可以节省您的时间和头痛。
答案 1 :(得分:1)
while network.has_key(connections[node1]):
connections[node1]=network[connections[node1]]
该代码为network[connections[node1]]
执行两次has_key
查询,为[]
执行一次查找。
它还重复访问connections[node1]
相反,你可以这样做:
current = connections[node1]
while True:
try:
current = network[current]
except KeyError:
break
connections[node1] = current
但是,改进其余代码可能会有更好的改进。但为此你可能会发现http://codereview.stackexchange.com是一个更好的网站。