程序员社区

【集合论】容斥原理 ( 包含排斥原理 | 示例 )

文章目录

  • 一、 容斥原理
  • 二、 容斥原理 示例

一、 容斥原理


A

1

,

A

2

,


,

A

n

A_1 , A_2 , \cdots , A_n

A1,A2,,An

n

n

n 个集合 ; 则 这

n

n

n 个集合 并集的元素个数 是 :

i

=

1

n

A

i

=

i

=

1

n

A

i

i

<

j

A

i

A

j

+

i

<

j

<

k

A

i

A

j

A

k

+

(

1

)

n

1

A

1

A

2

A

n

| \bigcup_{i=1}^{n} A_i | = \sum_{i = 1}^n | A_i | - \sum_{i < j} | A_i \cap A_j | + \sum_{i < j < k} | A_i \cap A_j \cap A_k | - \cdots + ( -1 )^{n - 1} | A_1 \cap A_2 \cap \cdots \cap An |

i=1nAi=i=1nAii<jAiAj+i<j<kAiAjAk+(1)n1A1A2An

解析 :

n

n

n 个集合进行并运算后 , 元素个数 , 通常使用 容斥原理 进行计算 ;

i

=

1

n

A

i

\sum_{i = 1}^n | A_i |

i=1nAi : 将每个集合中的 元素个数 相加 , 该值大于 总元素数 , 需要进行修正 ; ( 系数值

(

1

)

0

(-1)^0

(1)0 )

i

<

j

A

i

A

j

\sum_{i < j} | A_i \cap A_j |

i<jAiAj : 减去两两相交的元素个数 , 该值又小于 总元素数 , 继续进行修正 ; ( 系数值

(

1

)

1

(-1)^1

(1)1 )

i

<

j

<

k

A

i

A

j

A

k

\sum_{i < j < k} | A_i \cap A_j \cap A_k |

i<j<kAiAjAk : 加上三个集合相交的元素个数 , 该值大于 总元素数 , 继续进行修正 ; ( 系数值

(

1

)

2

(-1)^2

(1)2 )

减去四个集合相交的元素个数 , 该值小于 总元素数 , 继续进行修正 ; ( 系数值

(

1

)

3

(-1)^3

(1)3 )

\vdots

(

1

)

n

1

A

1

A

2

A

n

( -1 )^{n - 1} | A_1 \cap A_2 \cap \cdots \cap An |

(1)n1A1A2An : 加上

(

1

)

n

1

( -1 )^{n - 1}

(1)n1 乘以

n

1

n-1

n1 个集合相交的元素个数 ; ( 系数值

(

1

)

n

1

(-1)^{n-1}

(1)n1 )

上述 奇数个集合 交集元素个数 前系数是 正数 , 偶数个集合 交集元素个数 前系数是 负数 ;

二、 容斥原理 示例


1

1

1 ~

10000

10000

10000 之间 , 既不是某个整数的平方 , 又不是某个整数的立方 , 的数个数 ?

全集 :

E

E

E 集合是全集 , 是

1

1

1

10000

10000

10000 的自然数 ,

E

E

E 集合的个数

E

=

10000

|E| = 10000

E=10000

平方对应的数集合

A

A

A :

A

A

A 集合是 某个数 的平方 对应的 某个数 集合 ,

A

=

{

x

E

x

=

k

2

k

Z

}

A = \{ x \in E | x = k^2 \land k \in Z \}

A={xEx=k2kZ} ,

A

A

A 集合元素个数是

100

|100|

100 ;

10

0

2

=

10000

100^2 = 10000

1002=10000 , 因此

A

A

A 集合的元素是

{

0

,

1

,

2

,


,

100

}

\{0, 1, 2 , \cdots , 100 \}

{0,1,2,,100} , 元素个数有

100

100

100 个 ;

1

2

,

2

2

,

3

3

,


,

10

0

2

1^2 , 2^2 , 3^3, \cdots ,100^2

12,22,33,,1002 都在

1

1

1

10000

10000

10000 之间 ,

10

1

2

=

10201

101^2 = 10201

1012=10201 就超过

10000

10000

10000 了 ;

立方对应的数集合

B

B

B :

B

B

B 集合是 某个数 的立方 对应的 某个数 集合 ,

B

=

{

x

E

x

=

k

3

k

Z

}

B = \{ x \in E | x = k^3 \land k \in Z \}

B={xEx=k3kZ} ,

A

A

A 集合元素个数是

21

|21|

21 ;

2

1

3

=

9261

21^3 = 9261

213=9261 , 因此

B

B

B 集合的元素是

{

0

,

1

,

2

,


,

21

}

\{0, 1, 2 , \cdots , 21 \}

{0,1,2,,21} , 元素个数有

21

21

21 个 ;

1

3

,

2

3

,

3

3

,


,

2

1

3

1^3 , 2^3 , 3^3, \cdots ,21^3

13,23,33,,213 都在

1

1

1

10000

10000

10000 之间 ,

2

2

2

=

10648

22^2 = 10648

222=10648 就超过

10000

10000

10000 了 ;

计算

A

B

A \cap B

AB 集合的交集

C

C

C : 元素个数 , 既是平方 , 又是立方 , 肯定是六次方的数 ,

C

=

{

x

E

x

=

k

6

k

Z

}

C= \{ x \in E | x = k^6 \land k \in Z \}

C={xEx=k6kZ} ,

C

C

C 集合的元素个数是

4

4

4 ;

4

6

=

4096

4^6 = 4096

46=4096 , 因此

C

C

C 集合的元素是

{

1

,

2

,

3

,

4

}

\{1, 2 , 3, 4\}

{1,2,3,4} , 元素个数有

4

4

4 个 ;

1

6

,

2

6

,

3

6

,

4

6

1^6 , 2^6 , 3^6, 4^6

16,26,36,46 都在

1

1

1

10000

10000

10000 之间 ,

5

6

=

15

,

625

5^6 = 15,625

56=15,625 就超过

10000

10000

10000 了 ;

题目可以转化成 : 集合

Z

Z

Z 中 , 既不属于

A

A

A 集合 , 有不属于

B

B

B 集合 的数字 ;

集合

A

A

A 与 集合

B

B

B 并集是

A

B

A \cup B

AB

上述并集 的 绝对补集

(

A

B

)

\sim ( A \cup B )

(AB) 元素个数

(

A

B

)

|\sim ( A \cup B ) |

(AB) , 就是题目中要求的结果 ;

(

A

B

)

=

E

A

B

|\sim ( A \cup B ) | = |E| - |A \cup B|

(AB)=EAB

上述式子中 ,

E

=

10000

|E| = 10000

E=10000 ,

A

B

|A \cup B|

AB 值可以使用 容斥原理 进行计算 ;

A

B

|A \cup B|

AB 两个集合并集的元素个数 , 可以使用两个集合的元素个数相加 , 然后减去两个集合交集的元素个数 ;

A

B

=

A

+

B

A

B

=

100

+

21

4

=

117

|A \cup B| = |A| + |B| - |A \cup B| = 100 + 21 - 4 = 117

AB=A+BAB=100+214=117

代入总的公式 :

(

A

B

)

=

E

A

B

=

10000

117

=

9883

|\sim ( A \cup B ) | = |E| - |A \cup B| = 10000 - 117 = 9883

(AB)=EAB=10000117=9883

赞(0) 打赏
未经允许不得转载:IDEA激活码 » 【集合论】容斥原理 ( 包含排斥原理 | 示例 )

相关推荐

  • 暂无文章

一个分享Java & Python知识的社区