在python中实现排列、组合运算

排列(Arrangement)和组合(Conbination)在数学及其他相关领域中有着重要的应用。在python中,通过定义排列、组合的函数,能够计算出排列数或组合数,进而提高工作效率。

I - 了解排列与组合*

此处是对高中数学相关内容的总结,python的实现方法请往下看~

通过查阅资料,作者得到了更易于理解的定义。在了解排列和组合之前,请先了解:加法原理和乘法原理。这里用例题来解释:

加法原理与乘法原理

  1. 加法原理

如图所示,在A地的人想去B地,面前有三条路可走:一号,二号,三号,问:此人有多少种走法?Question
很简单,一共有三种走法,第一种:走一号路;第二种:走二号路;第三种:走三号路。

  1. 乘法原理

将问题变得复杂些,如图所示,A地的人要先经过B地,最后再到达C地,请问:此人有多少种走法?Q2
由分析可知,假如人走一号路到达B后,他就面临着两个选择——走四号路或者走五号路。
以此类推,如果此人走二号路,同样会面临两种选择,三号路亦然。因此此人有2*3=6种选择:
—— 一和四、一和五、二和四、二和五、三和四、三和五

排列与组合

规定m,n为正整数,且m>=n。假定有m个元素,从这些元素中随机取出n个元素,并将这n个元素随机排列,所有排列种类的个数,叫做排列数。表示: A m n A_{m}^{n} Amn
规定m,n为正整数,且m>=n。假定有m个元素,从中随机取出n个元素组成一个集合,组成的所有集合的个数叫做组合数。表示: C m n C_{m}^{n} Cmn
在介绍两者的计算公式之前,还要引入一种运算——阶乘: n ! = 1 ∗ 2 ∗ 3 ∗ . . . ∗ n , n ∈ N + n! = 1*2*3*...*n, n∈N^{+} n!=123...nnN+
计算公式:
A m n = m ( m − 1 ) ( m − 2 ) . . . ( m − n + 1 ) = m ! ( m − n ) ! A_{m}^{n} = m(m-1)(m-2)...(m-n+1)=\frac{m!}{(m-n)!}\quad Amn=m(m1)(m2)...(mn+1)=(mn)!m!
C m n = A m n m ! = m ! ( m − n ) ! n ! C_{m}^{n} = \frac{A_{m}^{n}}{m!}\quad = \frac{m!}{(m-n)!n!}\quad Cmn=m!Amn=(mn)!n!m!

II - Python解决方案 - 套公式

在上文中,我们已经提及了相关的知识点及公式。那么计算就变得尤为简单了。我们要解决的是计算排列数和组合数,在此之前,我们还要定义一个阶乘函数,代码示例如下:

#在python中实现排列、组合运算 - 解决方案
#f(x)阶乘函数 A(m,n)排列 C(m,n)组合
#请确保输入的m,n均为正整数

#阶乘函数
def f(x):
    tmp = 1
    for i in range(1,x+1):
        tmp *= i
    return tmp

def A(m,n):
    return int(f(m)/f(m-n))

def C(m,n):
    return int(A(m,n)/f(n))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值