频繁出现在IT面试中的组合计数问题

由于计算机与组合数学有着千丝万缕的联系,所以在很多大公司的笔试题目中,经常就会出现一些组合计数问题,现整理如下:

1. 求5个节点的二叉树有多少中形态?

该问题最直接的做法是穷举出所有的可能情况,毕竟只有5个节点。当然还可以利用递推式进行求解。假设n个节点的二叉树的形态有f(n)种,则f(0) = f(1) = 1。

当n > 1时,一个二叉树有一个根节点和(n-1)个非根节点,在这(n-1)个非根节点中,左子树有k个节点,则右子树有(n-k-1)个节点,则可以得到递推式: 

             

而满足这个递推式的是卡特兰数,所以有:

               

这样很容易得出5个节点的二叉树的个数为42种。

2. 小明从坐标 为(0,0)的位置走向(m,n),其中m、n为正整数。现已知小明每次只向右走一步,或向上走一步,问有多少种不同的走法?

                  

在这个题目当中,也是采用递推式进行求解。设f(m,n)为走到点(m,n)的不同走法,则f(m,0) = f(0,n) = 1。

并且由题意可知,要走到点(m,n),则需要从点(m,n-1)向上走一步,或者从点(m-1,n)向右走一步,所以f(m,n) = f(m-1,n) + f(m,n-1)。

根据上述递推式可以求出所有的走法。当然,如果硬要求出用m与n表示的结果,则需要将问题进行转换。由于走到点(m,n),无论怎么走,始终都是向右走了m步,向上走了n步,所以所有不同的走法为C(m+n, m)。

3. 小明走一个n级楼梯,每次只能走1级或者2级,则小明走到10级有多少种不同的走法?

假设走到n级的不同走法为f(n),则走到n级可以从n-1级走一步,或者从n-2级走两步,所以f(n) = f(n-1) + f(n-2)。这样就转换成了Fibonacci数列了。

f(10) = f(9) + f(8) = f(8) + f(7) + f(8) = .. =89。即走到10级有89种走法。

4. 计算表达式x6+4x4+2x3+x+1最少需要做多少次乘法?

5. 字符串www.qq.com所有非空子串(两个子串如果内容相同则只算一个)个数是多少?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值