如何在概念上实现暴力/树遍历?

时间:2014-03-12 23:02:09

标签: python python-2.7 tree brute-force

作为一名初学程序员,我不知道如何在概念上考虑暴力破解。我的思绪无法理解如何编写将尝试各种可能性的代码。我的答案是递归,但正如您将在下面看到的那样,我失败了。

如果您需要full source

我有一个我想解决的问题。这是一个代码片段(还有其他功能,但没有理由在这里包含它们,它们只是做背景工作):

def initiate(seen):
        step_segment = []
        STATS = [250,0,0,0,13,0]

        if len(seen) >= 256:                    # when to escape the recursion
            return seen
        while (len(step_segment)) < 128:
            step_segment, STATS = take_step(step_segment, STATS)
            if STATS[5] == "B":                         # if there is a battle
                if STATS[0] in seen:             # if battle has been done before
                    status = seen.index(STATS[0])       # get battle status:
                    status += 1             # which is next to step_id (= G or B)
                    if seen[status] == "B":  # for seen battles, try Glitch ("G")
                        step_segment = do_glitch(step_segment, STATS)
                else:
                    step_segment, STATS = do_fight(step_segment, STATS) # fight
                seen = seen + [STATS[0],STATS[5]]

        time = get_frames(step_segment)
        print "\nTime:", time
        print seen
        return initiate(seen)

目标:我想通过细分生成每个可能决策的列表,以及需要多长时间。

说明

  1. 我会迈出一步(只有一个方向:向前)。每次我迈出一步,我的统计数据都会更新。这需要一步并更新统计信息:step_segment, STATS = take_step(step_segment, STATS)

  2. 保留所采取的步骤列表以及统计信息 step_segment。这是我可以撤消&#39;任意数量的 步骤,如果我想。撤消步骤调用函数: step_segment, STATS = undo_step(step_segment, STATS)

  3. 我可以看到我目前的路线走了多长时间:time = frames(step_segment)

  4. 在某些时候,我会进入一场战斗。我什么时候开始战斗 STATS[5] == "B"

  5. 当有战斗我必须做出决定时,我只有两个选择: i。对抗 战斗(B),或 ii。逃跑故障(G)。

  6. 如果我想打架,我会:step_segment = do_fight(step_segment, STATS)。这也记录了我选择与step_segment中的统计数据一起战斗。 (所以我可以撤消它,如果我想的话。)

  7. 如果我想跑掉毛刺,我会:step_segment = do_glitch(step_segment,STATS)

  8. 我希望看到Glitch&amp; amp;战斗(当我到达战斗时,只有两个选择)。

    目前,我的代码非常糟糕,并没有尝试所有可能性。我真的不知道如何为所有可能性编码。

    所以,这就是我在这里的原因。在面对决策时,如何实现尝试所有可能性的方法?

    我理解这个问题具有指数级别的可能性,但幸运的是,最大数量非常小(<1024)。

    我已阅读有关树遍历的内容,但我不知道如何将我的问题放入该格式中。例如,我不知道什么是节点&#39;会在我的问题。我实际上不知道会发生什么......这就是我要问的原因。

0 个答案:

没有答案