离散数学二元关系传递性判别、闭包方法实验报告
传递闭包实验报告
一、实验目的1. 理解传递闭包的概念及其在图论中的应用。
2. 掌握利用Floyd-Warshall算法求解传递闭包的方法。
3. 通过编程实现传递闭包的计算,验证算法的正确性。
4. 分析实验结果,加深对传递闭包性质的理解。
二、实验原理传递闭包是指在给定集合X上的二元关系R,找到一个最小的传递关系R,使得对于任意的x, y, z∈X,若xRy且yRz,则xRz成立。
传递闭包可以用来描述图中节点之间的可达性,是图论中一个重要的概念。
Floyd-Warshall算法是一种求解传递闭包的经典算法,它通过构建一个n×n的邻接矩阵A,其中A[i][j]表示节点i到节点j的可达性。
算法的基本思想是:逐步更新矩阵A,使得A[i][j]的值表示节点i到节点j的最短路径可达性。
三、实验内容1. 设计一个图,包括节点和边,并构建相应的邻接矩阵。
2. 利用Floyd-Warshall算法计算邻接矩阵的传递闭包。
3. 分析传递闭包的结果,验证算法的正确性。
4. 对比不同图结构下的传递闭包计算结果,探讨传递闭包的性质。
四、实验步骤1. 设计一个图,包括5个节点和6条边,如下所示:```1 -- 2| || |3 -- 4| || |5 -- 6```2. 构建邻接矩阵A,如下所示:```| 1 2 3 4 5 6 |1| 0 1 0 0 0 0 |2| 0 0 1 0 0 0 |3| 0 0 0 1 0 0 |4| 0 0 0 0 1 0 |5| 0 0 0 0 0 1 |6| 0 0 0 0 0 0 |```3. 编写Floyd-Warshall算法的代码,计算传递闭包。
```pythondef floyd_warshall(adj_matrix):n = len(adj_matrix)for k in range(n):for i in range(n):for j in range(n):if adj_matrix[i][j] > adj_matrix[i][k] + adj_matrix[k][j]:adj_matrix[i][j] = adj_matrix[i][k] + adj_matrix[k][j]return adj_matrix# 初始化邻接矩阵adj_matrix = [[0, 1, 0, 0, 0, 0],[0, 0, 1, 0, 0, 0],[0, 0, 0, 1, 0, 0],[0, 0, 0, 0, 1, 0],[0, 0, 0, 0, 0, 1],[0, 0, 0, 0, 0, 0]]# 计算传递闭包transitive_closure = floyd_warshall(adj_matrix) print(transitive_closure)```4. 分析传递闭包的结果,验证算法的正确性。
离散数学实验报告1
《离散数学》课程设计学院软件学院学生姓名孟庆汉学号 0843042109 年级2008 指导教师冯伟森评阅意见提交日期2009 年12 月25 日《利用Warshall算法求二元关系的可传递闭包》学生:孟庆汉指导老师:冯伟森摘要:当集合的阶数n较大时,求二元关系的可传递闭包的工作量是相当庞大的。
幸运的是1962年S.Warshall提出了一个计算R+的有效方法,可在计算机上编程实现。
采用C语言函数写出这个算法。
程序中用m[i][j]表示关系矩阵M R的第i行第j列元素,用||表示逻辑或计算。
计算R+的函数名为Warshall,它的两个形式参数m和n分别表示关系矩阵M和矩阵的行数。
函数的实现实际上是一个三重循环构成。
关键字:二元关系关系矩阵可传递闭包Warshall算法三重循环引言《离散数学》是现代数学的一个重要分支,也是计算机科学与技术,电子信息技术,生物技术等的核心基础课程。
二元关系是离散数学中重要的内容。
世界上的事物都在一定范围内以某种方式互相联系,例如天体之间可以用的是同一星系来划分,人们之间可以用是否有共同的祖先来定血缘。
类似的数学或者计算机科学中的研究对象也以各种不同的形式相互联系着,例如整数之间以大小,整除或同余等关系相互连接着,命题公式之间以是否有相同的主合取范式相联系,程序中两个变量可以用是否占有同一内存地址相联系。
总之,事物之间总是可以根据需要确定相应的关系。
从数学的角度来看,这类联系就是某个集合中元素之间存在的关系。
一个二元关系可能具有某种性质,也可能不具有这种性质。
关系的闭包就是使一个二元关系变成具有指定性质的关系,并且还要满足最小性的条件。
数学原理设A和B都是已知的集合,R是A到B的一个确定的二元关系,那么集合R就是A×B的一个合于R={(x,y)∈A×B|xRy}的子集合设R是集合A上的二元关系:a.对任意的x∈A,都满足<x,x>∈R,则称R是自反的,或称R具有自反性,即R在A上是自反的⇔(∀x)((x∈A)→(<x,x>∈R))=1b.对任意的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))=1c.对任意的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设R是定义在A上的二元关系,若存在A上的关系R′满足:1)R′是自反的(或对称的、或可传递的),2)R⊆ R′,3)对A上任何其它满足1)和2)的关系R〞,都有:R′⊆ R〞。
闭包运算的实验报告
一、实验目的1. 理解闭包运算的概念及其在离散数学中的应用。
2. 掌握关系闭包运算(自反闭包、对称闭包、传递闭包)的求解方法。
3. 利用编程语言实现关系闭包运算,并分析实验结果。
二、实验内容1. 自反闭包运算:给定一个关系R,求出R的自反闭包R^。
2. 对称闭包运算:给定一个关系R,求出R的对称闭包R^s。
3. 传递闭包运算:给定一个关系R,求出R的传递闭包R^t。
三、实验环境1. 操作系统:Windows 102. 编程语言:Python3.73. 开发工具:PyCharm四、实验步骤1. 定义关系R:以矩阵形式表示关系R,其中R[i][j]表示元素i和元素j之间的关系,1表示存在关系,0表示不存在关系。
2. 求自反闭包R^:a. 初始化一个与R同样大小的矩阵R^。
b. 遍历R^,对于每个元素R^[i][j],若R[i][j]=1或i=j,则R^[i][j]=1。
3. 求对称闭包R^s:a. 初始化一个与R同样大小的矩阵R^s。
b. 遍历R,对于每个元素R[i][j],若R[i][j]=1,则R^[i][j]=1且R^[j][i]=1。
c. 遍历R^s,对于每个元素R^[i][j],若R^[i][j]=1,则R^[j][i]=1。
4. 求传递闭包R^t:a. 初始化一个与R同样大小的矩阵R^t。
b. 遍历R,对于每个元素R[i][j],若R[i][j]=1,则R^[i][j]=1。
c. 循环执行以下步骤,直到R^t不再变化:i. 遍历R^t,对于每个元素R^[i][j],若R^[i][k]=1且R^[k][j]=1,则R^[i][j]=1。
五、实验结果与分析1. 自反闭包运算:给定关系R如下:0 1 01 0 10 1 0求自反闭包R^,结果如下:1 1 11 1 11 1 12. 对称闭包运算:给定关系R如下:0 1 01 0 10 1 0求对称闭包R^s,结果如下:1 1 11 1 11 1 13. 传递闭包运算:给定关系R如下:0 1 01 0 10 1 0求传递闭包R^t,结果如下:1 1 11 1 11 1 1通过实验,我们可以发现:1. 自反闭包运算使得关系R中的所有元素都与自身存在关系。
《离散数学》中二元关系传递性的判定
《离散数学》中二元关系传递性的判定离散数学是一门研究离散结构的数学学科,而二元关系是离散数学中一个重要的概念。
在离散数学中,我们经常需要对二元关系进行判定,其中最为重要的性质之一就是传递性。
本文将围绕《离散数学》中二元关系传递性的判定展开讨论。
让我们来了解一下什么是二元关系。
在集合论中,如果给定一个集合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. 矩阵乘法:将矩阵与自身进行乘法运算,得到的结果是一个新的矩阵。
这两种判定传递性的方法都比较简单直观,可以根据具体情况选择适用的方法。
在实际应用中,传递性的判定常常与其他性质一起使用,以提供更准确的判断结果。
离散数学试验报告
学院理学院学生姓名 xxx学号 xxxxxxxxxxx实验:编程二元关系的传递性判别,二元关系闭包方法一.前言引语:二元关系是离散数学中重要的内容。
因为事物之间总是可以根据需要确定相应的关系。
从数学的角度来看,这类联系就是某个集合中元素之间存在的关系。
二.数学原理: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))]=12.自反闭包、对称闭包、传递闭包:设R是定义在A上的二元关系,若存在A 上的关系R′满足:1)R′是自反的(或对称的、或可传递的),2)R⊆ R′,3)对A上任何其它满足1)和2)的关系R〞,都有:R′⊆R〞。
则称R′为R的自反闭包(或对称闭包、或传递闭包),分别记为r(R)、(s(R)和t(R))。
三.实验编程语言:c++四.实验程序源代码:#include<iostream>using namespace std;int cdx(int a[100][100],int n){int b[100][100],i,j;for(i=1;i<=n-1;i++){for(j=1;j<=n;j++){if(a[1][j]==a[i+1][j] && a[1][j]==0)b[i][j]=0;elseb[i][j]=1;}for(j=1;j<=n;j++){if(b[i][j]!=a[1][j])return 0;}}return 1;}void zfbb(int a[100][100],int n){int i,j;for(j=1;j<=n;j++){for(i=1;i<=n;i++){if(a[i][j]==1){a[i][i]=1;a[j][j]=1;}}}cout<<"自Á?反¤¡ä闭À?包㨹关?系¦Ì矩?阵¨®为a:êo"<<endl;for(i=1;i<=n;i++){for(j=1;j<=n;j++){if(a[i][j]>1){a[i][j]=1;cout<<a[i][j]<<" ";}else{cout<<a[i][j]<<" ";}}cout<<""<<endl;}}void dcbb(int a[100][100],int n){int i,j;for(j=1;j<=n;j++){for(i=1;i<=n;i++){if(a[i][j]==1){a[j][i]=1;}}}cout<<"对?称?闭À?包㨹关?系¦Ì矩?阵¨®为a:êo"<<endl;for(i=1;i<=n;i++){for(j=1;j<=n;j++){if(a[i][j]>1){a[i][j]=1;cout<<a[i][j]<<" ";}else{cout<<a[i][j]<<" ";}}cout<<""<<endl;}}void cdbb(int a[100][100],int n){int i,j,k;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];}}}}cout<<"传ä?递ÌY闭À?包㨹关?系¦Ì矩?阵¨®为a:êo"<<endl;for(i=1;i<=n;i++){for(j=1;j<=n;j++){if(a[i][j]>1){a[i][j]=1;cout<<a[i][j]<<" ";}else{cout<<a[i][j]<<" ";}}cout<<""<<endl;}}void main(){int i,j,n,a[100][100],sel,ins;cout<<"请?输º?入¨?二t元a关?系¦Ì矩?阵¨®维?数ºyn"<<endl;cin>>n;cout<<"请?按ã¡äa[1,1],a[1,2]...a[1,n],a[2,1]...a[n.n]的Ì?顺3序¨©输º?入¨?关?系¦Ì矩?阵¨®的Ì?元a素?值¦Ì(ꡧ0,ê?1)ê?"<<endl;for(i=1;i<=n;i++)for(j=1;j<=n;j++){cin>>a[i][j];}INDEX:cout<<"请?输º?入¨?要©a判D定¡§的Ì?性?质¨º:êo"<<endl;cout<<"1、¡é传ä?递ÌY性?"<<endl;cout<<"2、¡é自Á?反¤¡ä闭À?包㨹"<<endl;cout<<"3、¡é对?称?闭À?包㨹"<<endl;cout<<"4、¡é传ä?递ÌY闭À?包㨹"<<endl;cout<<"5、¡é退ª?出?"<<endl;cin>>sel;if(sel==1){ins=cdx(a,n);if(ins==0)cout<<"该?二t元a关?系¦Ì不?具?有®D传ä?递ÌY性?。
实验一 传递闭包的实现(离散数学实验报告)
实验一传递闭包算法一、实验目的1、理解关系矩阵作为布尔矩阵的逻辑运算2、通过编程深刻理解Warshall快速算法3、验证Warshall快速算法的正确性4、掌握C语言的编程技巧和方法二、实验内容用C语言编程实现传递闭包的Warshall快速算法三、实验原理(Warshall算法的原理)M[i,j]表示关系R的关系矩阵M中元素若在关系R的关系图中存在从v i到v j的有向路径,则M[i,j]=1;否则M[i,j]=0。
定义:M k[i,j]=1 若在关系R的关系图中存在从v i到v j的有向路径,且这条路上除了v1,v2,┉,v k外没有其它节点否则M[i,j]=0即M0[i,j]=1⇔在关系R的关系图中存在从v i到v j的有向边M1[i,j]=1⇔在关系R的关系图中存在从v i到v j的有向路径,且这条路上除了可能有v1外没有其它节点M2[i,j]=1⇔在关系R的关系图中存在从v i到v j的有向路径,且这条路上除了可能有v1,v2外没有其它节点┉┉┉根据此定义,仅当下列两情形之一发生时,M k[i,j]=1(1)存在从v i到v j的有向路径,且这条路上除了可能有v1,v2,┉,v k-1外没有其它节点。
因此M k-1[i,j]=1(2)存在从v i到v k的有向路径和从v k到vj的有向路径,且每条路上除了可能有v1,v2,┉,v k-1外没有其它节点。
因此M k-1[i,k]=1 且M k-1[k,j]=1因此,M k[i,j]= M k-1[i,j] ∨(M k-1[i,k]=1∧M k-1[k,j]=1)四、实验要求:1、对输入的数据进行合法性检查,输入输出界面友好2、编写和调试完成程序3、保存和打印程序的运行结果五、实验步骤(一)算法描述Step 1 初始化MStep 2 刷新M 对k=1,2,┉n 重复Step 3和Step 4Step 3 刷新行对i=1,2,┉n 重复Step 4Step 4 刷新M ij对j=1,2,┉n置M ij=M ij ∨(M ik∧M kj)[结束Step 3循环][结束Step 2循环]Step 5 退出(二)流程图┉┉┉┉┉(三)程序清单┉┉┉┉┉六、测试数据1、输入关系矩阵的传递闭包的关系矩阵:R1=⎪⎪⎪⎭⎫⎝⎛001011001, R2=⎪⎪⎪⎪⎪⎭⎫ ⎝⎛0010001001000011, R3=⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛0000000000110000010110010 输出的结果应为:t(R1)=⎪⎪⎪⎭⎫ ⎝⎛001011001, t(R2)=⎪⎪⎪⎪⎪⎭⎫⎝⎛0110011001100111,t(R3)=⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛0000000000110001111111111参考程序:#include<stdio.h>#define N 3int main(){int i,j,k,M[N][N];printf("put in data 0 or 1\n");for(i=0;i<N;i++)for(j=0;j<N;j++)scanf("%d",&M[i][j]);printf("mibao:\n");for(k=0;k<N;k++)for(i=0;i<N;i++)for(j=0;j<N;j++)if((M[i][k]&&M[k][j])||M[i][j]) M[i][j]=1;for(i=0;i<N;i++){for(j=0;j<N;j++)printf(" %d",M[i][j]);printf("\n");}}输出结果:。
离散数学实验报告__四个实验!!!
《离散数学》课程设计学院计算机学院学生姓名学号指导教师评阅意见提交日期2011 年11 月25 日引言《离散数学》是现代数学的一个重要分支,也是计算机科学与技术,电子信息技术,生物技术等的核心基础课程。
它是研究离散量(如整数、有理数、有限字母表等)的数学结构、性质及关系的学问。
它一方面充分地描述了计算机科学离散性的特点,为学生进一步学习算法与数据结构、程序设计语言、操作系统、编译原理、电路设计、软件工程与方法学、数据库与信息检索系统、人工智能、网络、计算机图形学等专业课打好数学基础;另一方面,通过学习离散数学课程,学生在获得离散问题建模、离散数学理论、计算机求解方法和技术知识的同时,还可以培养和提高抽象思维能力和严密的逻辑推理能力,为今后爱念族皮及用计算机处理大量的日常事务和科研项目、从事计算机科学和应用打下坚实基础。
特别是对于那些从事计算机科学与理论研究的高层次计算机人员来说,离散数学更是必不可少的基础理论工具。
实验一、编程判断一个二元关系的性质(是否具有自反性、反自反性、对称性、反对称性和传递性)一、前言引语:二元关系是离散数学中重要的内容。
因为事物之间总是可以根据需要确定相应的关系。
从数学的角度来看,这类联系就是某个集合中元素之间存在的关系。
二、数学原理:自反、对称、传递关系设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三、实验原理:通过二元关系与关系矩阵的联系,可以引入N维数组,以数组的运算来实现二元关系的判断。
《离散数学》中二元关系传递性的判定
《离散数学》中二元关系传递性的判定离散数学是计算机科学中的重要基础学科之一,而二元关系是离散数学中的重要概念之一。
二元关系是指给定集合上的两个元素之间的一种关系,它可以用来描述集合中元素之间的某种联系或者性质。
在离散数学中,二元关系的性质和特性是非常重要的,其中传递性是二元关系的一个重要性质之一。
在本文中,我们将介绍离散数学中二元关系传递性的判定方法,以及一些相关的例子和应用。
让我们来回顾一下二元关系的定义。
设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是否成立。
《离散数学》中二元关系传递性的判定
《离散数学》中二元关系传递性的判定什么是二元关系?在离散数学中,二元关系是指集合之间的一种关联关系,它描述了集合中元素之间的某种联系。
在集合论中,二元关系是指集合A和B之间的一个子集R,它将A中的元素和B 中的元素一一对应起来,并表示它们之间的某种关系。
如果存在一个集合A={1, 2, 3, 4}和一个集合B={a, b, c},那么A和B之间的一个二元关系可以被表示为一个有序对的集合,比如R={(1, a), (2, b), (3, a), (4, c)}。
这个关系表示了A中的元素与B中的元素之间的对应关系。
二元关系的性质二元关系可以有许多不同的性质,其中传递性是其中一个非常重要的性质。
在离散数学中,二元关系的传递性是指如果关系R中的元素a与b有关系,b与c有关系,那么a 与c也应该有关系。
换句话说,如果对于任意的a、b和c,只要(a, b)和(b, c)都属于关系R,那么(a, c)也应该属于关系R。
这就是传递性的定义。
传递性的判定在离散数学中,我们经常需要判定一个二元关系是否具有传递性。
这个判定其实并不复杂,只需要依据传递性的定义进行逐一检查即可。
1. 我们需要知道该二元关系R中的所有有序对。
2. 然后,对于R中的每一个有序对(a, b)和(b, c),我们需要检查是否(a, c)也属于关系R。
举个例子来说明传递性的判定过程。
假设我们有一个集合A={1, 2, 3, 4}和一个关系R={(1, 1), (1, 2), (2, 3), (3, 4)}。
现在我们来判定这个关系R是否具有传递性。
我们列出关系R中的所有有序对:R={(1, 1), (1, 2), (2, 3), (3, 4)}对于(1, 1)和(1, 2),由于1与1和2之间没有直接的联系,所以不需要考虑传递性。
对于(1, 2)和(2, 3),这两个有序对满足传递性要求,因为1与2有关系,2与3有关系,所以1与3也应该有关系。
通过刚才的例子,我们可以看到一个具有传递性的关系的特点。
离散数学实验报告
《离散数学》实验报告专业网络工程班级姓名学号授课教师二 O 一六年十二月目录实验一联结词的运算实验二根据矩阵的乘法求复合关系实验三利用warshall算法求关系的传递闭包实验四图的可达矩阵实现实验一联结词的运算一.实验目的通过上机实验操作,将命题连接词运算融入到C语言的程序编写中,一方面加强对命题连接词运算的理解,另一方面通过编程实现命题连接词运算,帮助学生复习和锻炼C语言知识,将理论知识与实际操作结合,让学生更加容易理解和记忆命题连接词运算。
二.实验原理(1) 非运算, 符号:? ,当P=T时,?P为F, 当P=F时,?P为T 。
(2) 合取, 符号: ∧ , 当且仅当P和Q的真值同为真,命题P∧Q的真值才为真;否则,P∧Q的真值为假。
(3) 析取, 符号: ∨ , 当且仅当P和Q的真值同为假,命题P∨Q的真值才为假;否则,P∨Q的真值为真。
(4) 异或, 符号: ▽ , 当且仅当P和Q的真值不同时,命题P▽Q的真值才为真;否则,P▽Q的真值为真。
(5) 蕴涵, 符号: →, 当且仅当P为T,Q为F时,命题P→Q的真值才为假;否则,P→Q 的真值为真。
(6) 等价, 符号: ?, 当且仅当P,Q的真值不同时,命题P?Q的真值才为假;否则,P→Q 的真值为真。
三.实验内容编写一个程序实现非运算、合取运算、析取运算、异或运算、蕴涵运算、等价运算。
四.算法程序#include<>void main(){printf("请输入P、Q的真值\n");int a,b;scanf("%d%d",&a,&b);int c,d;if(a==1)c=0;else c=1;if(b==1)d=0;else d=1;printf("非P、Q的结果为%d,%d\n",c,d);int e;if(a==1&&b==1)e=1;else e=0;printf("合取的结果为%d\n",e);int f;if(a==0&&b==0)f=0;else f=1;printf("析取的结果为%d\n",f);int g;if(a==1&&b==0)g=0;else g=1;printf("单条件的结果为%d\n",g);int h;if(a==b)h=1;else h=0;printf("双条件的结果为%d\n",h);}内容格式:新罗马,五号,行间距固定值18磅五.实验结果六.心得体会通过编程,学会了析取、合取、单条件连接词、双条件连接词的用法。
《离散数学》中二元关系传递性的判定
《离散数学》中二元关系传递性的判定离散数学是大学中的一门重要课程,它涉及到了数学中的一些基础概念和思维方法。
在离散数学中,二元关系是一个非常重要的概念,而关系的传递性则是评判一个二元关系是否具有某种性质的重要标准之一。
本文将介绍《离散数学》中二元关系传递性的判定方法及相关概念。
我们先来回顾一下什么是二元关系。
在集合论中,如果给定了两个集合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即可。
合肥工业大学离散数学实验报告2
实验二:逻辑运算与闭包运算求解姓名:李亚鸣学号:2014211590班级:计算机科学与技术14-1班实验地点:三号实验楼4号机房实验时间:2015年10月24日1实验目的和要求实验目的:(1)通过补充代码,完成基本逻辑运算的程序,加深对逻辑运算的理解。
(2)通过补充待完善的MFC程序,添加核心warshall算法部分,加强对闭包运算的求解的理解,同时对warshall算法加深理解。
实验要求:(1)在luojiyuns.cpp文件中补充And(), Or(), Not(), Xor(), Single_condition(),Doublbe_condition()以实现基本逻辑运算。
(2)warshallDlg.cpp文件中的CWarshallDlg::OnCalculate() 函数中补充warshall算法(3)在待完善的MFC代码上补充warshall算法的核心部分,并在图形上实现。
2实验环境和工具VisualC++6.03实验结果3.1算法流程图3.2程序核心代码(1)/****************************************************//该函数用于进行逻辑与运算//val_one和val_two分别为参与运算的逻辑值//调用twovalue_Judge函数检测是否符合输入要求,然后进行//逻辑运算并返回运算结果*****************************************************/ int luoji::And(int val_one,int val_two){//int jud;if(twovalue_Judge(val_one,val_two)){return val_one==1&&val_two==1;}else{Output();return 2;}cout<<"\n\n";}/**************************************************** //该函数用于进行逻辑或运算//val_one和val_two分别为要进行计算逻辑值//调用twovalue_Judge函数检测是否符合输入要求,然后进行//逻辑运算并返回运算结果*****************************************************/ int luoji::Or(int val_one,int val_two){//int jud;if(twovalue_Judge(val_one,val_two)){return val_one==1||val_two==1;}else{Output();return 2;}cout<<"\n\n";}/**************************************************** //该函数用于进行逻辑非运算//val_one为要进行计算的逻辑值//调用onevalue_Judge函数检测是否符合输入要求,然后进行//逻辑运算并返回运算结果*****************************************************/ int luoji::Not(int val_one){//int jud;if(onevalue_Judge(val_one)){return val_one==0;}else{Output();return 2;}cout<<"\n\n";}/**************************************************** //该函数用于进行逻辑异或运算//val_one和val_two分别为要进行计算逻辑值//调用twovalue_Judge函数检测是否符合输入要求,然后进行//逻辑运算并返回运算结果*****************************************************/ int luoji::Xor(int val_one,int val_two){//int jud;if(twovalue_Judge(val_one,val_two)){return val_one^val_two;}else{Output();return 2;}cout<<"\n\n";}/**************************************************** //该函数用于进行逻辑单条件运算//val_one和val_two分别为要进行计算逻辑值*****************************************************/ int luoji::Single_condition(int val_one,int val_two){//int jud;if(twovalue_Judge(val_one,val_two)){return val_one==1&&val_two==0;}else{Output();return 2;}cout<<"\n\n";}/****************************************************//该函数用于进行逻辑双条件运算//val_one和val_two分别为要进行计算逻辑值*****************************************************/int luoji::Double_condition(int val_one,int val_two){//int jud;if(twovalue_Judge(val_one,val_two)){return val_one==0&&val_two==0;}else{Output();return 2;}cout<<"\n\n";}(4)// 以下语句段使用warshall方法改变矩阵中的值以帮助求解传递闭包// 需要用到的矩阵的行、列值存储在变量dim中,矩阵中各个位置上的对应// 值存储在two_mat[][]数组中//请在此添加warshall算法代码int j,k;int **temp=new int *[dim]; //定义二维动态数组for(i=0;i<dim;i++)temp[i] = new int[dim];for(k=0;k<dim;k++) //依次取k作为中间点的顶点{for(i=0;i<dim;i++){for(j=0;j<dim;j++){//if(two_mat[k][i]&&(two_mat[k][j]||two_mat[j][i])) two_mat[k][i]=1;temp[i][j]=(two_mat[i][j])||(two_mat[i][k]&two_mat[k][j]);}}for(i=0;i<dim;i++)for(j=0;j<dim;j++)two_mat[i][j]=temp[i][j];}3.3运行结果3.4运行结果分析对基本逻辑运算,用了几个简单的例子进行检测,运行结果都正确对warshall算法也用了一个4X4的矩阵作为例子进行检测,运算结果正确。
离散数学二元关系传递性判别、闭包方法实验报告材料
离散数学二元关系传递性判别、闭包方法实验报告学院:理学院班级: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 引入传递性概念传递性是离散数学中一个重要的性质,它指的是如果集合中的元素之间存在某种关系,那么这种关系是否能够由某种规律或者条件连接起来,使得如果集合中的某两个元素之间存在这种关系,那么它们之间也存在这种关系。
传递性是二元关系中的一个基本概念,它能够帮助我们理解和分析集合中元素之间的关系,从而推断出更多的信息。
在离散数学中,传递性的概念是非常重要的。
通过传递性,我们可以将复杂的关系简化为更加清晰和直观的形式,从而更好地理解集合中元素之间的联系。
传递性也为我们解决问题提供了一种有效的方法,例如在图论、逻辑推理和关系代数等领域中,传递性都扮演着重要的角色。
了解二元关系的传递性及其判定方法对于深入学习离散数学是非常有帮助的。
在接下来的正文中,我们将详细介绍二元关系的定义、性质和传递性的概念,以及如何判定二元关系是否具有传递性,希望能够带给读者更多的启发和认识。
《离散数学》中二元关系传递性的判定
《离散数学》中二元关系传递性的判定【摘要】《离散数学》中二元关系的传递性是重要的概念之一,本文将讨论传递性的定义、判定方法以及在离散数学中的具体应用。
文章首先介绍了传递性的概念,即对于集合A上的关系R,若aRb且bRc成立,则必有aRc成立。
然后详细讲解了传递性的判定方法,包括直接证明和间接证明两种方法。
文章探讨了离散数学中二元关系的传递性,通过实际例子解释了传递性在离散数学中的应用。
传递性在离散数学中具有重要意义,能够帮助我们理解和分析各种关系的性质。
通过深入学习传递性的概念和方法,我们能够更好地解决离散数学中的问题,提高数学建模和推理的能力。
【关键词】离散数学、二元关系、传递性、判定、定义、方法、结论1. 引言1.1 引言离散数学中的二元关系传递性是数学中一个重要的概念,它在许多领域都有着广泛的应用和意义。
在《离散数学》中,我们需要通过一定的方法来判定一个二元关系是否满足传递性。
传递性是二元关系的三个基本性质之一,它是指如果关系中的两对元素(a,b)和(b,c)都属于这个关系,那么元素(a,c)也必须属于这个关系。
换句话说,如果关系中存在一条从a到b的路径,且存在一条从b 到c的路径,那么一定存在一条从a到c的路径。
这个性质在描述事物之间的联系和转移关系时非常有用。
在离散数学中,我们可以通过一些方法来判定一个二元关系是否具有传递性。
这些方法包括使用定义,构造反例,或者通过数学推导等方式。
在实际问题中,我们可以通过观察和分析关系中的元素,找出其中的规律和特点,来判断这个关系是否满足传递性。
通过对离散数学中二元关系传递性的研究和探讨,我们可以更深入地理解关系和映射在数学中的重要性和应用。
在学习和应用中,我们需要灵活运用这些知识,解决实际问题,提高数学思维和分析能力。
部分就到这里,下面将介绍。
2. 正文2.1 传递性定义传递性是离散数学中一个非常重要的概念,在研究二元关系时经常会用到。
传递性的定义是指对于一个关系R,如果对于集合A中的任意元素a、b、c,如果(a, b)属于R且(b, c)属于R,则(a, c)也属于R。
《离散数学》中二元关系传递性的判定
《离散数学》中二元关系传递性的判定张振荣(天津农学院基础科学学院天津300384)摘要《离散数学》中二元关系性质中传递性的判定是教学难点,本文列出传递性的真值表,利用真值表判断传递性直观有效,只有一种情形不满足传递性,其余情形都满足传递性。
关键词《离散数学》二元关系中图分类号:G642文献标识码:A0引言在《离散数学中》,二元关系的性质包括自反性、反自反性、对称性、反对称性和传递性。
其中前四个性质可以由定义和关系图直观地表达,但是否满足传递性仅从定义很难观察出来。
二元关系传递性的定义如下:(1)如果从定义来看,只能发现一种情形是满足传递性的,即如,,是传递的,但是,怎么用定义来判断是否满足传递性呢?1利用真值表判断传递性我们不妨用真值表来分析这个定义,列出真值表如下:出来的。
,为真,为真,为真,则满足传递性。
从真值表判断,第二种情形真值为假,即不满足传递性。
比如,没有出现有序对,则为真,为真,为假,由真值表知,这是不满足传递性的。
第三种情形和第五种情形看似不传递,但满足传递性的定义。
如,为真,为假,为真,由真值表知,这是满足传递性的。
再如,为假,为真,为真,满足定义,是传递的。
第四种、第六种、第七种情形都是包含一个有序对的,满足传递性,以第四种情形为例,,为真,为假,为假,最后真值为真,故是传递的。
第八种情形是空关系,虽然没有有序对,但是真值为真,故满足传递性。
定义理解清楚后,是不是所有的二元关系都很容易判断了呢?在二元关系中,包含很多组有序对,如果有一组有序对不满足传递的定义,但其他组都满足传递的定义,那这个二元关系仍然是不传递的,比如分三组有序对考虑:(1)为真,为真,为真,则满足传递性;(2)为真,为真,但为假,故不传递;(3)为真,为真,但为假,故不传递;因为(2)(3)不传递,故不满足传递性。
如果定义中的有两个或三个相等,那么它仍然符合传递性的定义。
如,将有序对分为三组考虑:(1)有序对,(2)有序对,(3)有序对,三组都满足传递性的定义,故是传递的。
离散数学实验报告
离散数学实验报告离散数学实验报告一、引言离散数学是现代数学的一个重要分支,它研究离散的数学结构和离散的数学对象。
本实验报告将介绍我对离散数学的学习和实践的一些心得体会。
二、集合论集合论是离散数学的基础,它研究集合及其运算。
在实验中,我学习了集合的表示方法和运算规则。
集合的表示方法有枚举法、描述法和图示法等。
集合的运算包括并、交、差和补等。
通过实践操作,我深刻理解了集合的概念和运算规则。
三、逻辑与命题逻辑是离散数学的另一个重要内容,它研究推理和思维的规律。
在实验中,我学习了逻辑的基本概念和符号表示法。
逻辑中的命题是逻辑推理的基本单位,它可以是真或假。
通过实践操作,我能够正确地分析和判断命题的真值,并进行逻辑推理。
四、关系与函数关系与函数是离散数学中的重要内容,它们描述了元素之间的联系。
在实验中,我学习了关系的定义和性质,包括自反性、对称性和传递性等。
函数是一种特殊的关系,它将一个集合的元素映射到另一个集合。
通过实践操作,我能够正确地定义和分析关系与函数。
五、图论图论是离散数学中的重要分支,它研究图及其性质。
在实验中,我学习了图的基本概念和表示方法。
图由顶点和边组成,可以分为有向图和无向图。
通过实践操作,我能够正确地定义和分析图的性质,如度、路径和连通性等。
六、组合数学组合数学是离散数学的另一个重要分支,它研究离散对象的组合和排列。
在实验中,我学习了组合数学的基本原理和方法。
组合数学中的排列和组合是常见的计数问题,通过实践操作,我能够正确地计算排列和组合的数量。
七、实践应用离散数学在计算机科学、通信工程和运筹学等领域有着广泛的应用。
在实验中,我了解了离散数学在实际问题中的应用。
例如,图论可以用于网络路由算法的设计,组合数学可以用于密码学中的加密算法设计。
通过实践操作,我能够将离散数学的知识应用到实际问题中,提高问题的解决效率。
八、总结通过本次离散数学实验,我深入了解了离散数学的基本概念和方法,并通过实践操作加深了对离散数学的理解。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
离散数学二元关系传递性判别、闭包方法实验报告
学院:理学院班级: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)输入没有传递关系的关系矩阵R
2)输入课本P30/例2.6
实验2:
1)自反闭包
2)对称闭包
3)传递闭包P52/例2.13
六、实验体会
通过这次的实验,使我明白了,平日里学习不能浅尝辄止,必须要知道它的方法。
做这次实验前我以为我对这块知识已经很熟了,但实际做的时候,发现我还是不是特别懂,必须要反复看书。
其次,让我知道了,我平时学的数学知识可以很好的跟计算机结合,让我对程序设计有了更好的人是。