递归树的速度/结构优化

时间:2015-03-07 11:07:05

标签: python performance optimization nested

编辑 - >简短版本:

在Python中,与C不同,如果我将参数传递给函数I -say:dict-,函数调用中所做的更改将反映在外部(就好像我传递了一个指针而不仅仅是值)< / p>

我想避免这样:

  • - &GT;我复制了我的dict并将副本传递给我的函数

但是我的dict的价值可能是某些词典,直到无限期深度

  • - &GT;递归副本很长。

问题:什么是pythonic方式呢?


长版:

我正在使用Python中的n位代码编写一个大师级游戏机器人。

  

你试着猜测代码,每次尝试都会得到一个答案,就你有多少白/黑/无,这意味着resp。 “好数字好位置”/“好位错误位置”/“错误数字”(但你不知道白人/黑人/没有参考哪个数字)

我分析答案并用存储白/黑/无字典的字典构建一个可能性树。 我在一个列表中存储了代码中数字0-9的可能位置的地图(一个数字可以出现不止一次)。

Ex:对于一个3位数的游戏,我将[[x,y1,y2,y3] [ - 1,0,1,4] [...] [...] [] [] [] [] [] []]:

  • x:此数字出现在代码中的总次数(默认值为n + 1,即示例中的4),正面含义肯定且负面“至少”
  • y1,y2,..,y代码中的位置:1表示我知道数字位于此位置,0表示不是,而4(或任何)默认
  • 在我的例子中:我知道'1'在代码(-1)中至少出现一次它存在于位置2并且它不存在于位置1并且位置3仍然是假设可能的。 / LI>

当我探索可能性的树时,我会更新此列表。这意味着树的每个分支都有自己的列表副本。 由于我最近发现,与C不同,当我将列表传递给子方法时,在子方法中对其进行的任何更改都会反映在外部列表中,我每次都用一个小方法手动复制我的列表:

def bak_symb(_s):

    _b = [[z for z in _s[i]] for i in xrange(10)]
    return _b

现在,我描述了我的程序并注意到90%的时间花在了

  • 追加() (我的树的分支是嵌套的词典{w:{},b:0,n:{}}我追加到我探索的每个可能的分支)对于每个分支:程序必须找到一个n位代码 或
  • 我的复制功能

所以我有三个问题。

  1. 有没有办法让这个功能更快?
  2. 是否有比我选择的结构更适应的东西(符号的2深度列表和假设的嵌套字典)
  3. 有没有比建造这棵巨大的树更合适的方法
  4. 欢迎所有评论和评论。 我是自学成才,可能错过了一些明显的pythonic做某事的方式。

    最后但并非最不重要的是,我试图找到一个很好的妥协,使这个简短明确,在这里再次毫不犹豫地要求更多的细节。

    提前致谢, 马特

0 个答案:

没有答案