组合计数

加法原理

若完成一件事的方法有n类,其中第i类方法包括a_i种不同的方法,且这些方法互补重合,则完成这件事共有 a 1 + a 2 + . . . + a n a_1+a_2+...+a_n a1+a2+...+an种不同的方法。

乘法原理

若完成一件事需要n个步骤,其中第i个步骤有a_i种不同的完成方法,且这些步骤互不干扰,则完成这件事共有 a 1 ∗ a 2 ∗ . . . ∗ a n a_1*a_2*...*a_n a1a2...an种不同的方法。

排列数

从n个不同元素中依次取出m个元素排成一列,产生的不同排列的数量为:
P n m = n ! ( n − m ) ! = n ∗ ( n − 1 ) ∗ . . . ∗ ( n − m + 1 ) P_n^m=\frac{n!}{(n-m)!}=n*(n-1)*...*(n-m+1) Pnm=(nm)!n!=n(n1)...(nm+1)

组合数

从n个不同元素中取出m个组成一个集合(不考虑顺序),产生的不同集合数量为:
C n m = n ! m ! ( n − m ) ! = n ∗ ( n − 1 ) ∗ . . . ∗ ( n − m + 1 ) m ∗ ( m − 1 ) ∗ . . . ∗ 2 ∗ 1 C_n^m=\frac{n!}{m!(n-m)!}=\frac{n*(n-1)*...*(n-m+1)}{m*(m-1)*...*2*1} Cnm=m!(nm)!n!=m(m1)...21n(n1)...(nm+1)

特别地,根据定义, C n 0 = 1 C_n^0=1 Cn0=1

组合数性质:

  1. C n m = C n n − m C_n^m=C_n^{n-m} Cnm=Cnnm
    由组合数的定义,对于从n个不同元素中取出m个组成的每个集合,剩余的n-m个元素也构成一个集合,这两个集合一一对应,所以性质1成立。
  2. C n m = C n − 1 n + C n − 1 m − 1 C_n^m=C_{n-1}^n+C_{n-1}^{m-1} Cnm=Cn1n+Cn1m1
    n n n个不同元素中取出 m m m个组成一个集合有两种办法:取 n n n号元素,不取 n n n号元素。若取 n n n号元素,则应在剩余 n − 1 n-1 n1个元素中选出 m − 1 m-1 m1个元素,有 C n − 1 m − 1 C_{n-1}^{m-1} Cn1m1中选择;若不取,则应在剩余 n − 1 n-1 n1个元素中选出 m m m个元素,有 C n − 1 m C_{n-1}^{m} Cn1m种选择。根据加法原理,性质2成立。
  3. C n 0 + C n 1 + . . . + C n n = 2 n C_n^0+C_n^1+...+C_n^n=2^n Cn0+Cn1+...+Cnn=2n
    从n个不同元素中取出若干个元素组成一个集合,有n+1类方法,分别是取出0,1,2,…,n个。根据加法原理,共有 C n 0 + C n 1 + . . . + C n n 种 C_n^0+C_n^1+...+C_n^n种 Cn0+Cn1+...+Cnn,从另一个方面去详,n个元素每个元素可取或不取,总方法数显然为 2 n 2^n 2n,二者相等,故性质3成立。

二项式定理

( a + b ) n = ∑ k = 0 n C n k a k b n − k (a+b)^n=\large\sum_{k=0}^nC_n^ka^kb^{n-k} (a+b)n=k=0nCnkakbnk

数学归纳法证明:
n = 1 n=1 n=1时, ( a + b ) 1 = C n 0 a 0 b 1 + C n 1 a 1 b 0 = a + b (a+b)^1=C_n^0a^0b^1+C^1_na^1b^0=a+b (a+b)1=Cn0a0b1+Cn1a1b0=a+b成立。
假设当 n = m n=m n=m时命题成立,当 n = m + 1 n=m+1 n=m+1时:
( a + b ) m + 1 = ( a + b ) ( a + b ) m = ( a + b ) ∑ k = 0 m C m k a k b m − k (a+b)^{m+1}=(a+b)(a+b)^m=(a+b)\sum_{k=0}^mC_m^ka^kb^{m-k} (a+b)m+1=(a+b)(a+b)m=(a+b)k=0mCmkakbmk
= ∑ k = 0 m C m k a k + 1 b m − k + ∑ k = 0 m C m k a k b m − k + 1 =\sum_{k=0}^mC_m^ka^{k+1}b^{m-k}+\sum_{k=0}^mC_m^ka^kb^{m-k+1} =k=0mCmkak+1bmk+k=0mCmkakbmk+1
= ∑ k = 1 m + 1 C m k − 1 a k b m − k + 1 + ∑ k = 0 m C m k a k b m − k + 1 =\sum_{k=1}^{m+1}C_m^{k-1}a^{k}b^{m-k+1}+\sum_{k=0}^mC_m^ka^kb^{m-k+1} =k=1m+1Cmk1akbmk+1+k=0mCmkakbmk+1
= ∑ k = 1 m ( C m k − 1 + C m k ) a k b m − k + 1 + C m m a m + 1 b 0 + C m 0 a 0 b m + 1 =\sum_{k=1}^{m}(C_m^{k-1}+C_m^k)a^{k}b^{m-k+1}+C_m^ma^{m+1}b^0+C_m^0a^0b^{m+1} =k=1m(Cmk1+Cmk)akbmk+1+Cmmam+1b0+Cm0a0bm+1
= ∑ k = 0 m + 1 C m + 1 k a k b m − k + 1 =\sum_{k=0}^{m+1}C_{m+1}^ka^{k}b^{m-k+1} =k=0m+1Cm+1kakbmk+1

多重集

多重集是指包含重复元素的广义集合。

多重集的排列数:

S = { n 1 ∗ a 1 , n 2 ∗ a 2 , . . . , n k ∗ a k } S=\begin{Bmatrix}n_1*a_1,n_2*a_2,...,n_k*a_k\end{Bmatrix} S={n1a1,n2a2,...,nkak}是由 n 1 个 a 1 , n 2 个 a 2 . . . n k 个 a k n_1个a_1,n_2个a_2...n_k个a_k n1a1,n2a2...nkak组成的多重集。 S S S的全排列个数为:
n ! n 1 ! n 2 ! . . . n k ! \frac{n!}{n_1!n_2!...n_k!} n1n2!...nk!n!

自行理解即可。

多重集的组合数

S = { n 1 ⋅ a 1 , n 2 ⋅ a 2 , . . . , n k ⋅ a k } S=\begin{Bmatrix}n_1\cdot a_1,n_2\cdot a_2,...,n_k\cdot a_k\end{Bmatrix} S={n1a1,n2a2,...,nkak}是由 n 1 个 a 1 , n 2 个 a 2 . . . n k 个 a k n_1个a_1,n_2个a_2...n_k个a_k n1a1,n2a2...nkak组成的多重集,设整数 r ≤ n i ( ∀ i ∈ [ 1 , k ] ) r\le n_i(\forall i\in[1,k]) rni(i[1,k])。从 S S S中取出r个元素组成一个多重集(不考虑元素的顺序),产生的不同多重集的数量为:
C k + r − 1 k − 1 C_{k+r-1}^{k-1} Ck+r1k1

证明:原问题等价于统计下列集合的数量: { x 1 ⋅ a 1 , x 2 ⋅ a 2 , . . . , x k ⋅ a k } \begin{Bmatrix}x_1\cdot a_1,x_2\cdot a_2,...,x_k\cdot a_k\end{Bmatrix} {x1a1,x2a2,...,xkak},其中 ∑ i = 1 k x i = r \sum_{i=1}^kx_i=r i=1kxi=r,并且 x i ≤ n i x_i\le n_i xini。因为 r ≤ n i r\le n_i rni,必有 x i ≤ n i x_i\le n_i xini,所以只需考虑 ∑ i = 1 k x i = r \sum_{i=1}^kx_i=r i=1kxi=r这个条件。现在,原问题就相当于一个插空问题,有 k − 1 k-1 k1个隔板,将 r r r分为 k k k个部分,每个部分与 x 1 , x 2 , . . . x k x_1,x_2,...x_k x1,x2,...xk一一对应,即每个部分的个数为当前 x 1 , x 2 , . . . x k x_1,x_2,...x_k x1,x2,...xk的值,现在我们把 k − 1 k-1 k1个隔板看作 1 1 1 r r r看作 r r r 0 0 0,就有 k + r − 1 k+r-1 k+r1个数,这 k + r − 1 k+r-1 k+r1个数构成的多重集 { r ⋅ 0 , ( k − 1 ) ⋅ 1 } \begin{Bmatrix}r\cdot 0,(k-1)\cdot 1\end{Bmatrix} {r0,(k1)1}的全排列数就为所求,即:
( r + k − 1 ) ! r ! ( k − 1 ) ! = C k + r − 1 r = C k + r − 1 k − 1 \frac{(r+k-1)!}{r!(k-1)!}=C_{k+r-1}^r=C_{k+r-1}^{k-1} r!(k1)!(r+k1)!=Ck+r1r=Ck+r1k1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在R语言中,我们可以使用`aggregate`函数来对数据框中的多个指标进行组合计数。 首先,我们可以使用`count`函数来计算每个指标的计数结果。该函数可以接受多个参数,其中第一个参数是要计数的数据框,后面的参数是要计数的变量。例如,假设我们有一个名为`df`的数据框,其中包含了三个指标`A`、`B`和`C`,我们可以使用以下代码计算它们的计数结果: ``` counts <- count(df, A, B, C) ``` 这将返回一个新的数据框`counts`,其中包含了每个指标组合计数结果。 此外,如果我们想要根据某个指标对计数结果进行分组,我们可以使用`group_by`函数。例如,假设我们想要根据指标`A`对计数结果进行分组,我们可以使用以下代码: ``` grouped_counts <- counts %>% group_by(A) ``` 这将返回一个按照指标`A`进行分组的数据框`grouped_counts`。 最后,如果我们想要对计数结果进行排序,我们可以使用`arrange`函数。例如,假设我们想要按照指标`A`和`B`的升序对计数结果进行排序,我们可以使用以下代码: ``` sorted_counts <- counts %>% arrange(A, B) ``` 这将返回一个按照指标`A`和`B`进行排序的数据框`sorted_counts`。 综上所述,以上就是使用R语言对数据框中多个指标进行组合计数的方法。我们可以使用`count`函数计算指标的计数结果,使用`group_by`函数对计数结果进行分组,使用`arrange`函数对计数结果进行排序。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值