递归分治和动态规划

递归

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

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

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

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

共性: 找到重复子问题

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

全部评论

相关推荐

不愿透露姓名的神秘牛友
06-19 19:05
点赞 评论 收藏
分享
05-19 19:57
蚌埠学院 Python
2237:Gpa70不算高,建议只写排名,个人技能不在多而在精,缩到8条以内。项目留一个含金量高的,减少间距弄到一页,硕士简历也就一页,本科不要写很多
点赞 评论 收藏
分享
_mos_:忍耐王
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务