排列组合 permutations and combinations

推荐《程序员的数学》中排列组合一章,讲的太好了!


计数就是不重复,不遗漏的去将对象和整数对应起来。我们平时会简单的数数,但是如果在计数对象多的不能直接数时,就需要找到计数对象与整数之间的“对应规则”了。为此必须理解计数对象具有怎么样的特性和结构。


一个例子,内存中排列着要处理的100个数据。从第一个开始依次编号为0号,1号。。。那么最后1个数据的编号是多少呢?

答案:99。

程序员朋友肯定很少会答错这道题。只要找到了“对应规则”--从0开始编号,最后一个数据的号是n-1.

只要掌握了普遍规则,那么数字有多大都不会出错,这点很重要。因此在计数问题中,最重要的是使用变量n将问题抽象出来。


置换

手中有三张牌A,B,C。现在问总共有多少张排法?--这种问题称之为置换(substitution).

解法:

选取第一张牌时有3种选择,选取第二张牌时有2种选择,选择第三张牌时只剩下一种选择了。因此应该是3*2*1=6种排法。

由此可见此类问题是牌数的阶乘n!(factorial),因乘数呈阶梯状而得名。0!=1而不是0.

这其实也是程序中我们常常说的“全排列”的问题,但是其实和数学中的“排列”不是一个哈。

为什么这种排法称为置换呢?因为相当于在所有牌中,让两张牌交换彼此的位置并得到所有的可能性。


排列

手中有5张牌A,B,C,D,E。现在问从5张牌中抽出3长,然后排列,有多少种排法?

解法也很简单:

第一张牌有5种选择,第二张牌有4中选择,第三张牌有3种选择。因此是5*4*3=60.

我们把从n长牌中抽出k张按一定顺序排列的方法称为排列(Permutation). 排列的总数记做

P kn = n!/(n-k)!


组合

手中有5张牌A,B,C,D,E。现在问从5张牌中抽出3张,不考虑顺序,有多少种组合?

这种问题称为组合(combination). 组合的计算方法可以首先计算出排列的总数,然后除以重复计算的部分(重复度)。


最后我们就得到了置换,排列和组合的关系:

以5张牌中取3张牌做排列为例,置换是“3张牌所有的排序可能”,组合是“从5张牌中抽出3张牌的所有可能”,排列是“5张牌中抽出3张牌,并做置换”。因此

“3张牌所有的排序可能” * “从5张牌中抽出3张牌的所有可能” = ”5张牌中抽出3张牌,并考虑顺序做排列”


下面是两道思考题

1, 现在要用颗粒状的药品调配一种新药。药品有A,B,C三种。调配规则如下:

从A,B,C中共取100粒; A,B,C这3种药中至少有一种;不考虑药品调配的顺序。

问,新药调剂有多少种组合?


2,现在有5张扑克牌,其中王2张,其他J,Q,K各一张。将5张牌列在一起,左端或右端至少有一张王牌的排列方法有多少种?


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值