递归分治和动态规划

递归

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)是一种在数学、管理科学、计算机科学、经济学和生物信息学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。

动态规划常常适用于有重叠子问题[和最优子结构性质的问题,动态规划方法所耗时间往往远少于朴素解法。

动态规划背后的基本思想非常简单。大致上,若要解一个给定问题,我们需要解其不同部分(即子问题),再根据子问题的解以得出原问题的解。

动态规划 和 递归或者分治没有根本上的区别

共性: 找到重复子问题

差异性: 最优子结构、中途可以淘汰次优解

原文地址:https://www.cnblogs.com/zhaohaiyu/p/13712021.html