递归
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)是一种在数学、管理科学、计算机科学、经济学和生物信息学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。
动态规划常常适用于有重叠子问题[和最优子结构性质的问题,动态规划方法所耗时间往往远少于朴素解法。
动态规划背后的基本思想非常简单。大致上,若要解一个给定问题,我们需要解其不同部分(即子问题),再根据子问题的解以得出原问题的解。
动态规划 和 递归或者分治没有根本上的区别
共性: 找到重复子问题
差异性: 最优子结构、中途可以淘汰次优解