美文网首页
动态规划问题

动态规划问题

作者: smallThree1 | 来源:发表于2017-10-20 11:00 被阅读16次

    面试时被问道一个问题:

    一个10阶楼梯 每次只能走1步或者2步,走到头有几种走法

    当时第一反应想到的是采用暴力枚举的方案,后面回去研究了一下,这就是一个典型的动态规划问题

    1.分析问题

    如果最后只剩一级台阶的时候,这时候有两种情况:


    1.走1步,从第九阶走 2.走2步,从第8阶走


    如果知道从1到9有X钟走法,从1到8有Y种走法,可以得知总共走完需要X+Y种走法,如下图

    用F(10)表示走完10阶,F(9)表示走完9阶,F(8)表示走完8阶,那么F(10) = F(9) + F(8)


    如上图这就可以分析为一个典型的动态规划问题,动态规划是运筹学中的一个概念,核心思想为大事化小,小事化无

    F(1)和F(2)叫做该问题的边界,没有边界的问题是永远得不到结果的,F(N)=F(N-1)+F(N-2)为状态转移公式,F(10)=F(9)+F(8)为最优子结构

    function test($n){

    if($n<1){

    return0;

    }

    if($n==1){

    return1;

    }

    if($n==2){

    return2;

    }

    $res= test1($n-1)+ test1($n-2);

    return$res;

    }

    function test1($n){

    if($n<1){

    return0;

    }

    if($n==1){

    return1;

    }

    if($n==2){

    return2;

    }

    //备忘录算法

    static$map=array();

    if(in_array($n,$map)){

    return$map[$n];

    }else{

    $res= test1($n-1)+ test1($n-2);

    $map[$n]=$res;

    return$res;

    }

    }

    function test2($n){

    if($n==1){

    return1;

    }

    if($n==2){

    return2;

    }

    $a=1;

    $b=2;

    $temp=0;

    for($i=3;$i<=$n;$i++){

    $temp=$a+$b;

    $a=$b;

    $b=$temp;

    }

    return$temp;

    }


    相关文章

      网友评论

          本文标题:动态规划问题

          本文链接:https://www.haomeiwen.com/subject/kyimuxtx.html