离散数学实验报告__四个实验!!!
- 格式:doc
- 大小:489.50 KB
- 文档页数:19
. word资料 《离散数学》
课程设计 学 院 计算机学院 学生姓名 学 号 指导教师 评阅意见
提交日期 2011 年 11 月 25 日 .
word资料 引言 《离散数学》是现代数学的一个重要分支,也是计算机科学与技术,电子信息技术,生物技术等的核心基础课程。它是研究离散量(如整数、有理数、有限字母表等)的数学结构、性质及关系的学问。它一方面充分地描述了计算机科学离散性的特点,为学生进一步学习算法与数据结构、程序设计语言、操作系统、编译原理、电路设计、软件工程与方法学、数据库与信息检索系统、人工智能、网络、计算机图形学等专业课打好数学基础;另一方面,通过学习离散数学课程,学生在获得离散问题建模、离散数学理论、计算机求解方法和技术知识的同时,还可以培养和提高抽象思维能力和严密的逻辑推理能力,为今后爱念族皮及用计算机处理大量的日常事务和科研项目、从事计算机科学和应用打下坚实基础。特别是对于那些从事计算机科学与理论研究的高层次计算机人员来说,离散数学更是必不可少的基础理论工具。
实验一、 编程判断一个二元关系的性质(是否具有自
反性、反自反性、对称性、反对称性和传递性) 一、前言引语:二元关系是离散数学中重要的容。因为事物之间总是可以根
据需要确定相应的关系。从数学的角度来看,这类联系就是某个集合中元素之间存在的关系。
二、数学原理:自反、对称、传递关系
设A和B都是已知的集合,R是A到B的一个确定的二元关系,那么集合R就是A×B的一个合于R={(x,y)∈A×B|xRy}的子集合 设R是集合A上的二元关系: 自反关系:对任意的x∈A,都满足∈R,则称R是自反的,或称R具有自反性,即R在A上是自反的(x)((x∈A)→(∈R))=1
对称关系:对任意的x,y∈A,如果∈R,那么∈R,则称关系R是对称的,或称R具有对称性,即R在A上是对称的 (x)(y)((x∈A)∧ (y∈A)∧(∈R)→(∈R))=1
传递关系:对任意的x,y,z∈A,如果∈R且∈R,那么∈R,则称关系R是传递的,或称R具有传递性,即R在A上是传递的 (x)(y)(z)[(x∈A)∧(y∈A)∧(z∈A)∧((∈R)∧(∈R)→(∈R))]=1
三、实验原理:通过二元关系与关系矩阵的联系,可以引入N维数组,以数
组的运算来实现二元关系的判断。 图示: . word资料 性质 关系矩阵特性 自反性 主对角线元素全为1 反自反性 主对角线元素全为0 对称性 对称矩阵 反对称性 非主对角线上的元素等于1且与之对称的元素等于0 传递性 矩阵(M*M)中1所在的位置,M中与之相对应位置鲜红都为1
四、实验环境:Windows 7 Ultimate DEV C++
五、实验语言:C 语言
六、程序源代码:
#include"stdio.h" #define N 4 main() { int i,j,k; int f,e,z; int M[N][N]; printf("判断R是否为自反关系、对称关系、是否可传递?\n"); printf("请输入一个4*4的矩阵。\n"); for(i=0;ifor(j=0;jscanf("%d",&M[i][j]); for(i=0;i{ for(j=0;jprintf("%4d",M[i][j]); printf("\n"); }
for(i=0;i{ if(M[i][i]==1)//判断自反性 { if(i=N-1 e=0;
else ; . word资料 } else if(M[i][i]==0)//判断反自反性 { if(i=N-1) e=1;
else ; } else { e=2; break; } }
for(i=0;i{ for(j=0;j
if(M[i][j]!=M[j][i])//判断对称性 { f=1; break; } }
for(i=0;i{ for(j=0;j
if(M[i][j]==1)//判断反对称性 { if(M[j][i]==0) { if(i==(N-1)&&j==N-1) f=0; else break; } } . word资料 } if(f!=0&&f!=1) { f=2;
}
for(i=0;ifor(j=0;jif(M[i][j]==1) continue; else for(k=0;kif(M[i][k]*M[k][i]==0) continue; else z=0;
if(e==0) printf("关系R是自反关系\n"); else if(e==1) printf("关系R是反自反关系\n"); else if(e==2) printf("关系R是反自反关系\n"); if(f==0) printf("关系R是反对称关系\n"); else if(f==1) printf("关系R不是对称关系\n"); else if(f==2) printf("关系R是对称关系\n"); if(z==0) printf("关系R是不可传递关系\n"); else printf("关系R是可传递关系\n");
system("PAUSE"); }
七、程序运行截图: . word资料 i、程序启动截图: ii、程序输入截图: iii、程序运行结果截图: .
word资料 八、实验总结:实验简洁高效地判断二元关系的性质。
实验二、编程求一个二元关系的自反闭包、对称闭包、
传递闭包 一、前言引语 一个二元关系可能具有某种性质,也可能不具有这种性质。现在讨论怎样使一个二元关系变成具有指定性质的新关系,并且还要满足最小性条件。
二、数学原理 自反闭包、对称闭包、传递闭包 设R是定义在A上的二元关系,若存在A上的关系R′满足: 1) R′是自反的(或对称的、或可传递的), 2) R R′, 3) 对A上任何其它满足 1)和 2)的关系R〞,都有: R′ R〞。 则称R′为R的自反闭包(或对称闭包、或传递闭包),分别记为r(R)、(s(R)和t(R))。
三、实验原理 Warshall算法的基本思想 对每个结点(从第一列开始),找出所有具有到此结点的有向边的结点(即该列中元素为1的所在行的结点),再将这些结点所在行同该结点所在行进行逻辑加后作为这些结点所在的新行(添加新的有向边)(反映了如果这些结点没有到其它结点的有向边,但有到该结点的有向边,再通过该结点间接到达其它结点,根据传递闭包的定义,这些结点就必然有一条有向边到达其它结点)。 . word资料 ▪ 设R是集合上的二元关系,Mr是R的关系矩阵 ▪ (1)置新矩阵A:=Mr ▪ (2)置(列) j:=1 ▪ (3) 对所有的i(1≤i≤n) 如A(i,j)=1,则对k=1,2,…,n A(i,k):=A(i,k) A(j,k) ▪ (即将A的第i行与A的第j行进行逻辑加后送回A的第i行) ▪ (4)j:=j+1 ▪ (5)如j≤n转(3),否则停止。
四、实验环境:Windows 7 Ultimate DEV C++
五、实验编程语言: C语言
六、实验程序源代码 //source file: War.cpp #include void War(int m,int n) { int i,j,k;设置临时变量 int a = 0, b = 0;设置临时变量 int arr[10][10]; for(a = 0; a < m; ++a) { printf("请输入矩阵第%d行元素:",a); for(b = 0; b < n; ++b) { scanf("%d",&arr[a][b]); } printf("\n"); }
for(i = 0; i < m; i++) { for( j= 0; j < m; j++) { if(arr[j][i] == 1) { for(k = 0;k < n; k++) { arr[j][k]=arr[i][k] || arr[j][k]; } } }