离散实验报告

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

“离散数学”实验报告

专业:计算机嵌入式

班级代号:10455341

学号: 1045534125

姓名:孟腾腾

指导老师:闫仁武

日期:2011/11/15

目录

一.实验目的 (2)

二.实验内容 (2)

三.实验环境 (3)

四. 实验原理和实现过程(算法描述) (3)

1.实验原理 (3)

2.实验过程 (4)

五.实验数据及结果分析 (8)

六. 其他收获和体会 (10)

一.实验目的;

本实验课程是信息专业学生的一门专业基础课程,通过实验,帮助学生更好

地掌握计算机科学技术常用的离散数学中的概念、性质和运算;通过实验提高学生编写实验报告、总结实验结果的能力;使学生具备程序设计的思想,能够独立完成简单的算法设计和分析。

熟悉掌握自反、对称和传递闭包及等价关系

二、实验内容

求有限集上给定关系的自反、对称和传递闭包及是否等价。

三、实验环境

使用visual C++6.0为编程软件,采用C++为编程语言实现。

四、设计思路

(1)、在三种闭包中自反和对称闭包的求解很容易,对矩阵表示的关系,其自反闭包只

要将矩阵的主对角线全部置为1就可;对称闭包则加上关系的转置矩阵,并将相加后大于1的元素值设置为1就可得到;传递闭包则有两种算法:

1、自反闭包计算方法:

设R是集合X上的二元关系,则

r(R)=R U x I (恒等关系)

简要代码如下:

for (i=0;i

{

t.A[i]=A[i];

for (j=0;j

{

t.R[i][j]=R[i][j];

if (i==j)t.R[i][j]=1;

}; 2、对称闭包计算方法:

设R 是集合X 上的二元关系,则

s(R)=R U c

R

代码思路:

for (i=0;i

{

t.A[i]=A[i];

for (j=i;j

{

if (R[i][j]==1)t.R[i][j]=t.R[j][i]=1;

else

{

if (R[j][i]==1)t.R[i][j]=t.R[j][i]=1;

else t.R[i][j]=t.R[j][i]=0;

};

};

};

3、传递闭包的计算方法如下:

算法1:直接根据 n i i R

R t 1)(==计算,过程略

算法2:Warshall 算法(1962)

设R 的关系矩阵为M

(1)令矩阵A=M

(2)置i=1

(3)对所有的j ,若A[j ,i]=1,则

对于 k=1,2,…,n ,令A[j ,k]=A[j ,k]+A[i ,k]

(4) i=i+l .

(5)若i ≤n ,则转到(3),否则结束.

开始 声明各子函数 输入集合及关系矩阵 判断某元素和序关系是否属于某集合 调用自反函数

调用对称算法函数 调用传递算法1函数 判断关系矩阵是否等价

结束

4、等价关系

同时具有自反对称传递关系的关系矩阵为等价关系。

5、判断二元关系关系矩阵是否是自反对称传递关系的 代码实现如下:

Relation::Reflexive()

{

for ( i=0;i

if (!R[i][i])return (0);

return (1); };

Relation::Symmetric()

{

int i,j,K=Len-1;

for (i=0;i

for (j=i+1;j

if (R[i][j]!=R[j][i])return (0);

return (1); };

Relation::Transitive()

{

Relation t;

t=C_t(1);

for ( i=0;i

for (t j=0;j

if (R[i][j]!=t.R[i][j])return (0); return (1);

}; 流程图:

四、程序清单

// Relation.cpp : Defines the entry point for the console application. //

#include"iostream.h"

int const Max=20;

class Relation

{

protected:

int Len,A[Max],R[Max][Max];

int Index(int x);

public:

Relation(){Len=0;};

Relation(int *p,int Q[Max][Max],int n);

int IsofA(int x);

int IsofR(int x,int y);

Relation UnionA(Relation R1);

Relation CrossR(Relation R1);

Relation C_r();

Relation C_s();

Relation C_t();

Relation C_t(int);

int Reflexive();

int Symmetric();

int Transitive();

int Equivalent_Relations();

void PrintA();

void PrintR();

};

int Relation::Index(int x)

{

int i;

for(i=0;i

if(A[i]==x)return(i);

return(-1);

};

Relation::Relation(int *p,int Q[Max][Max],int n)

{

int i,j;

for(i=0;i

{

A[i]=p[i];

相关文档
最新文档