文氏图与容斥原理 —— 从「画圈圈」到「解方程」
经典题型:已知 |A|、|B|、|A∩B|,求各区域人数。关键公式:仅A = |A| - |A∩B|
| 题号 | |A| | |B| | |A∩B| | 结果 |
|---|
刚才的游戏中,我们根据已知集合的大小求各区域人数。仔细想想:
人教版必修第一册(P18):
对于任意两个集合 A、B:
意义:把 A 和 B 的元素数相加,交集(共同元素)部分被数了两次,所以要减去一次。
对于任意三个集合 A、B、C:
规律:「加单减双加三」——奇数重交集(共同元素)加,偶数重交集(共同元素)减。
在「班级调查问题」中,|A∩B| 是重叠部分。 调节它,观察「仅A」「仅B」「都不」如何变化。公式:|A∪B| = |A| + |B| - |A∩B|
# 班级调查问题 # 数学小组30人,物理小组25人,都喜欢10人,全班50人 math_only = 30 - 10 # 只喜欢数学: 20 phys_only = 25 - 10 # 只喜欢物理: 15 both = 10 # 都喜欢: 10 neither = 50 - math_only - phys_only - both # 都不喜欢: 5 print("只喜欢数学:", math_only) # 20 print("只喜欢物理:", phys_only) # 15 print("都不喜欢:", neither) # 5 # 公式验证 print("|A∪B| = |A| + |B| - |A∩B|:", 30+25-10, "=", 45)
只喜欢数学: 20 只喜欢物理: 15 都不喜欢: 5 |A∪B| = |A| + |B| - |A∩B|: 45 = 45
# 用 Python 集合验证容斥原理 A = set(range(1, 31)) # 数学小组 30人 B = set(range(20, 46)) # 物理小组 25人 # 集合运算 union = A | B # 并集(所有元素) A∪B inter = A & B # 交集(共同元素) A∩B only_a = A - B # 仅A only_b = B - A # 仅B print(f'|A|={len(A)}, |B|={len(B)}, |A∩B|={len(inter)}') print(f'|A∪B|={len(union)}') print(f'容斥验证: {len(A)}+{len(B)}-{len(inter)}={len(A)+len(B)-len(inter)}') print(f'仅A={len(only_a)}, 仅B={len(only_b)}')
|A|=30, |B|=25, |A∩B|=10 |A∪B|=45 容斥验证: 30+25-10=45 仅A=20, 仅B=15