动态规划与记忆化搜索的异同

相同点:1.两者都需要满足一个条件,即我这一步的最优决策是可以基于上一步决策确定后的结果来求出的。 意思说我在上一步决策确定后,我做这一步决策是不会影响上一步决策的。 2.都利用了递归的思想,即在一个结果的基础上去求解下一个结果,最后求出目标解

不同点:I.动态规划:动态规划的关键在于推出一个递推方程,他的求解结果是自上而下的; eg:

 for(int i=2; i<=f; i++){
        for(int j=1; j<=v; j++){
            for(int k=1; k<j; k++)
                dp[i][j]=max(dp[i][j],dp[i-1][k]+mp[i][j]);//需要明确推出上一步和这一步之间的关系
        }
    }

可以看到,我们的思路是用上一个最优解来维护下一个最优解,思路是一个顺着的思路

II.记忆化搜索:其实把记忆化搜索看做一种另类的dfs更好理解一点,我们还是跟dfs一样向下搜索 (注意这里把记忆化搜索看做一个向下的顺序,感觉上像是最底层的最优解一步一步向上回 溯,得到目标解),只是当我们搜索的值在之前已经求出时,我们就可以直接返回,不需要继续向 下递归,因为我们后面的求解是不会影响前面的步骤的(前面的步骤已经给后面的步骤设置好 了相应的限制,在这个基础上求解这种情况下这一步的最优解),这就是记忆化 。 eg:

int dfs(int fl, int bt){
   if(dp[fl][bt]!=0)
       return dp[fl][bt];
    int temp=0,ans=0;
    if(fl==f)
        return dp[fl][bt]=mp[fl][bt];
    for(int i=bt+1; i<=v-(f-fl)+1; i++){//这里已经给了条件!
       temp=dfs(fl+1,i)+mp[fl][bt];//可以看到我只关心下一步结果
        if(ans<temp){
            ans=temp;
        }
    }
    dp[fl][bt]=ans;
    return ans;
}

alt

(学习动态规划与记忆化搜索的初印象)

全部评论

相关推荐

11-29 00:55
门头沟学院
区域赛银,邀请赛金,打算十二月打下Java基础、背点八股、写个外卖后去投福建小厂的寒假实习,简历应该怎么写呢?以及福州/和厦门有推荐的小厂吗?
牛客53210502...:简历一页:把区域银,邀请赛金标粗,其他的奖除非凑一页否则没有必要写。或者多页:每个站一行这样都列出来。项目经历看看牛客其他人是怎么写的,写的不好呢。简历打磨好按部就班没问题的
点赞 评论 收藏
分享
FFFoly:我也是,现在已经到了学长说的 能面试侃侃而谈的阶段了,但是已经没有公司给我面了
远程面试的尴尬瞬间
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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