标题 固定二进制序列的排列组合个数计算方法
问题描述:一个固定二进制位数,固定二进制0和1的个数的二进制序列,计算该序列一共有多少种不同值的方法。例如5位二进制序列由3个1和2个0组合,计算该组合有多少种不同值的组合。
解决方法:先计算出这5个二进制总共的组合个数其中包含了相同值的结果(相同值代表如果一个组合里面的1或者0相互交换那么二进制值的结果是相同的),总共组合个数为5的阶乘即5x4x3x2x1=120。接下来要排除相同的值的个数,先假设不同值的个数为X,计算其中的一个值交换该值里面的相同的1和相同的0的位置得到和该值相同的组合的个数,例如该值为11100,交换第一位1和第二位1,或者交换第四位的0和第五位的0,得到的值都是11100。这种重复的值的组合个数应该为1的个数的阶乘乘以0的个数的阶乘即为(3x2x1)x(2x1)=12。不同的值的个数为X,每一个不同的值又可以变换出12个与该值相同的数(12包含了该值本身)。总共的结果为120,那么X=120除以12,X=10。其他的情况可以类比。N为二进制序列有M个1和K个0组合(N=M+K),组合个数=N!/(M! x K!) !代表阶乘。