文氏圖與容斥原理 —— 從「畫圈圈」到「解方程」
經典題型:已知 |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