Climbing Stairs:分治法初探
在算法书里,我们总能看得到一道经典的题目。
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
我们可以利用分治法来解决这一题。首先需要找到上台阶子问题的分割方法,再递归地求解子问题,最后把所有子问题的结果合并。
很容易看出,只有1级台阶的时候,只有1种跳法。2级台阶有2种跳法,3级台阶有3种跳法。如果有4级台阶,有5种跳法。
怎么求呢?我们可以把求解4级台阶,分解成求解两个2级台阶的子问题。这样一来,我们可以算出2×2种不同的跳法【1-2-3-4,12-3-4,1-2-34,12-34】。需要注意的是,分解成两个子问题之后,还会有跨越这两个子问题的情况。在本题中,跨越子问题的情况只可能是从前一个子问题,到下一个子问题,走过了两级台阶。在4级台阶中,这种情况是【1-23-4】
所以我们在合并所有子问题的时候,将上述两种情况合并起来就可以了。
|
|