了解回溯

时间:2018-03-16 04:01:32

标签: python backtracking

def bitstr(n,s):
    if n==1:return s
    return[digit+ bits for digit in bitstr(1,s) for bits in bitstr(n-1,s)]
print(bitstr(3,'abc'))

请解释这段代码中发生的事情。如何回溯?

1 个答案:

答案 0 :(得分:0)

由于巨大的return语句,很难理解此代码。

基本上,除非达到终止条件,否则在所有情况下都将递归。所有回溯都是具有特定终止条件的深度优先搜索。

考虑走过一个迷宫,在每个迷宫中做出决定的地方,该决定就是对调用堆栈的调用(执行深度优先搜索)...如果到达终点,则可以返回路径。但是,如果达到死胡同,则想退出某个决定,实质上就是退出调用堆栈中的函数。

因此,当我想到回溯时,我会在意

  1. 状态
  2. 决定
  3. 基本案例(终止条件)

每当我们不处于基本情况下时,我们都会通过决策来更改状态,我们会通过在该代码的第3行上进行决策来更改状态,并针对第2行上的终止条件进行决策。

this video中很好地解释了回溯。