• 递归分治和动态规划


    递归

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

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

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

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

    共性: 找到重复子问题

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

  • 相关阅读:
    Linux基本结构
    Linux诞生
    Python之克隆
    Python之数据类型转换
    gb18030与utf-8
    for循环与while循环
    code::blocks调试
    关于隐式创建vue实例实现简化弹出框组件显示步骤
    blob canvas img dataUrl的互相转换和用处
    观察者模式与发布订阅模式的区别
  • 原文地址:https://www.cnblogs.com/zhaohaiyu/p/13712021.html
Copyright © 2020-2023  润新知