码迷,mamicode.com
首页 > 编程语言 > 详细

一些常见的递归算法 动态规划算法

时间:2015-06-23 21:17:10      阅读:269      评论:0      收藏:0      [点我收藏+]

标签:

最大值的递归算法

对于一个数组 有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

 

一些常见的递归算法 动态规划算法

标签:

原文地址:http://www.cnblogs.com/FLFL/p/4596158.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!