离散数学3关系
南京工程学院
实验报告
课程名称离散数学
实验项目名称关系
实验学生班级K网络工程121
实验学生姓名王云峰
学 号*********
实验时间11月15日
实验地点信息楼
实验成绩评定
指导教师签字年月日
一、实验目的和要求
关系是集合论中的一个十分重要的概念,关系性质的判定是集合论中的重要内容。通过该组实验,目的是让学生更加深刻地理解关系的概念和性质,并掌握关系性质的判定等。
实验要求实现判断任意一个关系是否为自反关系、对称关系、传递关系。
二、实验主要仪器和设备
计算机
三、实验方法与步骤(需求分析、算法设计思路、流程图等)
判断任意一个关系是否为自反关系、对称关系、传递关系和等价关系?若是等价关系,求出其所有等价类。
设RA×A,(1)若x(x∈AxRx),称R是自反的;(2)若xy(x、y∈A∧xRyyRx),称R是对称的;(3)若xyz(x、y、z∈A∧xRy∧yRzxRz),称R是传递的;(4)若R是自反的、对称的和传递的,则称R是等价关系。
}
}
五、实验结果及分析(计算过程与结果、数据曲线、图表等)
六、设RA×A,(1)若x(x∈AxRx),称R是自 )若xy(x、y∈A∧xRyyRx)称R是对称的;(3)若xyz(x、y、z∈A∧xRy∧yRzxRz),称R是传递的;
4)若R是自反的、对称的和传递的,则称R是等价关系。
在程序实现中,集合和关系用都用集合方式输入。
}
void Array_To_Set(char *Array,char *Set)//一维字符数组转化为集合
{
int i,j;
j=0;
Set[j++]='{';
for(i=0;Array[i]!='\0';i++){Set[j++]=Array[i];Set[j++]=',';}
if(j>1){Set[j-1]='}';Set[j]='\0';}
{
int i,j,s,t;
for(i=0;i<n;i++)
for(j=0;j<n;j++)R[i][j]=0;
for(i=2;i<(int)strlen(F);i=i+6)
{
s=Get_xh(A,F[i]);
t=Get_xh(A,F[i+2]);
R[s][t]=1;
}
}
int Judge_zfx(int **R)//自反性判定
for(i=0;i<n;i++)
for(j=0;j<n;j++)if(B[i][j]>R[i][j])return 0;
return 1;
}
void Get_Djl(int **R)
{
int i,j,m=0,ip;//m统计等价类数
DJL=new char*[n];
for(i=0;i<n;i++)
if(A[i])
printf("请输入集合%s上的一个二元关系F=",S);
scanf("%s",F);
n=strlen(A);
R=new int*[n];
for(i=0;i<n;i++)R[i]=new int[n];
Relation_To_Matrix(F,R);
if(Judge_zfx(R)&&Judge_dcx(R)&&Judge_cdx(R))
在程序实现中,集合和关系用都用集合方式输入。
四、实验原始纪录(源程序、数据结构等)
#include<stdio.h>
#include<string.h>
int n;//集合中元素的个数
char *A,*S,*F,**DJL;//S为集合,A为集合S的元素组成的字符数组
//F为A上的二元关系集合,DJL[i]为第i个等价类元素组成的集合
{
printf("关系%s是%s上的等价关系,");
Get_Djl(R);
}
else
{
if(Judge_zfx(R))printf("关系%s是自反的\n",F);
if(Judge_dcx(R))printf("关系%s是对称的\n",F);
if(Judge_cdx(R))printf("关系%s是传递的\n",F);
此实验课程,能有效地锻炼我们的逻辑思维能力,使我们更系统,逻辑思考能力得到锻炼,分析例子更为简单,所以,此次实验,使我了解集合关系的各种基础,受益匪浅。
教师评语:
{
int i;
for(i=0;i<n;i++)if(R[i][i]==0)return 0;
return 1;
}
int Judge_dcx(int **R)//对称性判定
{
int i,j;
for(i=1;i<n;i++)
for(j=0;j<i;j++)if(R[i][j]!=R[j][i])return 0;
在程序实现中,集合和关系用都用集合方式输入。抽象原则:任给一个性质P,就确定了一个集合A,A的元素恰好是具有性质P的对象。子集、包含、包含于、真包含、全集U、基数#A-元素个。幂集ρ(A):A的全部子集的集合交∩、并∪、差—、补~集。有穷集的计数原理:#(A∪B∪C)=#A+#B+#C-#(A∩B) -#(A∩C) -#(B∩C)+#(A∩B∩C)4.空串ε、连接运算、字母表Σ、Σ*、语言、闭包A*=A^0∪A^1∪…A^0=ε正闭包A+= A^1∪…5.有序偶<x,y>:将2个对象xy按规定的顺序构成的序列。笛卡尔乘积A×B={<x,y>|x∈A∧y∈B},AB是集合二元关系R:任何有序偶的集合R。<x,y>∈R、xRy、xy有关系R定义域dom(R)、值域ran(R)全域关系Ux、恒等关系Ix关系矩阵、关系图自反的、反自反的、对称的、反对称的、传递的复合关系RοS:R是X到Y的关系,S是从Y到Z的关系,则X到Z的一个关系RοS满足结合律逆关系R^-1(RοS)^-1=S^-1οR^-1自反闭包r(R)=R∪Ix、对称闭包s(R)=R∪R^-1、传递闭包t(R)=R^1∪R^2…偏序≤:关系是自反的、反对称的、传递的全序、线序:可比严格偏序:反自反、传递的遮盖、哈斯图、最大元、极大元、上界、最小上界良序的:每个非空子集有最小元覆盖、划分、等价关系:自反的、对称的、传递的由x代表的等价类[x]R={y|y∈X∧xRy} (R:模6同余,[1]R={7,13,...} )函数f:是一个关系<x,y1><x,y2>都属于f,则y1=y2f:X→Y :f是X到集合Y的关系,dom(f)=X自变量、象源、值、象偏函数f:对每个x∈dom(f)有唯一的y使<x,y>∈f---不属于dom(f)的未定义全函数满射的(每个y都有x)、单射的(每个x射向不同y)、双射的、反函数集合A的特征函数ΨA(x)=1/0,x∈A/不属于A集合的后继集合A+=A∪{A} 0=?是自然数,n是则n+是,有限次使用规传递性、三岐性<>=、良基性∈∈数学归纳法:若P(0)是真的,m∈N,P(m)=>P(m+),则n∈N,P(n)是真的集合等势A~B:A,B的元素之间是一一对应的。存在双射、抽屉原理:有穷集合AB,#A=m,#B=n,m>n,则不存在从A到B的单射函数任何有穷集合唯一地与一个自然数等势。集合A的基数#A:自然数n,A~n A的等价类可数无穷集合:与自然数集合等势可数集合:有限的或可数无穷的实数集合是不可数的。--对角线方法任何集合A,#A<#ρ(A),集合关系,
else {Set[j++]='}';Set[j]='\0';}
}
int Get_xh(char *A,char ch)//返回字符在A中的下标
{
int i;
for(i=0;i<n;i++)if(A[i]==ch)re_Matrix(char *F,int **R)
int **R;//R为关系F的关系矩阵
void Set_To_Array(char *Set,char *Array)//将集合转化为一维字符数组
{
int i,j;
j=0;
for(i=1;i<(int)strlen(Set)-1;i=i+2)Array[j++]=Set[i];
Array[j]='\0';
{
ip=0;
DJL[m]=new char[n];
DJL[m][ip++]=A[i];
for(j=i+1;j<n;j++)if(A[j]&&R[i][j]){DJL[m][ip++]=A[j];A[j]=0;}
DJL[m][ip]='\0';
m++;
}
printf("等价类分别为:\n");
for(i=0;i<m;i++)
{
Array_To_Set(DJL[i],S);
printf("%s ",S);
}
printf("\n");
}