zoukankan      html  css  js  c++  java
  • 一些常见的递归算法 动态规划算法

    最大值的递归算法

    对于一个数组 有A[ 1...n ]

    算法调用的时候调用max(n)

    max(i)
    if 
         i = 1 return A[i]
    else
         if A[i]>max(i-1) return A[i]
         else return max(i-1)
         end if
    end if 
    

    平均值的递归算法

    对于数组 a[ 1...n ]

    sum 初值为 0

    index 初值则为1

    调用该算法使用 Ave(a,sum,index)

    Ave(int a[],int sum,int index)
        if(index > n) 
         return sum/(index-1) else return Ave(a,sum+=a[index],index+1)

    汉诺塔的 递归算法

    void move(int n,char left,char middle,char right)
    {
        if(n==1)//移动1号盘
             cout<<n<<"号盘"<<""<<left<<""<<right<<endl;     
        else{
            move(n-1,left,right,middle);
            cout<<n<<"号盘"<<""<<left<<""<<right<<endl;//移动n号盘
            move(n-1,middle,left,right);
        }
    }

    动态规划问题

    Lcs 最长子序列 递归式

    ai = bi L[i,j] = L[i-1,j-1] + 1;
    
    ai!= bi L[i,j] = max{L[i-1,j],L[i,j-1]}

    Floyd 最短路径 递归式

    0- 1 背包的 递归式

    si > j  V[i,j] = V[i-1,j]         //当前背包大小小于物品的体积
    
    si =< j V[i,j] = max{V[i-1,j],V[i-1,j-si]+vi}//当前的背包大小大于等于物品的体积

    当 0 - 1 背包 变成 完全背包的 时候

    可以修改以上的递归式 修改为 一下 格式k = si/j

    si > j  V[i,j] = V[i-1,j]         //当前背包大小小于物品的体积
    
    si =< j V[i,j] = max{V[i-1,j],V[i-1,j-k*si]+k*vi}//当前的背包大小大于等于物品的体积

    3着色问题 的 递归算法

    输入:无向图G=(V,E)
    输出:图的结点3着色向量c[1..n],1≤c[k]≤31≤k≤n)。
    1.    GraphColorRec(1)    
    过程 GraphColorRec(k)
    1.     for color←1 to 3
    2.          c[k]←color
    3.          if c[1..k]为合法着色 then    //部分解或解
    4.              if k=n then             //
    5.              output c[1..n] and exit
    6.              else                 //部分解
    7.              GraphColorRec(k+1)     //进入下一个结点
    8.              end if
    9.          end if
    10.       end for

    4皇后问题 递归算法

    输入:空
    输出:对应于4皇后问题的向量c[1..4](全局量)
        1.    advanced(1)
    过程 advanced(k)
    1.          for col←1 to 4         //最多只有4列
    2.        c[k]←col        
    3.        if c[1..k]是解 then     //部分解或解    
    4.              if k=4 then     //完全解
    5.            output c[1..4] and exit    
    6.              else         //部分解               
    7.                    advanced(k+1) //移至下一行
    8.              end if 
    9.        end if     
    10.           end for
  • 相关阅读:
    uva 11078
    hdu1520(树状dp)
    从Markov Process到Markov Decision Process
    剑指Offer系列编程题详解全集
    L1正则和L2正则的区别详解
    协方差详解
    牛顿法和梯度下降法的比较
    C++ const各种用法总结
    Exploration and Exploitation
    RL Algorithm Components
  • 原文地址:https://www.cnblogs.com/loveincode/p/4596158.html
Copyright © 2011-2022 走看看