Python和集合交叉的有效循环(使用树)

时间:2013-03-07 11:18:08

标签: python tree

以下是决策树的属性和值的不同路径。如果我要列举每种组合的树,那么树就会很大。所以...树的每个路径都是叶节点的所有不同属性和值。

如果给出要评分的值列表,即找到具有最常见元素的节点,我使用下面的代码。

尝试完成我想要的最快速的方法是什么?以下是有效的,但时间是最重要的,所以值得使用c并导入到python中。

树结构会更快吗?如果是这样 - 什么结构? scipy weave会更快吗?

nodes = {}
nodes[1] = ['hod=1','hod=2','state=NY','state=LA']
nodes[2] = ['hod=3','hod=4','state=FL','state=NV']
nodes[3] = ['hod=5','hod=6','state=WY','state=HI']
nodes[4] = ['hod=5','hod=6']


score = ['hod=6','state=WY','dow=4']
score_size = len(score)

max_node = -1
max_len = -1
for node_id, node in nodes.iteritems():
    this_node_interection_len = len(set(score).intersection(node))
    if this_node_interection_len>max_len:
        max_len = this_node_interection_len
        max_node = node_id   
    #print node_id, len(set(score).intersection(node))


print 'max_node',3

1 个答案:

答案 0 :(得分:1)

可能更快地将数据存储在堆中,其中len(score.intersection(node))是每个节点的键值。这样,构建初始数据结构会比制作平面字典要慢一些,但是您可以快速检索前几个节点,而不仅仅是具有最高分数的节点。

您还应该考虑使用PyPy或类似的东西来优化性能。