zoukankan      html  css  js  c++  java
  • 分治+递归+回溯+动态递推

    递归状态树

    1.分治

    def divide_conquer(problem,param1,param2,...):
    #recursion terminator 1.递归终止条件
    if proble is None:
        print_result
        return
    
    #prepare data         2.处理当前逻辑
    data = prepare_data(problem)
    subresult1 = split_problem(problem,data)
    #conquer subproblems  3.下探到下一层
    subresult1 = self.divide_conquer(subproblems[0],p1,...)
    subresult2 = self.divide_conquer(subproblems[1],p1,...)
    subresult3 = self.divide_conquer(subproblems[2],p1,...)
    ...
    #process adn generate the final result 4. 组合中间结果返回
    result = process_result(subresult1,subresult2,subresult3,...)

    2.回溯

    回溯法采用试错的思想,他尝试分布的去解决一个问题,在分布解决问题的过程中,当它通过尝试发现现有的分布答案不能得到有效的正确答案的时候,他将取消上一步甚至是上几步的计算,再通过其他的可能的分步解答再次尝试寻找问题的答案

    回溯法通过最简单的递归方法来实现,在反复重复上述的步骤可能出现两种情况:

    找到一个可能存在的正确的答案;

    在尝试了所有可能的分步方法后宣告该问题没有答案

    3.递归模板

    本质:寻找重复性

    模拟递归:手写递归树

    递归代码模板
    public void recur(int level,int param){
    //terminator	递归终止条件
    if(level > MAX_LEVEL){
    //process result
    return ;
    }
    //processs current logic	加工当前逻辑
    process(level,param);
    
    //drill down		下沉到下一层
    recur(level:level+1,newParam);
    
    //restore current status	恢复当前层
    

     4.动态递归(动态递推)

     

  • 相关阅读:
    IIS Express中添加MIME
    js立即执行函数IIFE(Immediatelyinvokedfunctionexpression)的几种写法
    笑话一则
    字符串操作类 NET代码积累之一
    UrlRewriter使用详解
    压缩和解压缩的方法 from Byte[]
    C#日期格式化
    JavaScript模拟进度条
    让visual studio 2005 自动为类加版权
    godaddy免费空间完美安装部署dedecms
  • 原文地址:https://www.cnblogs.com/xiaoming521/p/14878942.html
Copyright © 2011-2022 走看看