枚举法

🎲 组合计数与概率初步·
⭐⭐⭐

🎯 学习目标

  • 理解枚举法的基本思想和适用场景
  • 能够系统、不重不漏地列出所有可能情况
  • 运用枚举法解决简单的组合计数与概率问题

📚 核心概念

枚举法是一种通过逐一列举所有可能情况来解决问题的方法。它适用于总数不多、结构清晰的问题,尤其在组合计数和概率初步中非常实用。

使用枚举法的关键是做到“不重复、不遗漏”。为了达到这个目标,我们通常按照一定的顺序或规则来列举,比如从小到大、按字母顺序、分类讨论等。

例如,从数字1、2、3中任选两个不同的数组成两位数,我们可以按十位数字从小到大依次枚举:十位为1时,个位可以是2或3,得到12、13;十位为2时,个位可以是1或3,得到21、23;十位为3时,个位可以是1或2,得到31、32。这样一共得到6种结果,没有重复也没有遗漏。

在概率问题中,如果所有结果的可能性相同,事件AA发生的概率就是:

P(A)=事件A包含的结果数所有可能结果的总数 P(A) = \frac{\text{事件}A\text{包含的结果数}}{\text{所有可能结果的总数}}

这时,枚举法可以帮助我们准确数出分子和分母。

📝 关键公式

  • 基本计数原理(加法原理):如果完成一件事有两类不同方案,第一类有mm种方法,第二类有nn种方法,则共有m+nm + n种方法。

    • 示例:从A地到B地可乘火车(3班)或汽车(2班),则共有3+2=53 + 2 = 5种出行方式。
  • 古典概率公式:若所有结果等可能,则

P(A)=有利结果数总结果数 P(A) = \frac{\text{有利结果数}}{\text{总结果数}}
  • 示例:掷一枚均匀骰子,出现偶数的概率为36=12\frac{3}{6} = \frac{1}{2}(有利结果:2,4,6)。

💡 经典例题

例题1(基础):用数字1、2、3能组成多少个没有重复数字的两位数?

解题过程

  1. 明确要求:两位数,十位和个位不能相同。
  2. 按十位数字分类枚举:
    • 十位是1:个位可选2或3 → 12, 13
    • 十位是2:个位可选1或3 → 21, 23
    • 十位是3:个位可选1或2 → 31, 32
  3. 共有6个符合条件的两位数。

例题2(进阶):一个口袋中有红球、黄球、蓝球各1个。从中随机摸出两个球,求摸到一红一黄的概率。

解题过程

  1. 先枚举所有可能的摸球结果(不考虑顺序):
    • 红和黄
    • 红和蓝
    • 黄和蓝 共3种可能结果,且每种可能性相同。
  2. 其中“一红一黄”只有1种情况。
  3. 所以概率为:
P=13 P = \frac{1}{3}

⚠️ 易错点

  • 重复计数:比如把“12”和“21”当成同一种情况(实际在排列问题中它们不同)。避免方法:明确问题是否考虑顺序,按固定规则枚举。
  • 遗漏情况:跳过某些可能组合。避免方法:采用分类或列表法,确保覆盖所有类别。
  • 混淆排列与组合:如在摸球问题中错误地认为“先红后黄”和“先黄后红”是两种结果(若不考虑顺序则应视为一种)。避免方法:仔细审题,看是否强调“顺序”或“同时取出”。
  • 未验证等可能性:直接套用古典概率公式,但实际结果并不等可能。避免方法:确认每个基本事件发生的可能性是否相同。

💡 例题

1
  1. 用数字 1, 2 组成一个 8 位数,其中至少有连续 4 位都是数字 1 的有多少个?

我们用容斥原理或直接枚举法计算满足条件的8位数个数(每位只能是1或2,共2^8=256个总数)。

设A_k表示从第k位开始出现连续4个1(即位置k,k+1,k+2,k+3均为1),k=1,2,3,4,5(因8位中最多从第5位开始放4连1)。

对每个A_k:固定4位为1,其余4位可自由取1或2 → 2^4=16个。 但存在重叠(如连续5个1会被多个A_k计数),需去重。

更可靠方法是直接枚举所有含“1111”子串的8位二进制串(字母表{1,2},等价于{0,1}问题,仅符号不同)。

令f(n)为长度为n、不含“1111”的串数,则所求为2^8 - f(8)。

递推:设a_n为长度n、末尾连续1的个数为0,1,2,3且不含“1111”的串数。 定义:

  • s0[n]:以2结尾(即末尾0个连续1)
  • s1[n]:以1结尾,前一位非1(即末尾1个1)
  • s2[n]:末尾2个连续1
  • s3[n]:末尾3个连续1

初始(n=1): s0[1]=1(“2”), s1[1]=1(“1”), s2[1]=0, s3[1]=0

递推关系: s0[n] = s0[n-1]+s1[n-1]+s2[n-1]+s3[n-1] (加2) s1[n] = s0[n-1] (加1到以2结尾) s2[n] = s1[n-1] (加1到末尾1个1) s3[n] = s2[n-1] (加1到末尾2个1)

计算: n=2: s0=2, s1=1, s2=1, s3=0 → total=4 n=3: s0=4, s1=2, s2=1, s3=1 → total=8 n=4: s0=8, s1=4, s2=2, s3=1 → total=15(注意:全1“1111”被排除,总可能16,故15正确) n=5: s0=15, s1=8, s2=4, s3=2 → total=29 n=6: s0=29, s1=15, s2=8, s3=4 → total=56 n=7: s0=56, s1=29, s2=15, s3=8 → total=108 n=8: s0=108, s1=56, s2=29, s3=15 → total=208

所以不含“1111”的串数为208,总串数256,故含至少一个“1111”的串数为256−208=48。

答:48个。

2

用数字1、2、3可以组成多少个不同的两位数(每个数字只能用一次)?

  1. 十位数为1时,个位数可以是2或3,组成的两位数有:12、13。
  2. 十位数为2时,个位数可以是1或3,组成的两位数有:21、23。
  3. 十位数为3时,个位数可以是1或2,组成的两位数有:31、32。
  4. 综上,共可以组成6个不同的两位数:12、13、21、23、31、32。