离散数学第九章—学习笔记

9.1关系 relationship!

aRb : a,b有关系R a属于A b属于B AB为两个集合
用箭头表示 也可以用 数组(表格)表示

函数作为关系 只要记住多对一是不可以的 画个图 其实是差不多的啦

集合自身的关系: 定义:集合A上的关系是从A到A的关系
集合A上的关系是AxA的子集
怎么理解?
eg:{1,2,3,4,5} a整除b的有序对有哪些
1 1
1 2…等等
你看,这是一个关系,但他不完整,不能描述AxA所有的有序对

Q:n元素集合上有多少个不同的关系?
考虑n元素的集合A
AxA 一共n^2个有序对
把一个个有序对看成元素,求他的子集
ans=2^(n^2)
n=3 ->512个 哇有这么大!

关系的性质:
自反:对A中的每个元素a有(a,a)属于R
正整数集合上整除关系是自反的吗?
显然! (a,a) a|a 成立!

非负呢?
不成立!!
0|0无意义

对称的:对于任意a,b属于A,若只要(a,b)属于R,就有(b,a)属于R
反对称:对于任意a,b属于A (a,b) &&(b,a)属于R,b=a成立

R 2,1 || 3,1 || 3,2 || 4,1 || 4,2 || 4,3
反对称的对不对,我们找不到 a,b && b,a这样的元素
R 1,1 || 1,2 || 2,1 这个呢?
对称的!

传递的 a,b 属于R b,c 属于R -> a,c 属于R 我简写了 abc任意的

关系的组合
和集合很像的 sub 交 并

关系还有另一种组合方式
合成
R: A到B
S: B到C

(a,b) 属于R
(b,c)属于S
合成变成(a,c)
记做:SoR
B相当于一个中转炉
怎么合成,找第二个元素(ab中的b)和第一个元素(bc中的b)一样的不就得了

双亲关系与自身的合成
若a是b的父母 (a,b)属于R (a,c)属于RoR 当且仅当 a是b的父母 b是c的父母 a是c的祖父母
递归定义R的n次幂
我的父母的父母的父母的父母的父母的父母……

证明一个传递关系的幂是该关系的子集
集合A上的关系是传递的,当且仅当n=1,2,3有R^n属于R
充分性 R^n属于R A传递?考虑n=2,R^2属于R 由合成的定义知 a,b属于R b,c属于R a,c属于R^2所以a,c属于R

已知传递的 推出 R^n属于R 数学归纳法!
n=1不解释

R^n属于R成立
R^n+1=R^n o R 存在 (a,x)属于R^n (x,b) 属于R a,b属于R^n+1
而R^n属于R so! a,x x,b属于R 由于R是传递的 a,b属于R
所以R^n+1属于R

9.2n元关系

数据库里常用 没啥意思 不讲

9.3 关系的表示

用矩阵表示关系 ,有关系的标1 无关系 0

R是对称的当且仅当MR=(MR)的转置
自反的:对角线主对角线all 1其他无所谓
反对称的:当且仅当 a,b属于R b,a属于R 则a=b
if mij=1 i不等于j
then mji=0
交 和 并 不讲 对每个对应的元素交一下并一下就可以了

关系合成的矩阵

引入布尔积
乘法知道的吧 布尔积就是乘法法则中 只要有一对 对应元素都为1则Cij=1
你也可以写个乘法,然后把>=1 都写成1就可以了 (0-1矩阵)

9.4闭包

把不在R中的所有形如(a,a)的有序对加入R,得到R的自反闭包

同样地,加入(a,b)属于R而(b,a)不属于R,这个新关系是对称的,称为R的对称闭包

传递闭包有点复杂,要不断加入新东西直到不能加

将关系看成一条条路,比如a,b 看成a能走到b 但b走不过来a
除非加入b,a或者其他一些路构成回路

定理:设R是集合A上的关系,从a到b存在一条长为n的路径,当且仅当(a,b)属于R^n

数学归纳法
n=1 显然成立
假设对于n=k,成立,从a到b存在k+1的路径,一定有一条长1 (a,c)属于R,一条k(c,b)属于R^k连起来
因此 从a到b存在k+1的路径,当且仅当有一条长1 (a,c)属于R,且(c,b)属于R^k,若有这样的c当且仅当(a,b)属于R^(n+1)

R*=R+R^2+。。。。。。。。R^n

定理:关系R的传递闭包等于连通性关系R*

传统算法2n^3(n-1)
沃舍尔算法 2n^3

  1. 首先是从定义出发的标准算法,若要求出包含关系R的最小的传递闭包,我们就要为R中的每一种可能传递的关系补完其可传递性。不同于自反和对称闭包,传递的复杂之处在于,他是可以有多重传递的,这就造成了初次补完R以后,新添加的关系有可能会和原有的关系一起产生新的传递关系(路径),这时候就需要二次补完。同样的道理,三次、四次…直到n次(n为R的顶点数)以后。
    如上描述,求传递闭包的标准方法就是依次求出1、2、3…、n阶传递关系并在每阶求完之后与前一阶的矩阵联合,再进行下一阶的求解。具体的操作方法是对原矩阵MR(图7-11右)进行布尔幂运算。我们可以看到——MR[k]的值mij正好是其前一阶,即MR[k-1]的i行j列(或者说,顶点i和顶点j之间)传递关系存在与否的解。(难理解的话可以亲手算一算)。

  2. 接着是沃舍尔算法,这个算法比前面的标准算法复杂度上少了一阶。沃舍尔算法使用了一条路径的“内点”的概念。即如a,b,c,…..,x样的一条路径,除去a和x之外的所有端点称为这条路径的内点。具体的操作方法是以R为开头构造一系列(n个)矩阵,他们是W0 ,W1,W2,W3,W4 …..,其中W0= MR。这看起来和标准算法差不多,但是沃舍尔算法的高阶矩阵的值并不是由前一阶的布尔幂运算得来。而是这样定义的:Wk=[wij[k]],如果存在一条从vi到vj的路径且这条路径的所有内点都在集合{v1,v2,….,vk}(表中的前k个顶点)内,那么wij[k]=1,否则为0.(注意有两个合取的条件)。
    可以看到,因为Wk-1中的“1”也必然满足于Wk,所以Wk-1中的“1”可以直接继承到Wk之中,即wij[k-1]=1→wij[k]=1。而对于Wk-1中的0,从前段的定义中我们可以看到,对于wij[k-1]为0,而wij[k]为1的情况,当且仅当wik[k-1]=1且wkj[k-1]=1。(或者使用路径的说法——存在一条从vi到vk和一条从vk到vj的路径,使得当内点集合扩大到vk时才满足了前段定义的第二条条件)注意这里的下标k,不再泛指k≤n的正整数,而是实指当前正在运算的Wk的k。举图7-11的例子来说明,W1的w24[1]的值应该是w21[0]*w14[0]=1,而在W0中这个位置的值是0.
    总结来说,标准算法是通过n阶布尔幂来化简多重传递,并在过程中进行了矩阵合并的运算以保证所有路径都被保留;而沃舍尔算法在每阶矩阵的每个元素上,最多只进行2次布尔运算就可以取代标准算法的一个复杂度为O(n)的矩阵运算,因此效率得以提升。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值