用 Excel 做点无聊的题 —— “动态规划” 入门理解(上)
大家好!上一周我们发布了教学体系改革的想法,得到了各位朋友的热情反馈。我们已经将这四十多条意见和建议保存并归类,作为下一步工作的重要参考。这里再次感谢大家对我们的理解和支持!
课程间歇期,学习不能停。所以这段时间我们仍然跟以前一样,每周继续更新Python和VBA的技巧与知识。而今天要介绍的,就是与上次“迭代和递归”密切相关的重要算法思想 —— “动态规划” 的入门概念。
很多同学都听说过动态规划,或者曾经在大学里学习过这门课程。不过今天不讲那么专业的内容,只是用我们最熟悉的Excel 、VBA 和 Python,通过几个简单的案例,来了解一下动态规划到底是什么、怎样用它解决实际问题。
先看一个同学今天在Q群里提出的问题:如果有10级台阶,一个人每次可以迈一阶或者两阶,那么从第1阶走到第10阶,一共有多少种走法?
对于这个问题,初学者第一次看到时肯定找不到头绪,一行代码也写不出来。不过别紧张,回忆一下中学时的数学课堂,相信很多人的老师都告诉过我们:如果没有思路,就先列出几个“特例”,然后肉眼观察出规律,就能写成公式。
所以咱们就先用熟悉的Excel,列几个特例出来。比如:一共只有一级台阶时有几种走法、一共有两级台阶时,以及三级和四级台阶时各有几种走法。这几种特例情况因为比较简单,所以拿张纸画一画就能推出答案。比如只有两个台阶时,我们可以选择从地面开始一级级走上去(也就是 0-1-2 ,0 代表地面),也可以选择从地面直接踏上第二级(也就是 0-2 ),所以这种情况下有两种解法。
接下来观察以下上面的表格:随着台阶数量的增加,走法数量也在不断增加,形成了1、2、3、5 这个数列。那么这个数列有没有什么规律呢?
那么问题来了:为什么3级台阶时的走法数量,正好等于1级台阶和2级台阶时走法数量之和呢?仔细想想就会发现,既然每步只能迈上1或2个台阶,因此想登上第三级台阶,一共只有两种方式:或者从第二级迈上来,或者从第一级迈上来(一步迈两阶)。而之前已经算出来,走到第二级有2种走法,所以 “先走到第二级、再一步迈到第三级” 这种方式也就有2种走法。
同样,前面也算出来走到第一级共有1种走法,所以“先走到第一级,然后一步迈到第三级”这种方式也只有1种走法。
因此,走到第三级的两种方式加在一起,就是 2+1=3 种走法。
同理,如果一共有4个台阶,那么迈上第四个台阶也有两种方式:先走到第三级台阶、然后一步迈上来,或者先走到第二级台阶、然后一步跨两层迈上来。
而刚刚我们计算过,走到第三级台阶有3种走法、走到第二级台阶有2种走法,所以两种方式加在一起一共是5种走法。
如此类推,我们会轻易算出任何一级台阶的走法数量。比如走到第五级台阶也只有两种方式:从第四级迈上来或从第三级直接迈上来。而走到第四级有5种走法、第三级有3种走法,所以登上第五级的走法共有8种 ……
看到这里,规律已经很明显,以至于我们完全可以不编写任何程序,直接用Excel 公式就得到答案。比如在下面的表格内,只要填写好台阶数量为1和2时的步数(1和2),下面各行都可以用公式表达为前两行数字之和,就能得到任意情况的答案:
从上表中,我们可以更加清晰的看到这个规律:如果想计算走到第 i 阶有多少种走法,只需将其“前一阶走法的总数”与“前两阶的走法总数”相加就可以。
既然这么简单,当然也就可以写成程序代码!不过怎么写呢?多少还要用到一点小技巧。不过考虑到本文较长、阅读不易,我们把全文拆成两篇,明天(不是下周)继续讲给大家。
觉得好看就点个在看吧
杨老师课程全集
全民一起玩Python |全民一起VBA
均在网易云课堂发布,欢迎加入、一起进步。
二维码: