安琪拉教鲁班学算法之动态规划 - Go语言中文社区

安琪拉教鲁班学算法之动态规划


《安琪拉与面试官二三事》系列文章
一个HashMap能跟面试官扯上半个小时
一个synchronized跟面试官扯了半个小时

《安琪拉教鲁班学算法》系列文章

安琪拉教鲁班学算法之动态规划

动态规则是算法中非常重要的一类方法,书本上很多都是列出一堆公式,如果是初学者需要花费很多心血练习之后,才会有那么一刻有顿悟的感觉!本文希望通过使用王者峡谷二位脆皮英雄对话的方式讲解动态规划,让大家在轻松愉快的氛围中搞懂动态规划。

后续会持续更新算法:重点讲 排序、递归、回溯、贪心、深度/广度优先搜索等,顺序不定,希望尽早了解的可以给我留言。


鲁班:安琪拉,你听过动态规划吗?

安琪拉:当然听说过,王者峡谷有个传闻,谁掌握了动态规划,就相当于拿到了屠龙刀,可以biubiubiu 三下砍死大龙。

鲁班:安琪拉妹妹,你能给我讲讲什么是动态规划吗?

安琪拉:鲁班哥哥,看你求知欲这么强,咱俩又都是脆皮的份上,我给你讲讲动态规划。

鲁班:已经搬好小板凳。

安琪拉:动态规划是一种求问题最优解的方法。通用的思路:将问题的解转化成==> 求解子问题,> 递推,>最小子问题为可直接获得的初始状态。

鲁班:你这么说完我还是很蒙啊! 能不能不打嘴炮,给我演示一下这个技能呗!

安琪拉:可以啊!我们找个小怪演示一下,请看第一题(斐波拉契数列):

image-20200404221620951

这个数列特点是从第三项开始,每一项都是前二项的和:2 = 1 + 1,3 = 1 + 2;

鲁班:这个我知道怎么做,你看我的,手写代码在此:

public class FibonacciSequence {
		//求斐波拉契第n项
    public int fibonacci(int n){
        if(n == 1 || n == 2){
            return 1;
        }else{
            return fibonacci(n-1) + fibonacci(n-2);
        }
    }
}

安琪拉:你这个解法其实就有动态规划的思想,但是还可以做些优化!因为中间有大量的重复计算。

比如,我们求数列中第100个数是多少? 递归会如下所示:

image-20200404225033261

安琪拉: 如

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/zhengwangzw/article/details/105321718
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-04-19 10:23:07
  • 阅读 ( 1388 )
  • 分类:算法

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢