java二元判断_离散二元关系实验java实现

本文介绍了如何使用Java编程实现对给定集合上关系的自反性、对称性和传递性的判断。通过关系矩阵,分别判断了等价关系的三个必要条件,并提供了针对不同关系特性的源代码示例。

一、实验目的

通过算法设计并编程实现对给定集合上的关系是否为自反的、对称的和传递关系的判断,加深学生对关系性质的理解,掌握用矩阵来判断等价关系的方法。

二、实验内容

给定R的关系矩阵,据此判断所给关系R是否为等价关系。

三、实验原理和方法

设R为非空集合A上的关系。如果R是自反的、对称的和传递的,则称R为A上的等价关系。

从给定的关系矩阵来断判关系R是否为自反。若M(R的关系矩阵)的主对角线元素均为1,则R是自反关系;若M(R的关系矩阵)的主对角线元素均为0,则R是反自反关系;若M(R的关系矩阵)的主对角线元素既有1又有0,则R既不是自反关系也不是反自反关系。本算法可以作为判等价关系算法的子程序给出。

从给定的关系矩阵来判断关系R是否为对称。若M(R的关系矩阵)为对称矩阵,则R是对称关系;若M为反对称矩阵,则R是反对称关系。因为R为对称的是等价关系的必要条件,所以,本算法可以作为判等价关系算法的子程序给出。

一个关系R的可传递性定义告诉我们,若关系R是可传递的,则必有:mik=1∧mkj=1 mij=1。可传递性也是等价关系的必要条件,本算法也可以作为判等价关系算法的子程序给出。

四、实验要求

设A={1,2,3},任选一种语言判断下述关系的性质:

关系R1={<1,1>, <1,2>,<1,3>,<2,1>,<3,1>}

关系R2={<1,1>, <1,2>,<2,1>,<2,2>,<3,3>}

五、实验过程

源代码

package cn.sal.lisan;

import java.util.*;

class Zifan

{

Zifan(int[][] r,int n)

{

int sum=0;

A:for(int i=0;i

{

for(int j=0;j

{

if(r[i][j]==1&&i==j)

{

//flag=true;

sum++;

}

}

}

int sum1=0;

A:for(int i=0;i

{

if(r[i][i]==0)

{

sum1++;

}

}

if(sum==3)

{

System.out.println("具有自反性");

}

else if(sum1==3)

{

System.out.println("无自反性");

}

else {

System.out.println("既不自反也不反自反");

}

}

}

class Duichen

{

Duichen(int[][] r,int n)

{

int sum=0,sum1=0;

A:for(int i=0;i

{

for(int j=0;j<=i;j++)

{

if(r[i][j]==1&&r[j][i]==0&&i!=j)

{

sum++;

}

else if(r[i][j]==r[j][i]&&i!=j)

{

sum1++;

}

}

}

//System.out.println(sum1);

if(sum==n)

{

System.out.println("具有反对称性");

}

else if(sum1==3)

{

System.out.println("具有对称性");

}

else {

System.out.println("既不对称也不反对称");

}

}

}

class Chuandi

{

//int[] s=new int[r.]

Chuandi(int[][] r,int n)

{

int[][] s=new int[r.length][r.length];

for(int i=0;i

{

for(int j=0;j

{

s[i][j]=0;

for(int k=0;k

{

s[i][j]+=r[i][k]*r[k][j];

}

}

}

boolean p = false;

for(int i=0;i

{

for(int j=0;j

{

if(s[i][j]!=r[i][j])

{

p=true;

break;

}

}

}

if(p)

{

System.out.println("不具有传递性");

}

else

{

System.out.println("具有传递性");

}

}

}

public class Lisan2 {

public static void main(String args[])

{

Scanner scanner=new Scanner(System.in);

System.out.println("请输入矩阵行数");

int n=scanner.nextInt();

int[][] r1=new int[n][n];

int[][] r2=new int[n][n];

System.out.println("请输入矩阵r1");

for(int i=0;i

{

{

for(int j=0;j

{

r1[i][j]=scanner.nextInt();

}

}

}

Zifan zifan=new Zifan(r1,n);

Duichen duichen=new Duichen(r1,n);

Chuandi chuandi=new Chuandi(r1,n);

System.out.println();

System.out.println("请输入矩阵r2");

for(int i=0;i

{

{

for(int j=0;j

{

r2[i][j]=scanner.nextInt();

}

}

}

Zifan zifan2=new Zifan(r2,n);

Duichen duichen1=new Duichen(r2,n);

Chuandi chuandi1=new Chuandi(r2,n);

}

}

实验结果

2341431db65d00a79acc5ba5fcdb9794.png

六、实验总结

关于总结,本次的实验目的是判断给定矩阵的二元关系,根据离散数学中关于二元关系的定义,就能直接用代码实现了,本次作业使用的是java代码。

首先判断自反关系时,直接判断矩阵的对角线是否全为0或全为1即可,全为0是反自反关系,全为1是自反关系,在代码中的体现是,当行数与列数相等时,判断他们对应的值是否全为1或全为0,或者有1有0,如果既有0也有1则说明这个矩阵既不自反也不反自反。

判断对称关系时,对于一位数r[i][j]判断另一位r[j][i]是否与这位数相等,其中i!=j,如果这两个数不相等,则不具有对称性,如果全部相等,则具有对称性。

判断传递关系时,需要用到线性代数解决方法,其中关键一点就是求出矩阵r的平方,求过后的矩阵与之前的矩阵如果同一位置值相等,则具有传递性,否则不具有传递性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值