官术网_书友最值得收藏!

Backtracking

Backtracking is a form of recursion that is particularly useful for types of problems such as traversing tree structures, where we are presented with a number of options at each node, from which we must choose one. Subsequently we are presented with a different set of options, and depending on the series of choices made either a goal state or a dead end is reached. If it is the latter, we must backtrack to a previous node and traverse a different branch. Backtracking is a divide and conquer method for exhaustive search. Importantly backtracking prunes branches that cannot give a result.

An example of back tracking is given in the following example. Here, we have used a recursive approach to generating all the possible permutations of a given string, s, of a given length n:

    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'))

This generates the following output:

Notice the double list compression and the two recursive calls within this comprehension. This recursively concatenates each element of the initial sequence, returned when n = 1, with each element of the string generated in the previous recursive call. In this sense it is backtracking to uncover previously ingenerated combinations. The final string that is returned is all n letter combinations of the initial string.

主站蜘蛛池模板: 库伦旗| 独山县| 青川县| 南陵县| 星子县| 五指山市| 呼图壁县| 专栏| 全椒县| 汉沽区| 伊吾县| 河北区| 营山县| 肇庆市| 琼中| 宁南县| 甘孜县| 兰州市| 田林县| 左云县| 玉田县| 拉萨市| 乡宁县| 巨野县| 望奎县| 白玉县| 连云港市| 富源县| 安庆市| 永州市| 南皮县| 阿尔山市| 台北市| 呼伦贝尔市| 芦溪县| 大渡口区| 青岛市| 泸州市| 新晃| 阿合奇县| 资中县|