离散数学实验二:集合上二元关系性质判定的实现

合集下载

集合上二元关系性质判定的实现

集合上二元关系性质判定的实现

《离散数学》实验报告(2015/ 2016 学年第一学期)题目:集合上二元关系性质判定的实现专业学生姓名班级学号指导教师指导单位计算机学院计算机科学与技术系日期2015年10月20日集合上二元关系性质判定的实现一、实验内容和要求内容:编程实现任意集合上二元关系的性质判定。

要求:能正确判定任意二元关系的自反性、对称性、传递性、反自反性和反对称性。

二、实验目的能够利用编程正确判定任意二元关系的自反性、对称性、传递性、反自反性和反对称性。

三、实验任务1、主函数流程图:2、函数Analagmatic()通过判断矩阵主对角线是否为1。

3、函数Irreflexive()通过判断矩阵主对角线是否为0。

4、函数Symmetry()判断矩阵A[x][y]是否等于A[y][x]5、函数Antisymmetry()判断A[x][y]*A[y][x]是否为16、函数Transitivity()判断A[x][p]*A[p][y]==1&&A[x][y]是否为1以上各函数皆通过将集合化为矩阵并用循环遍历实现。

四、实验内容#include<iostream>#include<fstream>using namespace std;int A[100][100];int n;void Input() //输入函数{cout<<"请输入元素个数:";cin>>n;cout<<"请输入相应的"<<n<<"阶矩阵(0,1)"<<endl;for(int i=0;i<n;i++){for(int j=0;j<n;j++){cin>>A[i][j];}}}void Analagmatic() //判断自反性{for(int x=0;x<n&&A[x][x]==1;x++){}if (x==n)cout<<"该二元关系具有自反性"<<endl;elsecout<<"该二元关系不具有自反性"<<endl;}void Irreflexive() //判断反自反性{for(int x=0;x<n&&A[x][x]==0;x++){}if(x==n)cout<<"该二元关系具有反自反性"<<endl;elsecout<<"该二元关系不具有反自反性"<<endl;}void Symmetry() //判断对称性{for(int x=0;x<n;x++){for(int y=0;y<n&&A[x][y]==A[y][x];y++);{}if(y!=n){ cout<<"该二元关系不具有对称性"<<endl;return;}}cout<<"该二元关系具有对称性"<<endl;}void Antisymmetry() //判断反对称性{for(int x=0;x<n;x++){for(int y=0;(y<n&&A[x][y]*A[y][x]!=1)||(y<n&&x==y);y++);{}if(y!=n){ cout<<"该二元关系不具有反对称性"<<endl;return;}}cout<<"该二元关系具有反对称性"<<endl;}void Transitivity() //判断传递性{int s=1;for(int x=0;x<n;x++){ int p=0;for(int y=0;x<y;y++){if(A[x][p]*A[p][y]==1&&A[x][y]!=1) s=0;}p++;}if(s==0)cout<<"该二元关系不具有传递性"<<endl;elsecout<<"该二元关系具有传递性"<<endl;}int main(){Input();Analagmatic();Irreflexive();Symmetry();Antisymmetry();Transitivity();return 0;}五、测试数据及其结果分析实验操作过程及实验数据测试如上图。

离散数学ch2.二元关系(5、6、7节)

离散数学ch2.二元关系(5、6、7节)

VS
详细描述
关系的对称差运算可以用符号表示为 R△S,其中 R 和 S 是两个关系。它包括 属于 R 但不属于 S,以及属于 S 但不属 于 R 的所有有序对。如果 (a, b) 在 R△S 中,那么 (a, b) 或者只属于 R,或者只属 于 S。
04
CATALOGUE
关系的闭包
闭包的定义
1 2
关系的交运算可以用符号表示为 R ∩ S,其中 R 和 S 是两个关系 。它包括同时属于 R 和 S 的所有 有序对。如果 (a, b) 在 R ∩ S 中 ,那么 (a, b) 同时是 R 和 S 的差是一种集合差集操作,它从第一个 关系中去除与第二个关系共有的元素。
中可以推导出的新事实。
数据完整性
03
在数据库设计中,闭包的概念用于确保数据的完整性和准确性
,防止出现冗余和不一致的情况。
05
CATALOGUE
关系的类型
函数关系
总结词
函数关系是一种特殊的二元关系,它满足每 个自变量都有唯一的因变量与之对应。
详细描述
在函数关系中,对于定义域中的每一个元素 ,在值域中都有唯一一个元素与之对应。这 种关系具有明确性、确定性和无重复性。常 见的函数关系有数学函数、映射函数等。
离散数学ch2.二元 关系(5、6、7节)
contents
目录
• 引言 • 二元关系的性质 • 关系的运算 • 关系的闭包 • 关系的类型 • 关系在数据库中的应用 • 关系在人工智能中的应用
01
CATALOGUE
引言
定义与概念
定义
二元关系是集合论中的一个基本概念 ,它描述了两个元素之间的联系。
在设计关系型数据库时,需要考虑数据结构、数据完整性、数据冗余和数 据安全性等方面。

《离散数学》中二元关系传递性的判定

《离散数学》中二元关系传递性的判定

《离散数学》中二元关系传递性的判定离散数学是一门研究离散结构的数学学科,而二元关系是离散数学中一个重要的概念。

在离散数学中,我们经常需要对二元关系进行判定,其中最为重要的性质之一就是传递性。

本文将围绕《离散数学》中二元关系传递性的判定展开讨论。

让我们来了解一下什么是二元关系。

在集合论中,如果给定一个集合A,那么A的二元关系R可以定义为A中元素之间的某种关系。

具体来说,对于任意的a、b∈A,如果(a, b)∈R,那么称a与b有关系R。

二元关系可以用有向图来表示,其中A中的元素对应图中的结点,而关系R中的元素对应图中的边。

为了简化描述,我们暂时不考虑关系R的性质,而只讨论关系R中元素的组成部分。

对于集合A={1,2,3,4},我们可以定义一个二元关系R={(1,2),(2,3),(3,4),(4,1)}。

这样,我们就得到了一个有向图来表示关系R,如下图所示:[图一]在这个有向图中,结点1和结点2之间有一条有向边,表示(1,2)∈R;结点2和结点3之间也有一条有向边,表示(2,3)∈R;依此类推。

很显然,通过有向图可以直观地看出集合A中元素之间的关系。

那么,关系R中的元素有哪些性质呢?在这里我们先介绍关系R的一条重要性质:传递性。

传递性是指如果对于任意的a、b、c∈A,如果(a, b)∈R且(b, c)∈R,那么(a,c)∈R。

直观地说,如果关系R中存在一条从a到b的有向边,同时存在一条从b到c的有向边,那么就应该存在一条从a到c的有向边。

下面我们将讨论如何判定关系R中的传递性。

对于关系R中的传递性,常用的方法是直接检验。

我们可以利用集合A中元素之间的关系,通过逐对比较来判断关系R是否满足传递性。

下面我们以一个具体的例子来说明。

考虑集合A={1,2,3,4},定义二元关系R={(1,2),(2,3),(3,4),(4,1)}。

为了判断关系R是否传递,我们需要逐对比较关系R中的元素。

我们找到所有满足(a, b)∈R和(b, c)∈R 的元组,然后检查是否存在(a, c)∈R。

《离散数学》中二元关系传递性的判定

《离散数学》中二元关系传递性的判定

《离散数学》中二元关系传递性的判定
在离散数学中,二元关系是指一个关联两个元素的集合。

传递性是二元关系的一个重要性质。

传递性是指如果某个关系中的元素a与另外两个元素b和c之间有关联,而且b 与c之间也有关联,那么就可以推断出a与c之间也有关联。

传递性的判定方法有多种,下面我们将介绍两种常用的判定方法。

一、图形法
图形法是通过绘制一个关系的有向图,并判断图中是否存在从一个元素到另一个元素的路径来判定传递性。

具体操作步骤如下:
1. 绘制有向图:将关系中的元素表示为图中的结点,关系表示为有向边。

根据关系定义,确定图中的结点以及结点之间的有向边。

2. 找到路径:从一个元素出发,通过有向边找到与它关联的所有元素,然后再通过有向边找到这些元素关联的所有元素,一直继续下去,直到找不到新的元素为止。

3. 判断传递性:如果从一个元素出发,可以找到与之存在关联的所有元素,那么就说明关系是传递的。

二、矩阵法
矩阵法是将一个关系表示为一个方阵,通过矩阵的乘法运算来判定传递性。

1. 构建矩阵:将关系中的元素表示为矩阵的行和列,关系的存在与否表示为矩阵元素的值。

如果元素a与元素b之间存在关系,那么矩阵的第a行第b列的值为1,否则为0。

2. 矩阵乘法:将矩阵与自身进行乘法运算,得到的结果是一个新的矩阵。

这两种判定传递性的方法都比较简单直观,可以根据具体情况选择适用的方法。

在实际应用中,传递性的判定常常与其他性质一起使用,以提供更准确的判断结果。

集合上二元关系性质判断的实现

集合上二元关系性质判断的实现
二、实验环境(实验设备)
硬件:PC机。
软件:Code::Blocks(C++)
三、实验原理及内容
内容:首先输入要求二元关系的集合所对应的全集中的元素个数以及各个元素,屏幕输出该全集以便使用者观看,然后输入要求二元关系的集合中的各个元素,程序调用判断各个关系的函数,最后在屏幕输出是否具有各个二元关系,并且询问是否继续使用,若继续使用则重复进行上述过程。
{
if(i==j)
{
continue;
}
else
{
if(c[j].Getleft()==c[i].Getright())
{
for(k=0;k<n;k++)
{
if(c[k].Getleft()==c[i].Getleft()&&c[k].Getright()==c[j].Getright())
{
break;
}
bool Duichen_or_not(element c[],int n)//对称性的判断
{
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(c[j].Getleft()==c[i].Getright()&&c[j].Getright()==c[i].Getleft())
}
cout<<"对称性:";
if(Duichen_or_not(collection,number_2))
{
cout<<"Yes"<<endl;
}

离散数学2

离散数学2
23
在上例中3个结果矩阵是 在上例中 个结果矩阵是: 个结果矩阵是
24
求传递闭包--Warshall算法 求传递闭包--Warshall算法 --Warshall
设集合基数为n 构造n+1个矩阵W 设集合基数为n,构造n+1个矩阵W0,W1,W2, n+1个矩阵 …Wn,W0为t( R )的关系矩阵,Wn即为t( R )的关系矩阵 Wn,W )的关系矩阵,Wn即为 的关系矩阵,Wn即为t( )的关系矩阵 (1)令 (1)令W0=MR (2)设Wi- 已求出,现求Wi (2)设Wi-1已求出,现求Wi 考虑Wi- 的第i 考虑Wi-1的第i列,列中为1的元素分别位于P1,P2…行, Wi 列中为1的元素分别位于P 行 同时考虑第i 该行中为1的元素位于q 同时考虑第i行,该行中为1的元素位于q1,q2…列,则: 列 i中第 中第P 列的元素改为1 把W i中第PS行qt列的元素改为1; (3)重复(2)过程,直到求出Wn (3)重复(2)过程,直到求出Wn 重复(2)过程 (4)根据Wn写出t( (4)根据Wn写出t( R ) 根据Wn写出 2.5.3) (见书上例2.5.3) 见书上例2.5.3
7
传递性:若x到y有边,y到z有 边,则x到z必有边。
8
二元关系的性质对应于关系图, 二元关系的性质对应于关系图,有: (1)自反性:每个顶点都有自回路, )自反性:每个顶点都有自回路, (2)反自反性:每个顶点都没有自回路; ) 自反性:每个顶点都没有自回路; ( 3) 对称性 : 任二个顶点间或没有边 , 或有二 ) 对称性: 任二个顶点间或没有边, 条方向相反的有向边; 条方向相反的有向边; ( 4) 反对称性 : 任二个顶点至多只有一条有向 ) 反对称性: 也即:或没有边,或只有一条有向边) 边;(也即:或没有边,或只有一条有向边) 有边, 有边, (5)传递性:若x到y有边,y到z有边, )传递性: 则x到z必有边。 必有边。

《离散数学》中二元关系传递性的判定

《离散数学》中二元关系传递性的判定

《离散数学》中二元关系传递性的判定离散数学是计算机科学中的重要基础学科之一,而二元关系是离散数学中的重要概念之一。

二元关系是指给定集合上的两个元素之间的一种关系,它可以用来描述集合中元素之间的某种联系或者性质。

在离散数学中,二元关系的性质和特性是非常重要的,其中传递性是二元关系的一个重要性质之一。

在本文中,我们将介绍离散数学中二元关系传递性的判定方法,以及一些相关的例子和应用。

让我们来回顾一下二元关系的定义。

设A是一个集合,R是A上的二元关系,即R是A的子集。

对于A中的元素a和b,如果(a, b)∈R,我们就说a和b满足关系R。

假设A={1,2,3},R={(1,1),(2,2),(2,3)},则R是A上的一个二元关系,因为R是A的子集,并且R中的元素都是A中的元素对。

在离散数学中,二元关系的传递性是一个非常重要的性质。

一个二元关系R在集合A 上是传递的,如果对于A中的任意元素a、b和c,如果(a, b)∈R且(b, c)∈R,则(a, c)∈R。

换句话说,如果R中的元素对(a, b)和(b, c)都属于R,那么(a, c)也属于R。

这种传递性的性质在实际应用中非常重要,它可以用来描述很多实际情况下元素之间的某种传递关系。

那么,我们如何判定一个二元关系是否具有传递性呢?在离散数学中,有几种方法可以用来判定二元关系的传递性。

下面我们将介绍其中的一些方法。

方法二:矩阵分解法另一种判定二元关系传递性的方法是使用矩阵分解。

设A是一个有限集合,R是A上的一个二元关系,我们可以用一个|A|×|A|的矩阵M来表示R。

如果R是传递的,那么M 的幂运算M^2、M^3等也会反映这种传递性质。

我们可以通过计算M、M^2、M^3等来判断R是否具有传递性。

方法三:通过定义直接推导根据二元关系传递性的定义,我们还可以通过对二元关系的定义进行直接推导,以判断它是否具有传递性。

对于一个给定的二元关系R,在集合A上是传递的,如果对于A中的任意元素a、b和c,如果(a, b)∈R且(b, c)∈R,则(a, c)∈R。

《离散数学》中二元关系传递性的判定

《离散数学》中二元关系传递性的判定

《离散数学》中二元关系传递性的判定离散数学作为数学的一个分支,探索的是离散的结构,比如集合、图、数论等。

而在离散数学中,二元关系是一个非常重要的概念。

二元关系代表了两个元素之间存在某种特定关系的性质,比如等于、大于、包含等。

而在二元关系中,传递性是一个非常重要的性质,本文将会讨论《离散数学》中二元关系传递性的判定。

让我们来了解一下二元关系的传递性是什么意思。

一个二元关系R在集合A上是传递的,如果对于集合A中的元素a、b和c,当aRb且bRc成立时,必定有aRc也成立。

换句话说,如果R关系中的两个元素之间存在一种关系,那么这种关系应该能够传递到任意的元素上去。

然后,我们来看一下二元关系传递性的判定方法。

在《离散数学》中,判定一个二元关系是否传递有一些方法和技巧。

其中一个最基本的方法就是使用直接证明法。

具体来说,对于一个关系R在集合A上,我们需要证明对于集合A中的任意元素a、b和c,如果aRb且bRc成立,则aRc也成立。

这需要我们对于aRb和bRc的关系进行分析,并结合R关系的定义来进行推导,从而得出aRc的结论。

如果我们成功地证明了这一点,那么就可以得出结论:关系R在集合A上是传递的。

需要注意的是,判定二元关系传递性的过程可能会比较复杂,因此需要我们对于关系R的定义和集合A中元素的性质有深入的了解,同时需要运用逻辑推理和数学推导的方法。

在实际操作中,我们可能需要借助一些具体的例子来帮助我们理解和分析,以及验证我们的结论是否正确。

让我们通过一个例子来演示一下如何判定二元关系的传递性。

我们来考虑一个集合A={1,2,3,4,5}上的一个二元关系R,其中关系R定义如下:对于任意的a、b∈A,aRb当且仅当a+b是偶数。

我们需要判定关系R是否传递。

我们假设存在元素a、b和c,满足aRb且bRc成立。

根据关系R的定义,可以得出以下结论:1. 若aRb,则a+b是偶数2. 若bRc,则b+c是偶数我们需要推导出aRc是否成立。

离散数学第4章-二元关系

离散数学第4章-二元关系

4.6 等价关系与划分
• 三 性质 • 定理4.13 设R是A上的等价关系,则 (1)对任一a∈A,有a∈[a]; (2)对a, b∈A,如果aRb,则[a]=[b]; (3)对a, b∈A,如果(a, b)∉R,则[a]∩[b]=∅; (4)∪a∈A[a]=A。
4.6 等价关系与划分
• 定理4.14 集合A上的任一划分可以确定A上 的一个等价关系R。 • 定理4.15 设R1和R2是A上的等价关系, R1=R2⇔ A/R1=A/R2 。 • 定理4.16 设R1和R2是A上的等价关系,则 R1∩R2是A上的等价关系。
4 .3 关系的运算
• 一 逆运算 • 定义4.7(逆关系) 设R是从A到B的二元关系, 则从B到A的二元关系记为R-1,定义为R-1 ={(b,a)|(a,b)∈R},称为R的逆关系。 • 定理2.1 (1)(R-1)-1=R; (2)(R1∪R2)-1= R1-1∪ R2-1; (3)(R1∩R2)-1= R1-1 ∩R2-1; (4) (A×B)-1= B×A;
4 .5 关系的闭包

• (1) (2) (3) • (1) (2) (3)
二 基本性质
定理4.5 设R是A上的二元关系,则 R是自反的 ⇔ r( R )=R; R是对称的 ⇔ s( R )=R; R是传递的 ⇔ t( R )=R; 定理4.6 设R1和R2是A上的二元关系,若R1⊆R2则 r(R1)⊆ r(R2); s(R1)⊆ s(R2); t(R1)⊆ t(R2)。
第四章 关系
4.1 二元关系 4.2 关系的性质 4 .3 关系的运算 4 .5 关系的闭包 4.6 等价关系与划分
4.1 二元关系
• 一 定义4.1(二元关系)
设A和B是任意两个集合,A×B的子集R称为从A到 B的二元关系。当A=B时,称R为A上的二元关系。若 (a, b)∈R,则称a与b有关系R,记为aRb。 (a, b)∉R:a与b没有关系R R=∅:空关系 R=A×B:全关系

《离散数学》中二元关系传递性的判定

《离散数学》中二元关系传递性的判定

《离散数学》中二元关系传递性的判定离散数学是大学中的一门重要课程,它涉及到了数学中的一些基础概念和思维方法。

在离散数学中,二元关系是一个非常重要的概念,而关系的传递性则是评判一个二元关系是否具有某种性质的重要标准之一。

本文将介绍《离散数学》中二元关系传递性的判定方法及相关概念。

我们先来回顾一下什么是二元关系。

在集合论中,如果给定了两个集合A和B,我们把A和B中的元素按照某种规则一一对应起来,这种对应关系就叫做二元关系。

一般来说,二元关系可以用有序对的形式来表示,即如果元素a和元素b满足某种关系,则用(a, b)来表示。

集合A={1,2,3},集合B={a,b,c},如果我们规定元素1和元素a满足某种关系,那么就可以表示为(1, a)。

这就是一个简单的二元关系的例子。

而关系的传递性,则是指如果对于二元关系R中的任意元素(a, b)和(b, c),如果(a, b)∈R,(b, c)∈R,那么(a, c)也应该属于R。

也就是说,如果R中的元素满足传递性,那么对于任意的元素a、b、c,只要(a, b)和(b, c)属于R,那么(a, c)一定也属于R。

这是关系传递性的基本定义。

那么,如何判定一个二元关系是否具有传递性呢?判定一个二元关系是否具有传递性,一般可以通过以下步骤进行:第一步,先确定二元关系R中的所有元素,即找出R中所有满足(a, b)的有序对。

举个例子来说,如果我们有一个集合A={1,2,3,4},二元关系R={(1,2),(2,3),(3,4)}。

我们可以看到,对于元素1、2、3、4,都满足(a, b)和(b, c)的情况。

(1,2)属于R,(2,3)也属于R,那么(1,3)也应该属于R。

但是在R中,并没有(1,3)这个元素,因此R并不具有传递性。

通过以上的例子,我们可以看到,判定一个二元关系是否具有传递性,只需要简单地验证对于R中的每一组(a, b)和(b, c),是否都有(a, c)也属于R即可。

离散数学 ch2.二元关系(3,4节)

离散数学 ch2.二元关系(3,4节)

下边R3、R4、 R6 、 R8均是对称关系。
1


1

2
。 。 3
R1
1
。 。 3
R2
1
。 。 2。 。 3 3
R3
1
R4
1

2

2


2
。 。 3
R5
。 。 3
R6
。 。 2。 。 3 3
R7 R8
四.反对称性
定义:设R为集合X中关系,若对任何x, y∈X,如果有 (x,y)∈ R,和(y ,x)∈ R,就有x=y,则称R为A中反对称关系 。 如实数的小于关系<,≤ ,均是反对称的。父子关系是反 对称的。
R 3 {(1,2), (3,0), (3,2)}
性质 判定 自反性
从关系的有向图 每个结点都有环
从关系的矩阵 主对角线全是1
反自反性
对称性 反对称性
每个结点都无环
主对角线全是0
不同结点间如果有边, 是以对角线为对称 则有方向相反的两条 的矩阵 边. 不同结点间,最多有一 以主对角线为对称 条边. 的位置不会同时为1
实际上r(R)、(s(R) 、t(R)) 就是包含R的“最小” 的自反(对称、传递)关系。 三.计算方法 定理1.给定 A中关系R,则 r(R)=R∪IA。 证明:令R’=R∪IA,显然R’是自反的和RR’,下 面证明R’是“最小的”:如果有A上自反关系 R”且RR”,又IAR”,所以 R∪IAR”,即R’R”。 所以R’就是R的自反闭包。即r(R)=R∪IA 。 ~ R 定理2.给定 A中关系R,则 s(R)=R∪ 。 证明方法与1.类似。(集合法) 定理3.给定 A中关系R,则 t(R)=R∪R2∪R3∪... 。 证明:令R’= R∪R2∪R3∪..., ⑴显然有 RR’ ;

离散第二次实验--矩阵求集合二元关系

离散第二次实验--矩阵求集合二元关系

遇到的问题
用矩阵判断传递性的理论知识不正确.
原理论: 矩阵(M*M)中1所在的位置,M中与之对应位置都为1.
正确理论: 对于集合,若有 n个元素,对于关系矩阵M,计算M^2,如果M里为0的 元素,M^2对应元素也为0,则传递.
感谢所有组员系矩阵的联系,可以引入N维数组,以数 组 的运算来实现二元关系的判断。
自反性 反自反性 对称性 反对称性 传递性
对角线元素全为1 对角线元素全为0 对称矩阵 主对角线上的元素等于1且与之 对称的元素等于0 对于集合,若有 n个元素,对于 关系矩阵M,计算M^2.如果M里为 0的元素,M^2对应元素也为0 ,则传递.
核心代码: DetectAndConvert
将输入的 元素提取 数组存入 数组,返 回元素个 数 strtok 切割字符 串
核心代码:
开始 判断左尖括号 得到横坐标 _x (FindPosition)
PickUp
提取序偶,将序偶所在 矩阵中的位置转换为1
i<len
判断逗号
得到纵坐标_y (FindPosition)
离散数学实验
——第五组
实验名称: 集合上二元关系性质判定的实现
组长: 组员:
ppt制作:
2014-12-30
实验内容和原理
实验内容:编程实现任意集合上二元关系的性质判定。 实验要求:最后能正确判定任意二元关系的自反性、 对称性、传递性、反自反性和反对称性。
数学及实验原理
1.数学原理:自反、对称、传递关系 设A和B都是已知的集合,R是A到B的一个确定的二元关系,那 么集合R就是A×B的一个合于R={(x,y)∈A×B|xRy}的子集合 设R是集合A上的二元关系: ①自反关系:对任意的x∈A,都满足<x,x>∈R,则称R是自反 的,或称R具有自反性,即R在A上是自反的 (x)((x∈A)→(<x,x>∈R))=1 ②对称关系:对任意的x,y∈A,如果<x,y>∈R,那么 <y,x>∈R,则称关系R是对称的,或称R具有对称性,即R在A 上是对称的 (x)(y)((x∈A)∧(y∈A)∧(<x,y>∈R)→(<y,x>∈R))=1 ③传递关系:对任意的x,y,z∈A,如果<x,y>∈R且<y,z>∈R, 那么<x,z>∈R,则称关系R是传递的,或称R具有传递性,即R 在A上是传递的 (x)(y)(z)[(x∈A)∧(y∈A)∧(z∈A)∧((<x,y>∈R)∧(<y,z> ∈R)→(<x,z>∈R))]=1

离散数学ch7[2]二元关系

离散数学ch7[2]二元关系

偏序关系中不存在
x和y不可比,其它是可比
不是偏序关系, 是拟序关系
偏序关系

拟序关系:


对非空集合A上的关系R,如果R是反自反的 和传递的,则称R为A上的拟序关系。 在不会产生误解时,拟序关系R通常记作<。 当aRb时,可记作a < b,读作 "小于" 。
例 在集合N上的小于关系是拟序关系。对集合A,在ρ(A) 上的真包含关系也是拟序关系。
加细和真加细
例 S=正整数集 构造S的划分
A= {{1,3,5,7…}, {2,4,6…}}
B= {{1,5, 9…},{2,6,10…},{3,7,11…},{4,8,12…}} 则划分B是划分A的加细。 同时,划分B也是划分A的真加细。
等价关系
等价关系
定义 设是 X 一个集合和 R 是 X 中的二元关系, 如果关系 R 是自反的、对称的和可传递的, 则称 R 是个等价关系。 设R是一个等价关系,若<x,y>∈R,称x等价于y
等价类定义
传递性
等价关系
商集
定义 设 X 是一个非空集合,R 是 X 中的等价关系。 称 R 等价类的集合 {[x]R|xX}是个 X 对 R 的商集。 并记为 X/R,也可以写成 X(mod R),亦即: X/R={[x]R|xX}
例 设I是整数集,R是模3关系,
则I对于R的商集I/R为:
I/R= { [0]R, [1]R, [2]R}
偏序关系

偏序集
集合A和A上的偏序关系≤一起叫做偏序集,记为 <A,≤>

y覆盖x
对偏序集<A,≤>,如果x,y∈A,x<y,且不存在元素z 使得z∈A且x<z<y,则称y覆盖x。

集合上二元关系性质判定的实现

集合上二元关系性质判定的实现

/*集合上二元关系性质判定的实现《离散数学》* 该程序能够判定任意二元关系的自反性、对称性、传递性、反自反性和反对称性.* Copyright (C) 2013 by ZhangXu, Nanjing University of Posts and Telecommunications.* ALL RIGHTS RESERVED.* E-mail: zx9999998@* Attention! Please Using Microsoft Viual C++ 6.0 and New Project(Win32 Console Application) to Compile and Execute. *//***该文件为源文件,用来实现输入、输出等功能***//***** 该源文件需要包含两个头文件*****/#include"SeqStack.h"#include"RelationMatrix.h"int main(){cout<<"请输入任意有限集合的元素,并以#结束:"<<endl;SeqStack<char>ss(20);char c;do{cin>>c;ss.Push(c);}while(c!='#');ss.Pop();int n;ss.Check();n=ss.GetNumber();cout<<"您输入的该含有"<<n<<"个元素的集合是:";cout<<"{";for(int i=0;i<n;i++){ss.GetElement(c,i);cout<<c;if(i!=n-1) cout<<",";}cout<<"}"<<endl;cout<<"请输入该集合中的二元关系,并以#结束输入"<<endl;SeqStack<char>SS(400);do{cin>>c;if(ss.GetN(c)!=-1&&c!='#') SS.Push(c);}while(c!='#');int **p;for(i=0;i<n;i++)p=new int*[n];for(i=0;i<n;i++)p[i]=new int[n];for(i=0;i<n;i++)for(int j=0;j<n;j++)p[i][j]=0;SS.UpsideDown();while(!SS.IsEmpty()){int a1;char c1;SS.Top(c1);SS.Pop();a1=ss.GetN(c1);int a2;char c2;SS.Top(c2);SS.Pop();a2=ss.GetN(c2);p[a1][a2]=1;}cout<<"您输入的二元关系为:"<<endl;for(i=0;i<n;i++)for(int j=0;j<n;j++)if(p[i][j]==1){char c1,c2;ss.GetElement(c1,i);ss.GetElement(c2,j);cout<<"<"<<c1<<","<<c2<<"> ";}cout<<endl<<"您输入的二元关系的关系矩阵为:"<<endl;for(i=0;i<n;i++){cout<<" ";for(int j=0;j<n;j++)cout<<p[i][j]<<" ";cout<<endl;}if(Reflexive(p,n)) cout<<" 该二元关系具有自反性"<<endl;if(Symmetric(p,n)) cout<<" 该二元关系具有对称性"<<endl;if(Antisymmetric(p,n)) cout<<" 该二元关系具有反对称性"<<endl;if(Irreflexive(p,n)) cout<<" 该二元关系具有反自反性"<<endl;if(Transitive(p,n)) cout<<" 该二元关系具有可传递性"<<endl;return 0;}/*** 文件名:SeqStack.h ***//***该文件用来实现堆栈的数据结构***/#include<iostream>using namespace std;template<class T>classSeqStack{private:intmaxTop;int top;T* s;public:SeqStack(intmSize=20);~SeqStack() { delete []s;}boolIsEmpty()const {return top==-1;}boolIsFull()const {return top==maxTop;}bool Top(T&)const;bool Push(T&);voidUpsideDown();bool Pop();void Clear() {top=-1;};void Print()const;intGetNumber()const;void Check();voidGetElement(T&,int);intGetN(T&);};template<class T>SeqStack<T>::SeqStack(intmSize){if(!mSize){cout<<"申请的栈空间为0,无法建立栈"<<endl;return;}maxTop=mSize-1;top=-1;s=new T[mSize];}template<class T>boolSeqStack<T>::Top(T& x)const{if(IsEmpty()){cout<<"该栈为空,无法返回栈顶值"<<endl;return false;}x=s[top];return true;}template<class T>boolSeqStack<T>::Push(T& x){if(IsFull()){cout<<"该栈已满,无法插入"<<endl;return false;}s[++top]=x;return true;}template<class T>boolSeqStack<T>::Pop(){if(IsEmpty()){cout<<"该栈已为空,无法删除元素"<<endl;return false;}top--;return true;}template<class T>voidSeqStack<T>::Print()const{for(int i=0;i<=top;i++)cout<<s[i]<<" ";cout<<endl;}template<class T>voidSeqStack<T>::UpsideDown(){for(int i=0,j=top;i<j;i++,j--){char temp=s[j];s[j]=s[i];s[i]=temp;}}template<class T>intSeqStack<T>::GetNumber()const {return top+1;}template<class T>voidSeqStack<T>::Check(){for(int i=0;i<top;i++)for(int j=i+1;j<=top;j++)if(s[i]==s[j]){if(j==top) top--;else{s[j]=s[top];top--;j--;}}}template<class T>voidSeqStack<T>::GetElement(T &c,int i) {c=s[i];}template<class T>intSeqStack<T>::GetN(T& c){for(int i=0;i<=top;i++)if(s[i]==c) return i;return -1;}/*** 文件名:Relation Matrix.h ***//***该文件用于判断五种二元关系的五个函数的实现***/ #include<iostream>using namespace std;bool Reflexive(int **p,int n){for(int i=0;i<n;i++)if(p[i][i]==0) return false;return true;}bool Symmetric(int **p,int n){for(int i=0;i<n;i++)for(int j=0;j<n;j++)if(p[i][j]!=p[j][i]) return false;return true;}boolAntisymmetric(int **p,int n){for(int i=0;i<n;i++)for(int j=0;j<n;j++)if(i!=j&&p[i][j]==1&&p[j][i]==1) return false;return true;}boolIrreflexive(int **p,int n){for(int i=0;i<n;i++)if(p[i][i]==1) return false;return true;}bool Transitive(int **p,int n){for(int i=0;i<n;i++)for(int j=0;j<n;j++)if(p[i][j]==1)for(int k=0;k<n;k++)if(p[j][k]==1&&p[i][k]==0) return false;return true;}。

离散数学中二元关系的性质判定

离散数学中二元关系的性质判定

离散数学中二元关系的性质判定
二元关系是离散数学中最基本的概念之一。

二元关系可以描述两个数之间特定的关系。

由于它在组合数学、图论、计算机科学和逻辑学等领域中都有应用,因此对于二元关系的
性质进行判定具有重要意义。

本文将介绍关于二元关系的一些基本性质以及它们的判定方法。

1. 反身性
反身性是二元关系重要的性质之一。

一个关系R是反身的,如果对于对于集合A中的
每个元素x,(x,x)∈R。

也就是说,每个元素都与自身有某种关系。

例子:等于关系“=”是一个反身关系。

判定方法:检查二元关系R中是否每个元素都与自身有关系。

2. 对称性
判定方法:检查二元关系R中是否对于任意两个不同的元素x和y,如果(x,y)∈R,则(y,x)∈R。

3. 传递性
6. 等价关系
等价关系是具有反身性、对称性和传递性的关系。

一个关系R是等价的,如果它是反
身的、对称的和传递的。

判定方法:检查二元关系R是否满足反身性、对称性和传递性。

7. 偏序关系
总结
本文介绍了离散数学中二元关系的一些性质和判定方法。

了解这些性质和方法对于学
习离散数学以及其他数学领域非常重要。

在实践中,应该根据问题需要来选择合适的关系
及其性质,以推导出更准确的解决方案。

离散数学二元关系传递性判别、闭包方法实验报告材料

离散数学二元关系传递性判别、闭包方法实验报告材料

离散数学二元关系传递性判别、闭包方法实验报告学院:理学院班级:11信息与计算科学1班姓名:*** 学号:*************一、实验目的1. 通过上机程序,进一步加深对二元关系传递性判别,自反闭包,对称闭包,传递闭包的理解。

2. 掌握传递性判别,Warshall算法。

3. 学会用程序解决离散数学中的问题。

4. 增强我们编写程序的能力二、实验内容实验1:二元关系传递性判别实验2:有限集上给定关系的自反、对称和传递闭包(用Warshall算法)。

三、实验环境在microsoft visual c++实验环境下完成的,而所设计的程序也在这个环境下通过了编译,运行和测试。

四、实验原理和实现过程实验1:#include <iostream>using namespace std;void main(){int n,i,j,k;int m=0; //m是判断传递关系计数参数cout<<"请输入矩阵的行列数n:";cin>>n;int a[20][20];for(i=1;i<=n;i++){for(j=1;j<=n;j++){cout<<"请输入a["<<i<<"]["<<j<<"]:";cin>>a[i][j];}} //输入R矩阵cout<<"R的关系矩阵为:"<<endl;for(i=1;i<=n;i++){for(j=1;j<=n;j++){cout<<a[i][j]<<" ";}cout<<endl;} //输出R矩阵for(i=1;i<=n;i++){for(j=1;j<=n;j++){if(a[i][j]!=0){for(k=1;k<=n;k++){if(a[i][k]<a[j][k] //利用布尔加的特征,前一行数大于后一行{m=m+1; //如果有一个数不成立,m加1}}}}}if(m==0) cout<<"R有传递关系"<<endl;else cout<<"R没有传递关系"<<endl;}实验2:1)自反闭包#include <iostream>using namespace std;void main(){int n,i,j;cout<<"请输入矩阵的行列数n:";cin>>n;int a[20][20];for(i=1;i<=n;i++){for(j=1;j<=n;j++){cout<<"请输入a["<<i<<"]["<<j<<"]:";cin>>a[i][j];}}cout<<"R的关系矩阵为:"<<endl;for(i=1;i<=n;i++){for(j=1;j<=n;j++){cout<<a[i][j]<<" ";}cout<<endl;}for(i=1;i<=n;i++){for(j=1;j<=n;j++){if(a[i][j]!=0){a[i][i]=1;a[j][j]=1; //把符合条件的对角线上的值改为1 }}}cout<<"R的关系矩阵为:"<<endl;for(i=1;i<=n;i++){for(j=1;j<=n;j++){cout<<a[i][j]<<" ";}cout<<endl;}}2)对称闭包#include <iostream>using namespace std;void main(){int n,i,j;cout<<"请输入矩阵的行列数n:";cin>>n;int a[20][20];for(i=1;i<=n;i++){for(j=1;j<=n;j++){cout<<"请输入a["<<i<<"]["<<j<<"]:";cin>>a[i][j];}}cout<<"R的关系矩阵为:"<<endl;for(i=1;i<=n;i++){for(j=1;j<=n;j++){cout<<a[i][j]<<" ";}cout<<endl;}for(i=1;i<=n;i++){for(j=1;j<=n;j++){if(a[i][j]!=0){a[j][i]=1; //对称元素的值改为1 }}}cout<<"R的对称闭包矩阵为:"<<endl;for(i=1;i<=n;i++){for(j=1;j<=n;j++){cout<<a[i][j]<<" ";}cout<<endl;}}3)传递闭包#include <iostream>using namespace std;void main(){int n,i,j,k;int m=0;cout<<"请输入矩阵的行列数n:";cin>>n;int a[20][20];for(i=1;i<=n;i++){for(j=1;j<=n;j++){cout<<"请输入a["<<i<<"]["<<j<<"]:";cin>>a[i][j];}}cout<<"R的关系矩阵为:"<<endl;for(i=1;i<=n;i++){for(j=1;j<=n;j++){cout<<a[i][j]<<" ";}cout<<endl;}for(j=1;j<=n;j++){for(i=1;i<=n;i++){if(a[i][j]==1){for(k=1;k<=n;k++){a[i][k]=a[i][k]+a[j][k]; //warshall方法if(a[i][k]==2) a[i][k]=1; //规范布尔加}}}}cout<<"R的传递闭包矩阵为:"<<endl;for(i=1;i<=n;i++){for(j=1;j<=n;j++){cout<<a[i][j]<<" ";}cout<<endl;}}五、实验输入输出和数据实验1:1)输入没有传递关系的关系矩阵R2)输入课本P30/例2.6实验2:1)自反闭包2)对称闭包3)传递闭包 P52/例2.13六、实验体会通过这次的实验,使我明白了,平日里学习不能浅尝辄止,必须要知道它的方法。

《离散数学》中二元关系传递性的判定

《离散数学》中二元关系传递性的判定

《离散数学》中二元关系传递性的判定1. 引言1.1 介绍二元关系二元关系是离散数学中一个非常重要的概念。

在离散数学的研究中,我们常常需要研究元素之间的各种关系,而二元关系就是其中一种最基本的形式。

简而言之,二元关系就是一个元素对的集合,其中每个对代表了两个元素之间的关系。

举个简单的例子来说明二元关系。

假设我们有一个集合A={1,2,3,4},我们可以定义一个二元关系R为{(1,2),(2,3),(3,4)}。

在这个关系中,元素1和2之间存在关系,元素2和3之间也存在关系,但是元素1和3之间并没有直接的关系。

二元关系可以通过图形的形式来表示,通常我们用有向图或者无向图来表示不同类型的二元关系。

有向图中,每个节点代表集合中的一个元素,而每条边代表元素之间的关系。

无向图则更多地表示元素之间的对称关系。

通过研究二元关系,我们可以更深入地探讨元素之间的关系性质,为解决各种离散数学中的问题奠定基础。

在接下来的我们将深入研究二元关系的性质以及传递性的重要性。

1.2 引入传递性概念传递性是离散数学中一个重要的性质,它指的是如果集合中的元素之间存在某种关系,那么这种关系是否能够由某种规律或者条件连接起来,使得如果集合中的某两个元素之间存在这种关系,那么它们之间也存在这种关系。

传递性是二元关系中的一个基本概念,它能够帮助我们理解和分析集合中元素之间的关系,从而推断出更多的信息。

在离散数学中,传递性的概念是非常重要的。

通过传递性,我们可以将复杂的关系简化为更加清晰和直观的形式,从而更好地理解集合中元素之间的联系。

传递性也为我们解决问题提供了一种有效的方法,例如在图论、逻辑推理和关系代数等领域中,传递性都扮演着重要的角色。

了解二元关系的传递性及其判定方法对于深入学习离散数学是非常有帮助的。

在接下来的正文中,我们将详细介绍二元关系的定义、性质和传递性的概念,以及如何判定二元关系是否具有传递性,希望能够带给读者更多的启发和认识。

离散数学中二元关系性质判定论文

离散数学中二元关系性质判定论文

离散数学中二元关系的性质判定【摘要】关系的性质是关系中的基本内容,对理解关系有着重要的意义。

文中对二元关系性质的四种判定方法进行了分析和探讨,即,根据定义判定、根据定理判定、根据关系图判定、根据关系矩阵判定。

以加深学生理解,方便灵活运用。

【关键词】离散数学;二元关系;性质;判定【中图分类号】g64 【文献标识码】a 【文章编号】2095-3089(2013)4-0-02离散数学是现代数学的一个重要分支,是计算机科学的理论基础和核心课程。

关系是离散数学中非常重要的一个基本概念,关系的概念在计算机科学是也是最基本的,它在形式语言、编译程序设计、信息检索、数据结构、算法分析、数据库和有限自动机等方面起着重要作用。

关系是一个使用得很频繁的词,如数集上大于关系、小于关系;平面集上的直线平行关系、三角形相似关系;人群集合上的父子关系、同乡关系等,这些都是离散数学中的关系研究的范畴。

所以,离散数学中的关系是一个抽象的概念,定义为笛卡尔积a1×a2×…×an的任意一个子集。

二元关系是我们讨论的重点内容,定义为笛卡尔积a1×a2的任意子集。

关系的性质是关系的基本属性,是认识和分析关系的关键。

关系的基本性质主要包括自反、反自反、对称、反对称以及传递性。

如何判定关系的性质是我们必须要掌握的方法。

关系基本性质的判定主要有四种方法:第一是直接根据定义判定;第二是根据定理判定;第三是根据关系图判定;第四是根据关系矩阵判定。

本文将对这四种方法进行讨论。

1 根据定义判定定义:设ρ是集合a上的二元关系,1)若对于所有的a∈a,有(a,a)∈ρ,则称ρ是自反的。

否则,称ρ是非自反的。

2)若对于所有的a∈a,有(a,a)?ρ,则称ρ是反自反的。

3)对于所有的a,b∈a,若每当有(a,b)∈ρ时就有(b,a)∈ρ,则称ρ是对称的。

否则,称ρ是非对称的。

4)对于所有的a,b∈a,若每当有(a,b)∈ρ和(b,a)∈ρ时,就必有a=b,则称ρ是反对称的。

离散数学,二元关系的性质

离散数学,二元关系的性质

/*实验二、二元关系及其性质、闭包运算【实验目的】掌握二元关系在计算机上的表示方法,并掌握如何判定关系的性质;掌握求关系闭包的方法。

【实验内容和原理】(1)A上的二元关系用一个n×n关系矩阵R=表示,定义一个n×n数组r[n][n]表示n×n矩阵关系。

(2)若R对角线上的元素都是1,则R具有自反性。

(3)若R是对称矩阵,则R具有对称性。

对称矩阵的判断方法是:。

*/#include<stdio.h>#include<stdlib.h>int main(){int *a;int n;int i,j;int m=0;int k=0;int x;int z;int t;int b=0;int h;int y;int o,p;int l;printf("请输入元素的个数:");scanf("%d",&n);a=(int*)malloc((n*n)*sizeof(int));printf("输入矩阵中的数:\n");for(i=0;i<n;i++)for(j=0;j<n;j++){printf("row%d,line%d=",i+1,j+1);scanf("%d",&a[m]);m++;};m=0;for(i=0;i<n;i++){for(j=0;j<n;j++){printf("%d",a[m]);m++;};printf("\n");};for(i=0;i<n;i++){j=i*n+i;if(a[j]==1) k++;};if(k==n) printf("R具有自反性\n");k=0;i=0;j=n*n-1;for(i=0;i<n;i++)for(j=0;j<n;j++){o=i*n+j;p=j*n+i;if(0==((o+1)/n)*n+(o+1)/n) continue;if(a[o]!=a[p]) k++;};if(k==0) printf("R有对称性\n");if(k>0) printf("R没有对称性\n");k=0;x=0;t=0;y=l=0;for(i=0;i<n;i++)for(j=0;j<n;j++){k++;x=k/n;if(k-1==x*n+x) continue;m=i*n+j;if(a[m]==1){l++;b=j;for(z=0;z<n;z++){m=b*n+z;h=(m+1)/n;if(m==h*n+h) continue;if(a[m]==1){m=i*n+z;if(a[m]==0) t++;}else y++;};};};if(t==0&&y!=l) printf("R具有传递性\n");free(a); return 0; }。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

题目:根据某一集合元素以及关系矩阵,判断其满足什么特性,输出满足的特性,再求此集合的闭包。

举例:以集合{1,2,3,4}为例。

关系矩阵为:[[1,0,1,0],[0,1,0,0],[1,0,1,1],[0,0,1,1]]。

程序代码
//集合A = {1,2,3,4}
//关系矩阵为:
//1 0 1 0
//0 1 0 0
//1 0 1 1
//0 0 1 1
//满足:自反性、对称性
//集合A 的闭包:
//1 0 1 1
//0 1 0 0
//1 0 1 1
//1 0 1 1
#include <iostream>
using namespace std;
#define MAX 1000
bool flag_ref, flag_irr, flag_sym, flag_dis, flag_tra; //判断自反性、反自反性、对称性、反对称性、传递性的flag
int matrix[MAX][MAX];
int n;
//自反性
void Reflexive(){
flag_ref = true;
for(int i = 0; i < n; ++i){
if(matrix[i][i] != 1){ //只要有一个对角线元素为0:即不满足
flag_ref = false;
break;
}
}
}
//反自反性
void Irreflexive(){
flag_irr = true;
for(int i = 0; i < n; ++i){
if(matrix[i][i] == 1){ //只要有一个对角线元素为1:即不满足
flag_irr = false;
break;
}
}
}
//对称性
void Symmetrical(){
flag_sym = true;
for(int i = 0 ; i < n; ++i){
for(int j = 0; j < n; ++j){
if(matrix[i][j] != matrix[j][i]){ //只要有一对对称元素不相等:即不满足对称性
flag_sym = false;
break;
}
}
}
}
//反对称性
void Dissymmetrical(){
flag_dis = true;
for(int i = 0 ; i < n; ++i){
for(int j = 0; j < n; ++j){
if(matrix[i][j] == matrix[j][i]){ //只要有一对对称元素相等:即不满足反对称性
flag_dis = false;
break;
}
}
}
}
//传递性
void Transitive(){
flag_tra = true;
for(int i = 0; i < n; ++i){
for(int j = 0; j < n; ++j){
for(int k = 0; k < n; ++k){
if(matrix[i][j] && matrix[j][k] && !matrix[i][k]){ //前两个为1,第三个为0
flag_tra = false;
break;
}
}
}
}
}
//求闭包
void Closure(){
for(int i = 0; i < n; ++i){ //列
for(int j = 0; j < n; ++j){ //行
if(matrix[j][i] == 1){
for(int k = 0 ; k < n; ++k){
if(matrix[j][k] == 0 && matrix[i][k] == 0){
matrix[j][k] = 0;
}
else if(matrix[j][k] == 0 && matrix[i][k] == 1){
matrix[j][k] = 1;
}
else if(matrix[j][k] == 1 && matrix[i][k] == 0){
matrix[j][k] = 1;
}
else if(matrix[j][k] == 1 && matrix[i][k] == 1){
matrix[j][k] = 1;
}
}
}
}
}
}
int main(){
int a[MAX];
cout << "Please input the n of the set:" << endl;
cin >> n;
cout << "Please input the elements of the set:" << endl;
for(int i = 0; i < n; ++i){
cin >> a[i];
}
cout << "The set A = {";
for(int i = 0; i < n-1; ++i){
cout << a[i] << ",";
}
cout << a[n-1] << "}" << endl;
cout << "Please input the Relation matrix:" << endl;
for(int i = 0; i < n; ++i){
for(int j = 0; j < n; ++j){
cin >> matrix[i][j];
}
}
cout << endl;
Reflexive();
Irreflexive();
Symmetrical();
Dissymmetrical();
Transitive();
cout << "The set A has some characters:" << endl;
if(flag_ref == true){
cout << "自反性" << endl;
}
if(flag_irr == true){
cout << "反自反性" << endl;
}
if(flag_sym == true){
cout << "对称性" << endl;
}
if(flag_dis == true){
cout << "反对称性" << endl;
}
if(flag_tra == true){
cout << "传递性" << endl;
}
cout << endl;
cout << "Output the Closure of the set A:" << endl;
Closure();
for(int i = 0; i < n; ++i){
for(int j = 0; j < n; ++j){
cout << matrix[i][j] << " ";
}
cout << endl;
}
return 0;
}
实验结果:。

相关文档
最新文档