离散数学反对称关系_学习笔记|离散数学·关系

本文详细探讨了离散数学中的关系性质,包括自反、对称、传递、反自反和反对称。对称关系并不总是自反的,但自反关系总是对称的。还介绍了复合关系、逆关系的概念,以及关系的闭包运算,如自反闭包、对称闭包和传递闭包。最后,阐述了集合的划分和覆盖的定义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

b5216466adb9ddb10454a3fbfb4a25af.png

3-6 关系的性质

自反

定义3-6.1 : 设R为定义在集合X上的二元关系,如果对于每一个
则称二元关系R是自反的。

例如,在实数集合上,
,因为对于任意的实数,
成立;

又如平面上的全等?三角形是自反的

对称

定义3-6.2 : 设R为定义在集合上的二元关系,如果对于任意的
,有
可以找到一个y,推出
,则成集合X上,关系R是对称的。

,因为对于xRy来说,其中的y应该是任何一个在X中的元素都可以充当的,若说
,则表达成为了“对于任何一个在X中的x,只能有部分的X中的元素(y),可以满足”
“这个条件。

于是这样就人为地减少了y的可能性,而对称应该是对于X中全体元素而言的。

这样,有些集合上的关系,即使自反的,又是对称的。

但是其中,自反和对称也有些许不同:

  • 如果自反,说明,对任意的元素,R满足”交换律”,而因为是自身对自身的关系(xRx),缺少了 对称中y的任意性
  • 对称是满足自反条件的么?
  • 如果说 R是对称关系,那么由于x,y的任意选取,势必会涉及到x=y的情况,如果满足了这种情况的话,对称的前件是xRy,那是否可以说明就存在xRx了呢?
  • 即对称关系都满足自反,但是自反不一定能推出对称???
  • 另外,对称说“每当xRy”,那么xRy是一定成立的么?

传递

定义3-6.3:设R定义在X上的二元关系,对于
,每当 xRy , yRz时,就有xRz

值得一提的是,要事先成立 xRy,yRz 才可以

Ex:

,祖先关系

反自反

定义3-6.4: R为定义在X上的二元关系,若对于每一个X中的元素x来说,都存在
,那么我们说,R为反自反的

换言之,要求X中的元素, 全部 不自反,才是反自反。 不可以存在有一部分的 自反 自反 和 反自反 是分属于两个极端情况的,中间还有 “部分自反,部分不自反”的情况。 一个“不是自反”的关系,“不一定“就是”反自反“;一个不是 反自反 的关系,也同样不一定就是自反。

反对称

定义3-6.5:R为定义在X上的二元关系,若对于
,那么一定有x=y

序偶属于反对称么???
换言之,若对于

  • 反对称和对称有包含关系,因为所谓“全等”,既是对称,又是反对称,因为我们承认了一个元素的唯一性。 所以在这种 “全等”情况下, 我们成它既是对称,又是反对称 的(x=y)

Ex:A={1,2,3},S在A上,S={<1,1>,<2,2>,<3,3>} S在A上就既是对称,又是反对称的。

  • 同样的,也有既不是对称,也不是反对称 的情况。 这是因为对称关系,要求<x,y>,<y,x>同时在S中出现,如果我们在对称时,随便取出一个<y,x>但不取走全部的<y,x>,我们就可以实现两个“既不”

Ex:A={a,b,c},S在A上,S={<a,b>,<a,c>,<c,a>},那么S在A上就既不是对称的,也不是反对称的。

  1. 或许我们可以换言之,如果把对称关系中全部的<y,x>都取出,那么就是反对称的;
  2. 如果只取出部分,那么就是 既不是对称,也不是反对称的。
  3. 如果仅仅 x=y,那么就 既是对称,也是反对称的。
这里要注意的是,如何用矩阵/图来表示集合上的关系

3-7 复合关系和逆关系

复合

R是A到B的二元关系,S是B到C的二元关系,存在B中的一个元素y, 有<a,y>,<y,c>,则有<a,c>.

合成运算是对关系的二元运算,它能够由 两个关系生成一个新的关系。

二元运算:xx和yy——生成一个新的关系,这里的xx,yy可以任意选取,甚至可以选取另一组运算。

  • 合成运算是可结合的 A---B---C
  • R本身所组成的复合关系 :

复合关系也可以使用矩阵表示

其中,

表示逻辑加:

0

0=0 ,1
0=1,0
1=1 ,
1
1=1

这与矩阵的乘法相似,不过我们要注意的是,如果按照“矩阵乘法”计算出大于1的数,在关系矩阵中,我们都按照1来计算(即 非零常数皆为1

矩阵的乘法:
矩阵相乘最重要的方法是一般矩阵乘积。它只有在第一个矩阵的列数(column)和第二个矩阵的行数(row)相同时才有意义。一般单指矩阵乘积时,指的便是一般矩阵乘积。
1、当矩阵A的列数(column)等于矩阵B的行数(row)时,A与B可以相乘。
2、矩阵C的行数等于矩阵A的行数,C的列数等于B的列数。
3、乘积C的第m行第n列的元素等于 矩阵A的第m行的元素矩阵B的第n列对应元素 乘积之和

107ae80fcce985e48e2ea6b3993d1f15.png
源自百度百科 词条 -矩阵乘法

f25b07ff1ed52af7ed2e29abeef22e3c.png
除了上述的矩阵乘法以外,还有其他一些特殊的“乘积”形式被定义在矩阵上,值得注意的是,当提及“ 矩阵相乘”或者“ 矩阵乘法”的时候,并不是指代这些特殊的乘积形式,而是定义中所描述的矩阵乘法。在描述这些特殊乘积时,使用这些运算的专用名称和符号来避免表述歧义。

a269d0c1313427cf94ea2de92046ecae.png
struct Matrix:vector<vector<int> >//使用标准容器vector做基类,需#include语句
 
{
     
    Matrix(int x=0,int y=0,int z=0)//初始化,默认为0行0列空矩阵
     
    {
         
        assign(x,vector<int>(y,z));
    
    }
     
int h_size()const//常量说明不可省,否则编译无法通过
     
{
         
return size();
     
}
     
int l_size()const
     
{
         
return empty()?0:front().size();//列数要考虑空矩阵的情况
     
}
     
Matrix pow(int k);//矩阵的k次幂,用快速幂实现,k为0时返回此矩阵的单位矩阵
};
 
Matrix operator*(const Matrix &m,const Matrix &n)//常量引用避免拷贝
 
{
    if(m.l_size()!=n.h_size())return Matrix();//非法运算返回空矩阵
     
Matrix ans(m.h_size(),n.l_size());
     
for(int i=0; i!=ans.h_size(); ++i)
         
for(int j=0; j!=ans.l_size(); ++j)
             
for(int k=0; k!=m.l_size(); ++k)
                 
ans[i][j]+=m[i][k]*n[k][j];
    
return ans;
 
}
 
Matrix Matrix::pow(int k)
 
{
     
if(k==0)
     
{
         
Matrix ans(h_size(),h_size());
         
for(int i=0; i!=ans.h_size(); ++i)
             
ans[i][i]=1;
        return ans;
     
}
     
if(k==2)return (*this)*(*this);
     
if(k%2)return pow(k-1)*(*this);
     
return pow(k/2).pow(2);
}

2020.4.2更新

逆关系

定义3-7.2 设R为X到Y的二元关系,如果将R中每一序偶的元素顺序互换,所得到的集合成为R的逆关系。记作

简而言之, 是在序偶的“序”上做文章。颠倒过来的关系 父子——子父

从逆关系的定义 得出

定理3-7.1 R,R1,R2都是从A到B 的二元关系,则

定理3.7-2 设T:X→Y, S:Y→Z,

定理3.7-3 R为X上的二元关系,
  • R是对称的,当且仅当
  • R是反对称的,当且仅当
转置矩阵

3ccdbbbab4d04e867febdb94e21a187d.png

49a2c2848c71712f7b114670bdcf3e54.png

3-8 关系的闭包运算

给定的关系——扩充一些序偶——得到具有某些特殊性质的新关系

定义3-8.1 设R是X上的二元关系,如果有另一个关系R'满足:
  • R'是自反的 (或者对称的,可传递的。我们以自反为例叙述 闭包运算的性质)
  • 对于任何自反的 关系R'',如果有
    ,则有

则称R'为R的自反闭包。

自反闭包 是包含R的 最小自反关系。对称,传递亦然。

记作:R上,

  • 自反闭包——r(R)
  • 对称闭包——s(R)
  • 传递闭包——t(R)
  • R是自反的,当且仅当r(R)=R

t(R)Warshall 有效算法

简言之:若第a列上的x,y,z行的值为1,那么就x,y,z行的数统统与第a行相加,得到一个新的矩阵,然后继续 逐列扫描。


       //初始化 输入矩阵 
        int R[n][n] = {0};
        for(int i1 = 0; i1 <= n-1; i1++)
            for(int j1 = 0; j1 <= n-1; j1++)
                scanf("%d",&R[i1][j1]);
        //Warshall
        for(int i2 = 0; i2 <= n-1; i2++)
            for(int j2 = 0; j2 <= n-1; j2++)
        {
                if(R[j2][i2] != 0)
                {
                   for(int k = 0; k <= n-1; k++)
                        R[j2][k] |= R[i2][k];
                }
        }


   代码原文链接:https://blog.youkuaiyun.com/weixin_41934068/java/article/details/80274795

2020.4.7

3-9 集合的划分和覆盖

定义3-9.1 分块 -->覆盖 or 划分

覆盖——A中每个元素至少属于一个分块

划分——每个元素属于且仅属于一个分块

覆盖/划分——都是全体分块构成的集合

1e1415762af3450db213f2d8f59b6d3b.png

9e17f98869fb600e0c415730227709ab.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值