离散数学Notes
2015-07-02 21:54
309 查看
一 集合
基数(Cardinality):集合内元素的个数。A的基数一般记为|A|。
平凡子集:P的平凡自己只有2个,P和 Φ。 (之所以谓之“平凡”,时因为每个集合均有这两个子集【Φ的这2个子集重合】)
幂集(Power Set):集合A所有的子集构成的集合,为A的幂集。(其实称幂集,与原文power set关系不大,是因为Card P(A)的值为2^n【n为A中元素的个数】,恰为2 n次 幂,故称之为幂集。有些书籍会以2^A来表示A的幂集。)
对称差(Symmetric difference):把P和Q的所有元素扣除P和Q的公共元素所组成的集合。【P∪Q-P∩Q】
二 归纳方法
数学归纳法的推广
1.有限归纳法
设S为一命题,若
(1)s(n0)成立(n0 >= 1)。
(2)由n0 <= n <= m0 - 1对s(n)成立,能推出s(n + 1)成立。【数学归纳法在有限范围内的应用,故称之为有限归纳法】
则s(n)对n0 <= n <= m0都成立。
2.强归纳法
设S为一命题,若
(1)s(n0)成立(n0 >= 1)。
(2)假设n0 <= n <= k时s(n)成立,能推出s(k + 1)成立。【由假定一个范围里都成立,推出下一个成立,论据加强了】
则s(n)对n >= n0都成立。
二 二元关系
各类二元关系的性质
自反性:... 自反闭包:...R(A) [reverse]
反...
对称性:... 对称闭包:...S(A)
[symmetric]· 反...
传递性:... 传递闭包:... R*
关于传递闭包(R*)的定理:
设|A| = n,R是A上的二元关系,则存在正整数k,k <= n,使得R* = R ∪ R^2 ∪ R^3 ∪.....∪ R^k。
由定理,求R*时,k取到n时,已经足够大了,于是可用R* = R ∪ R^2 ∪ R^3 ∪.....∪ R^n来求R*。
据此求法有比较有效的Warshall算法:
设R是n个元素上的二元关系,
(1)(a,j)nxn是R的相关矩阵;
(2) i <- 1;
(3) for j = 1 to n do
if aj,i =1,then do
for k = 1 to n do
aj,k <- aj,k ∪ ai,k
(4)i <- i + 1
(5)if i <= n,then go (3) else stop.
其结果已变成R*的矩阵形式了,算法时间杂度为O(n^3),是一好算法。
Warshall 的C语言实现:
//Warshall算法C语言实现
#include <stdio.h>
#define N 3
int main (void)
{
int a
= {{1,1,0},{0,0,1},{0,0,0}},i,j,k;
for(i = 0; i < N; i ++)
for(j = 0; j < N; j ++)
{
if(a[j][i] == 1)
for(k = 0; k < N; k ++)
a[j][k] = a[j][k] || a[i][k];
}
for(i = 0; i < N; i ++)
// 结果输出
{
for(j = 0; j < N; j ++)
printf("%d\t",a[i][j]);
printf("\n");
}
return 0;
}
基数(Cardinality):集合内元素的个数。A的基数一般记为|A|。
平凡子集:P的平凡自己只有2个,P和 Φ。 (之所以谓之“平凡”,时因为每个集合均有这两个子集【Φ的这2个子集重合】)
幂集(Power Set):集合A所有的子集构成的集合,为A的幂集。(其实称幂集,与原文power set关系不大,是因为Card P(A)的值为2^n【n为A中元素的个数】,恰为2 n次 幂,故称之为幂集。有些书籍会以2^A来表示A的幂集。)
对称差(Symmetric difference):把P和Q的所有元素扣除P和Q的公共元素所组成的集合。【P∪Q-P∩Q】
二 归纳方法
数学归纳法的推广
1.有限归纳法
设S为一命题,若
(1)s(n0)成立(n0 >= 1)。
(2)由n0 <= n <= m0 - 1对s(n)成立,能推出s(n + 1)成立。【数学归纳法在有限范围内的应用,故称之为有限归纳法】
则s(n)对n0 <= n <= m0都成立。
2.强归纳法
设S为一命题,若
(1)s(n0)成立(n0 >= 1)。
(2)假设n0 <= n <= k时s(n)成立,能推出s(k + 1)成立。【由假定一个范围里都成立,推出下一个成立,论据加强了】
则s(n)对n >= n0都成立。
二 二元关系
各类二元关系的性质
自反性:... 自反闭包:...R(A) [reverse]
反...
对称性:... 对称闭包:...S(A)
[symmetric]· 反...
传递性:... 传递闭包:... R*
关于传递闭包(R*)的定理:
设|A| = n,R是A上的二元关系,则存在正整数k,k <= n,使得R* = R ∪ R^2 ∪ R^3 ∪.....∪ R^k。
由定理,求R*时,k取到n时,已经足够大了,于是可用R* = R ∪ R^2 ∪ R^3 ∪.....∪ R^n来求R*。
据此求法有比较有效的Warshall算法:
设R是n个元素上的二元关系,
(1)(a,j)nxn是R的相关矩阵;
(2) i <- 1;
(3) for j = 1 to n do
if aj,i =1,then do
for k = 1 to n do
aj,k <- aj,k ∪ ai,k
(4)i <- i + 1
(5)if i <= n,then go (3) else stop.
其结果已变成R*的矩阵形式了,算法时间杂度为O(n^3),是一好算法。
Warshall 的C语言实现:
//Warshall算法C语言实现
#include <stdio.h>
#define N 3
int main (void)
{
int a
= {{1,1,0},{0,0,1},{0,0,0}},i,j,k;
for(i = 0; i < N; i ++)
for(j = 0; j < N; j ++)
{
if(a[j][i] == 1)
for(k = 0; k < N; k ++)
a[j][k] = a[j][k] || a[i][k];
}
for(i = 0; i < N; i ++)
// 结果输出
{
for(j = 0; j < N; j ++)
printf("%d\t",a[i][j]);
printf("\n");
}
return 0;
}