📜  数学 |广义 PnC 集 2(1)

📅  最后修改于: 2023-12-03 15:26:06.646000             🧑  作者: Mango

数学 | 广义 PnC 集 2

广义 PnC (Permutation and Combination) 是指在统计学和组合学中的一类问题。这些问题涉及从一些对象中进行选取,对这些对象进行排列和组合,以及对重复对象的处理等等。

在本篇文章中,我们将深入探讨广义 PnC 的概念,介绍相关的公式和技巧,以及提供一些案例和练习题供读者理解和掌握。

基本概念

首先,我们需要了解几个基本概念:

  • 排列 (Permutation):从 n 个不同的对象中选取 r 个,有 nPr 种不同的排列方式。
  • 组合 (Combination):从 n 个不同的对象中选取 r 个,有 nCr 种不同的组合方式。

其中,排列和组合的计算公式如下:

nPr = n! / (n - r)!
nCr = n! / (r! * (n - r)!)
广义排列和组合

有时候,我们需要解决的问题并不是简单的从 n 个不同的对象中选取 r 个的排列和组合问题,可能涉及到以下情况:

  • 从 n 个有重复的对象中选取 r 个的排列和组合。
  • 从 n 个不同的对象中选取不重复的 r 个排列中,对象可能被重复选择的排列数。
  • 从 n 个不同的对象中选取不重复的 r 个组合中,对象可能被重复选择的组合数。

这些情况下,我们就需要使用广义排列和组合的概念来解决这类问题。

有重复对象的排列和组合

对于从 n 个有重复的对象中选取 r 个的排列和组合,我们需要额外考虑这些对象的重复性。

假设有 n 个对象,其中 m 个对象重复 k1 次,p 个对象重复 k2 次,设 q = n - (m + p)。则有以下公式:

  • 从 n 个有重复的对象中选取 r 个的排列数为:n! / (k1!^m * k2!^p * q!) * P(m, r) * P(p, r) * P(q, r)。
  • 从 n 个有重复的对象中选取 r 个的组合数为:(n + r - 1)! / (r! * k1!^m * k2!^p * q!)。

其中,P(x, y) 是 x 个不同的对象中选取 y 个的排列数。

对象可能被重复选择的排列和组合

对于从 n 个不同的对象中选取不重复的 r 个排列中,对象可能被重复选择的排列数,我们需要考虑的是每个对象是否被选择,即二元组 (a, b),其中 a 表示对象编号,b 表示对象是否被选择。如果对象 a 被选择了 r1 次,那么 b 应该是 1, 2, ..., r1。

这时,我们可以使用第二类斯特林数(Stirling Number of the Second Kind)来计算对象可能被重复选择的排列数。设 S(r, k) 表示将 r 个不同的对象划分为 k 个非空的集合的方案数,则有以下公式:

  • 从 n 个不同的对象中选取不重复的 r 个对象可能被重复选择的排列数为:r! * S(n, r)。

对于组合同样可以使用这个方法,只不过每个集合至少包含一个元素。

对象可能被重复选择的组合

对于从 n 个不同的对象中选取不重复的 r 个组合中,对象可能被重复选择的组合数,我们可以使用插板法(Stars and Bars)来解决问题。

插板法的图示如下:

x | x | x x | | x | x | x | x x | | x | |

其中,竖线表示插板,x 表示对象。这个排列方法可以看成是每隔一个竖线就分成了一个组,组内的对象就是被选择出来的组合。

设 f(r, k) 表示将 r 个不同的对象放入 k 个非空的组的方案数,则有以下公式:

  • 从 n 个不同的对象中选取不重复的 r 个对象可能被重复选择的组合数为:f(n, r)。

其中,f(r, k) 的具体计算方法是:

f(r, k) = k * f(r - 1, k) + f(r - 1, k - 1)
f(0, k) = 1
f(r, 0) = 0 (r > 0)
案例与练习题

下面提供一些广义排列和组合的案例和练习题,帮助读者更好地理解和掌握相关的概念和技巧。

案例 1

你手上有一个长度为 n 的字符串 s 和一个整数 r,现在你需要从 s 中选取不重复的 r 个字符(顺序不同算同一种方案),计算出有多少种不同的方案。

练习题 1

有一个 n * m 的网格图,现在从这个网格图上选取 k 个点,使得这些点在图上没有两个点位于同一行或同一列。计算有多少种不同的选点方案。

案例 2

你打算在一个长度为 n 的数组 a 中选取 r 个数(顺序不同算同一种方案),保证每个选出来的数都大于等于 x,计算出有多少种不同的选数方案。

练习题 2

Alex 最近在玩一个叫做 LoMA (Lollipop Market) 的小游戏。这个游戏可以看作是把一个大小为 n 的区间分成 m 段,并在每一段上放上一个糖果,并且要求相邻两个段上的糖果必须不同。

Alex 现在已经知道每个区间段内可以放置多少种不同颜色的糖果,并想知道在这些限制下,一共有多少种不同的排列方案。

现在告诉你这些限制,来帮助 Alex 计算不同的排列数。