数学很重要

一个排列组合问题:

N位二进制数,01组合正好出现两次的个数有多少?

比如,N=5,有 00101, 10101, 01001, 01101, 01010, 01011六种。

这个题目,如果用暴力求解也是可以的,但是当N比较大的时候就很尴尬了。

用数学方法(排列组合),怎么求解这道题呢?

先晒晒我答复的结果:(N+1)! / (N-4)! / 5!

下面是这个公式的求解过程:

我们可以把这个字串分成六个部分,每个部分的各位上数值一样,相临两个部分的数值不同。第一部分为1,最后一部分为0

也就是可以写成以下形式:

1...1 0...0 1...1 0...0 1...1 0...0

(如果再多,就不止两个01组合了。比如最前面多上0,就有三个01;或者最后多上1,也是有三个01)

记这六个部分中每个部分的位数为n1, n2, n3, n4, n5, n6

这里:

n1, n6 >= 0

n2, n3, n4, n5 >= 1

n1 + n2 + n3 + n4 + n5 + n6 = N

到这里,问题就转化成:

把N个球放入六个抽屉,第2、3、4、5这四个抽屉,每个至少一个球。

如果我们从第2、3、4、5这四个抽屉中各取出一个球,问题又转化成:

把 N-4个球放入6个抽屉,有多少种放法?

这是排列组合中的一道经典例题。如果记X=N-4,则组合数有 (X+5)! / X! / 5!

把X=N-4代入上面的公式,得到:(N-4 + 5) ! /  (N-4)! / 5!

化简后即可得到上述公式:

(N+1)! / (N-4)! / 5!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值