[关闭]
@ruanxingzhi 2019-07-11T00:48:56.000000Z 字数 2721 阅读 986

附中讲课:从离散数学的观点看OI

布尔代数简介

化简:((a && b) || (c %% !b)) && (!a || b || c)

布尔代数:以bool值为基本研究对象。以1表示真,0表示伪。

*来表示逻辑与,用+来表示逻辑或。

则有基本的运算规律:

A B A+B A*B
0 0 0 0
0 1 1 0
1 0 1 0
1 1 1 1

另外,引入“非”运算:的取反。

艾弗森括号: e.g. [1==2]为0;[3|x]取3的倍数时为1,否则为0。

这个记号方便了我们表达一些实际问题。例如,假设我们手中有一张表,要求出互质的的对数。答案就是:

如果要求出所有数对的gcd之和,怎么搞?


枚举.考虑到每一个对答案作出了次贡献,故

,必然同时是的因数。满足这个条件的有多少对呢?它们分别可以取遍的所有倍数,也就是亦即

后面的柿子我们已经会求了,故可以做完此题。

实际上,存在应对每次查询的办法。(数论分块)

以上练习了艾弗森括号的使用。它将在我们做数论题的时候发挥重大作用。

回来继续讨论布尔代数。首先,不难发现结合律、交换律、分配律。
有几个恒等式:.

依据这些法则,我们能否化简呢?
人话:假设,那么;否则,故.

De Morgan定理

位运算简介

众所周知,C++支持一些位运算,下面以int型为例。每个int变量可以视为长度为32的布尔数组,& | ^都是逐位运算。

如果要判断一个数是奇数还是偶数,怎么做?
如果要判断一个数是不是8的倍数,怎么做?
补码是什么?

如何取出一个数的二进制上的 最后一个 1?例如,10001111100取出00000000100

今有一个长度为的数组,已知这里面:个数重复出现了两次;只有一个数仅出现一次。要求快速找到这个仅出现一次的数。

集合论初步

我们把一些“东西”叫做集合。
集合元素必须要是确定的、可以互相区别开的事物。

下面哪个属于集合?
A. 上海交通大学的“好几百个”教授
B. 所有跑得快的记者
C. 身高不低于1.80m的拥有美国国籍的人

空集

属于、包含于
交集、并集、补集、差集

集合论上的De Morgan定理
对称差运算

集合论不仅能描述事物,还可以描述事物之间的联系。

公理1. 人都是要死的。
公理2. 苏格拉底是人。
结论. 苏格拉底biss。

我们用集合论的语言重新描述这个推理过程。
公理1. 凡是人都得死,故“human”这一集合包含于“biss”集合。
公理2. 苏格拉底是人,故“Socrates”这一元素属于“human”集合。
结论. “Socrates”属于“biss”集合。苏格拉底biss。

刚刚我们由“凡是人都得死”,得到了。从这里我们可以导出“子集”的定义:的子集,当且仅当


也可以导出另一个等价定义:

它们的等价性取决于这样一个事实:命题p与其逆否命题,正确性一致。

幂集:考虑一个新的集合:它的每个元素都是的子集。这样的集合记为.
有多少个元素?
,那么
,那么

抽屉原理:(又称鸽巢原理)把个苹果放进个箱子,必然存在一个箱子,里面放了至少两个苹果。
【推广】平均值原理:把个苹果放进个箱子,必然存在一个箱子,里面放了至少个苹果。

求证:任意取52个正整数,这里面必然存在,使得要么是100的倍数,要么是100的倍数。

// 求证:在中任取个数,必然有一个数是另一个数的倍数。

容斥原理

关系

首先来研究笛卡尔积。

的子集R为定义在A上的关系。若,则称
例如,整除关系。,则整除关系为

一个关系R肯定可以被记录在矩阵中(称为关系矩阵)。

今有n个点,某些点之间修了路,问每个点最终能到达哪些点。(传递闭包)

几类特殊的关系:

等价关系和等价类

偏序关系可以映射到DAG上去。这就是“Hasse图”。

什么东西可以用线段树维护?

利用每个节点记录的信息,可以得知这一区间的答案;可以很方便地合并两个相邻区间的答案。
max值/sum值明显可以。
今有任务:实时查询区间最小值和最小值出现的次数。能否直接用线段树维护?

ST表:必须满足区间可加性。

映射

映射的一个子集,且满足:

单射、满射、双射

群论的概念

封闭性
结合律
单位元
逆元

则称为一个群。
(有理数,乘法):群。(无理数,乘法):不是群。
(整数,乘法):不是群。(正整数,乘法):是群。

能用树状数组维护,必然满足性质:
此时出现了减号,要求存在逆元。

图论

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注