递归
def recursion(level,param): """ level : 层数 Parma: 参数 """ # 1. 递归终止条件 if level > MAX_LEVEL: # 处理结果 return # 2. 处理当前层的逻辑 process(level,param) # 3. 递归到下一层 recursion(level+1,NewParam) # 4.恢复当前层状态
分治
def divide_conquer(problem,param): """ problem: 问题 Parma: 参数 """ # 1. 递归终止条件 if not problem : # 处理结果 return # 2. 拆分子问题 data = prepare_data(problem) subproblems = split_problem(probelm,data) # 3. 调用子问题递归函数 subresult1 = divide_conquer(subproblems[0],p1) subresult2 = divide_conquer(subproblems[1],p1) subresult3 = divide_conquer(subproblems[2],p1) # 4.合并子问题 result = process_result(subresult1,subresult2,subresult3) # 5.恢复当前层状态
动态规划
动态规划(Dynamic programming,简称DP)是一种在数学、管理科学、计算机科学、经济学和生物信息学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。
动态规划常常适用于有重叠子问题[和最优子结构性质的问题,动态规划方法所耗时间往往远少于朴素解法。
动态规划背后的基本思想非常简单。大致上,若要解一个给定问题,我们需要解其不同部分(即子问题),再根据子问题的解以得出原问题的解。
动态规划 和 递归或者分治没有根本上的区别
共性: 找到重复子问题
差异性: 最优子结构、中途可以淘汰次优解