*离散数学二元关系的闭包运算

如:自反性,对称性,传递性以及Wrashall算法,下面将用Java实现

一.处理二元关系的类(ArraysSetOperation):

public class ArraysSetOperation {private int[][] array;private int[][] array2 = new int[7][7];public ArraysSetOperation(int[][] array) {this.array = array;}/*** initialize the value of the array.* @param x is the line number of array, y is the columns number of array.*/public void setArrays(int x1, int y1) {array[x1][y1] = 1;array2[x1][y1] = 1;}public void setArrays(int x1, int y1, int x2, int y2) {array[x1][y1] = 1;array[x2][y2] = 1;array2[x1][y1] = 1;array2[x2][y2] = 1;}public void setArrays(int x1, int y1, int x2, int y2, int x3, int y3) {array[x1][y1] = 1;array[x2][y2] = 1;array[x3][y3] = 1;array2[x1][y1] = 1;array2[x2][y2] = 1;array2[x3][y3] = 1;}public void setArrays(int[] x, int[] y) {for(int i=0; i<x.length; i++){array[x[i]][y[i]] = 1;array2[x[i]][y[i]] = 1;}}/*** 实现Wrashall算法求二元关系传递闭包的关系*/public void Wrashall() {for(int j=0; j<array.length; j++)  {for(int i=0; i<array.length; i++)    {if(array2[i][j] == 1) {for(int k=0; k<array[j].length; k++){array2[i][k] = array2[i][k] + array2[j][k];if(array2[i][k]>1)array2[i][k] = 1;}}}}}/*** make the array to have reflexivity*/public void reflexivity() {for(int i=0; i<array.length; i++) {array2[i][i] = 1;}}/*** make the array to have symmetry*/public void symmetry() {for(int i=0; i<array.length; i++) {for(int j=0; j<array[i].length; j++) {if(array[i][j] == 1)array2[j][i] = 1;}}}/*** make the array to have transitivity*/public void transitivity() {for(int i=0; i<array.length; i++){for(int j=0; j<array[i].length; j++) if(array[i][j] == 1)for(int k=0; k<array[j].length; k++) if(array[i][j] == array[j][k])array2[i][k] = 1;   }   }/*** print the array which was changed*/public void getArray() {for(int i=0; i<array2.length; i++) {for(int j=0; j<array2[i].length; j++) System.out.printf(array2[i][j] + "  ");System.out.println();}//初始化二元关系数组for(int i=0; i<array.length; i++)for(int j=0; j<array[i].length; j++)array2[i][j] = array[i][j];}}

二.有主函数的类(WrashallTest):

/*** 这个程序是为了实现离散数学中二元关系的部分性质和算法* @author Xuer* @version 1.0无界面版本 * 时间:2018-05-19* 此方法仅示范于7×7数组,如需其他数组,请自行改动*/
public class WrashallTest {public static void main(String[] args) {//创建7×7 的数组int[][] Arrays = new int[7][7];//创建一个处理求二元关系的对象ArraysSetOperation a = new ArraysSetOperation(Arrays);System.out.println("原来的二元关系为:");//将部分数组中的值设置为1/** 1.若设置的值个数小于等于3则使用setArrays(int x1..., int y1...)* 2.若设置的值个数大于3则使用setArrays(int[] x, int[] y)*/int[] x = {0,0,1,2,3};   //对应x坐标int[] y = {0,1,3,4,1};  //对应y坐标a.setArrays(x, y);//输出所定义的集合a.getArray();System.out.println("实现自反性:");a.reflexivity();a.getArray();System.out.println("实现对称性:");a.symmetry();a.getArray();System.out.println("实现传递性:");a.transitivity();a.getArray();System.out.println("实现wrashall算法:");a.Wrashall();a.getArray();}
}

①自反性:

定义:设 R是 A上的一个二元关系,若对于 A中的每一个元素 a, (a,a)都属于 R,则称 R为自反关系。换言之,在自反关系中, A中每一个元素与其自身相关。

由定义可知array[i][i]都属于A上的二元关系R,所以将array2[i][i]都赋值为1

public void reflexivity() {for(int i=0; i<array.length; i++) {array2[i][i] = 1;}
}

②对称性:

    定义:对称关系(symmetrical relation)是一种特殊的关系,指与自身的逆关系完全相同的那种关系。集合A上的二元关系R,对任何a,b∈A,当aRb时有bRa,用符号表示:R是A上的对称关系⇔∀a∀b(a∈A∧b∈A∧aRb→bRa)。当A上的R是对称关系时,称R在A上是对称的,或称A上的关系R有对称性。例如,数集中的关系I={〈x,y〉|x与y相等},N={〈x,y〉|x与y不等}都是对称关系;而L={〈x,y〉|x小于y}不是对称关系,当A上的关系R是对称的时,它的补关系与逆关系都是对称的,且R=R-1

即:若存在array[i][j]属于二元关系R,则有array[j][i]也属于R, 所以将array2[[j][i]也赋值于1.

public void symmetry() {for(int i=0; i<array.length; i++) {for(int j=0; j<array[i].length; j++) {if(array[i][j] == 1)array2[j][i] = 1;}}
}

③传递性:

定义:传递关系(transitive relation)是一种特殊的关系,指由甲、乙和乙、丙都有,可推知甲、丙也有的那种关系。集合A上的二元关系R,对任何a,b,c∈A,当aRb,bRc时,有aRc,用符号表示:R是A上的传递关系⇔∀a∀b∀c(a∈A∧b∈A∧c∈A∧aRb∧bRc→aRc)。当A上的R是传递关系时,称R在A上是传递的,或说A上的关系R有传递性。例如,实数集中的小于关系与不小于关系都是传递的;而人群中的同学关系是不传递的。若R在A上是传递的,则R°R⊆R;反之,如R°R⊆R,则R在A上是传递的。一个反自反的传递关系是不对称的,一个反自反的对称非空关系不是传递关系。

当array[i][j] == array[j][k]时, 将array[i][k] = 1

public void transitivity()
{for(int i=0; i<array.length; i++){for(int j=0; j<array[i].length; j++) if(array[i][j] == 1)for(int k=0; k<array[j].length; k++) if(array[i][j] == array[j][k]) array2[i][k] = 1;    }
}    }
}

④Wrashall算法

    步骤:(1):按列进行扫描

              (2):如:当array[i][j] = 1 时, 将array数组中第 i 行中所有元素与第 j 行所对应元素分别进行逻辑加,并将所得值覆盖第 i 行的元素。

public void Wrashall(){for(int j=0; j<array.length; j++){for(int i=0; i<array.length; i++){if(array2[i][j] == 1){for(int k=0; k<array[j].length; k++){array2[i][k] = array2[i][k] + array2[j][k];if(array2[i][k]>1)array2[i][k] = 1;}}}}
}

最后声明:本人大一Java初学者,方方面面做的不好,还请阅读者包含。

                 本博客将成为我的云笔记本,记录我的学习足迹,

                 以上。

Wrashall算法,自反性,对称性的实现相关推荐

  1. 算法模板-对称性递归

    简介 很多二叉树的题其实都可以通过递归来解决,这些以递归解决二叉树这种对称数据结构的策略,称为对称性递归(symmetric recursion). 对称性递归 对称性递归,指的是对一个对称的数据结构 ...

  2. 算法导论/第一部分_基础知识

    算法导论: 基础知识 Chapter 1 算法在计算中的作用 1.1 算法 1.2 作为技术的算法 Chapter 2 算法基础 2.1 插入排序 练习: 2.2 分析算法 插入算法的分析 增长量级 ...

  3. 古典密码学原理和Base64算法原理

    密码学,就是研究如何将一个内容(可以是字符串.文件.二进制流)通过一系列算法转换成另一种内容的学科.从广义上来看,有一个算法可以将字符串转换成另一个字符串即可,即该算法可逆不可逆都可以:从狭义上来看, ...

  4. DES算法实现(C++版)

    文章目录 一.DES算法原理 二.相关说明 1.初始置换IP 2.子密钥 Ki 的获取 3.密码函数 f 4.尾置换IP-1 三.DES算法具体实现(C++) 一.DES算法原理 DES算法是一种最通 ...

  5. 电子科技大学 图论期末复习 公式索引

    title: 图论期末考试复习 date: 2020-08-17 09:01:09 tags: 参考资料:<图论及其应用> 高等教育出版社 张先迪 / 李正良 仅用于方便复习公式查阅,公式 ...

  6. \(^_^)/ Effective java

    读<Effect Java中文版> 译者序 序 前言 第1章引言 1   第2章创建和销毁对象 4 第1条:考虑用静态工厂方法代替构造函数 4 第2条:使用私有构造函数强化singleto ...

  7. 电子科技大学 图论期末复习 公式快速索引

    title: 图论期末考试复习 date: 2020-08-24 09:01:09 tags: 参考资料:<图论及其应用> 高等教育出版社 张先迪 / 李正良 仅用于复习参考,公式或多有误 ...

  8. 南京邮电大学离散数学实验二(二元关系的性质判定)

    文章目录 一. 实验目的和要求 二.实验环境(实验设备) 三.实验原理及内容 (一)数据结构 1.全局变量: 2.函数调用关系 (二)核心代码 1.代码 2.时间复杂度为O(n2)和O(n3) (三) ...

  9. 读effection java

    1.考虑用静态工厂方法代替构造器 public static Boolean valueOf(boolean b){ return b?Boolean.TRUE:Boolean.FALSE; } 静态 ...

最新文章

  1. 神经网络(NN)+反向传播算法(Backpropagation/BP)+交叉熵+softmax原理分析
  2. Git基础教程(二)
  3. 【Java】字符串编程练习题
  4. 网站压力测试工具webbench 安装与使用
  5. Java之品优购课程讲义_day08(7)
  6. 12个Flex常用功能代码
  7. 技术思考--不要从技术的角度去思考大数据的落地
  8. spring boot 2.1.4 hibernate 二级缓存 Caffeine实现
  9. FDDB人脸数据集/python图像批量处理
  10. mysql及JAVA汉字转拼音
  11. 电动车登记上牌系统源码免费分享
  12. 小米笔记本android,全球唯一 独家定制:「安卓中国版」小米笔记本电脑Air图赏...
  13. 生成对抗网络项目:6~9
  14. VMwareWorkstation虚拟机安装Linux系统
  15. ADSL MODEM用户名和密码大全
  16. 【名言】后生看经书,须着看注疏及先儒解释,不然,执己见议论,恐入自是之域,便轻视古人。...
  17. 手把手教你使用LabVIEW OpenCV DNN实现手写数字识别(含源码)
  18. Custom Resource Definitions Operator
  19. 安卓镜像刻录软件_电脑运行安卓镜像 电脑引导安卓 安卓镜像
  20. `Computer-Algorithm` Tarjan算法,强连通分量SCC,PBCC割点,EBCC割边/桥

热门文章

  1. c语言圆周率小数点后500万位,圆周率500位
  2. 和平精英灵敏度分享码服务器没有响应,和平精英灵敏度分享码
  3. 电动车治理再度升级,多地将有“新变化”
  4. 笔记本硬盘读取测试软件,电脑硬盘怎样检测 电脑硬盘故障检测软件【详解】...
  5. 程序员:5人停电去网吧写代码,被当成黑客报警了,网管:想偷我戒指
  6. java rpm卸载_rpm安装和卸载软件
  7. 激光三角测量(sheet of light)halcon示例详解 Reconstruct_Connection_Rod_Calib.hdev 模型三维重建...
  8. 如何在Win7中安装使用超级终端Hyper Terminal
  9. 旗舰版win7系统电脑administrator密码忘记了破解
  10. 电商API接口系列,数据分享