• 基于Java实现的离散数学测试实验


    资源下载地址:https://download.csdn.net/download/sheziqiong/85773155
    资源下载地址:https://download.csdn.net/download/sheziqiong/85773155

    1.概述

    《离散数学》中的关系和映射应用非常广泛。从面向对象的角度来看,关系和映射都是对象;并且映射是一种特殊的关系。用 Java 这个面向对象的编程语言去实现离散数学中的关系和映射是较为合适的,因此,该系统在此基础上被编写出来。
    
    该系统采用关系作为对象,关系矩阵是关系对象的成员,用关系矩阵来进行各种运算操作,编程者能更好的进行代码实现,操作者也能更加容易去上手。
    
    该系统使用的语言是 Java,测试环境是 Windows10 操作系统、jdk 版本是 1.8.8_221,用 eclipse 编写代码。已实现的功能有:关系判断,关系运算,闭包运算,以及编写了关系类、相容关系类等五个类。
    
    上述功能除映射类和等价关系类有部分功能没有完成,其余功能均实现且测试多次后未发现错误。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2.程序概要设计

    程序流程图

    功能模块图

    程序文件结构设计

    根据题意,程序编写了六个类,分别是二元关系类、等价关系类、偏序关系类、相容关系类、映射类和主类。其中二元关系类里编写关系判断、关系运算、闭包运算三种方法,等价关系类、偏序关系类、相容关系类、映射类分别继承二元关系类;主类主要编写 GUI 界面设计代码。

    3.程序详细设计

    public String toString() {
    		StringBuffer str = new StringBuffer();
    		for (int i = 0; i < matrix.length; i++) {
    			for (int j = 0; j < matrix.length; j++) {
    				str.append(matrix[i][j] == 1 ? 1 + " " : 0 + " ");
    			}
    			str.append("\n");
    		}
    		return str.toString();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    重写(override)toString() 方法,内容改写成把对象的矩阵(matrix)成员变量的输出。调用关系运算和闭包运算的时候,结果是矩阵,重写toString() 方法之后能很方便地输出运算结果。

    public static BinaryRelation union(BinaryRelation r1, BinaryRelation r2) {...};//交集运算
    public static BinaryRelation reflexiveClosure(BinaryRelation r1) {...};//自反闭包
    
    • 1
    • 2

    关系对象其中一个成员变量关系矩阵,实际上关系矩阵是关系的具体表现形式,关系矩阵具有的是自反性等五个性质,而关系运算和闭包运算是关系矩阵之间的通信,将关系运算方法和闭包运算方法设置为静态方法,一是因为两种运算方法的结果均不是关系对象具有的属性,而每个关系对象都可以调用这两种方法,二是方便调用 toString() 方法进行输出。

    for (int k = 0; k < r2.matrix.length; k++) {
    	for (int i = 0; i < r2.matrix.length; i++) {
    		for (int j = 0; j < r2.matrix.length; j++) {
    			if (r2.matrix[i][j] != 1)
    r2.matrix[i][j] = r2.matrix[i][k] & r2.matrix[k][j];
    		}
    	}
    } 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    Warshall 算法是求传递闭包的经典算法,在通信网络、运输路线等应用广泛。使用 n 阶关系矩阵 来表示有向图中任意一对节点是否含有路径的信息,则一条路可以表示为表示包含前 k 个节点。根据描述可得代码:

    r2.matrix[i][j]=r2.matrix[i][j]|(r2.matrix[i][k]&r2.matrix[k][j]);

    经过算法运算后可得:

    r2.matrix[i][j] = r2.matrix[i][k] & r2.matrix[k][j];

    4.程序测试

    用户界面

    确认两个矩阵

    操作演示

    资源下载地址:https://download.csdn.net/download/sheziqiong/85773155
    资源下载地址:https://download.csdn.net/download/sheziqiong/85773155

  • 相关阅读:
    卓越进行时 | 聚焦网络安全学科建设 深化校企合作协同育人
    【图基础】如何定义异质图上的小样本学习:Heterogeneous Graph Few-Shot Learning
    多线程与高并发(三)—— 源码解析 AQS 原理
    统计Excel单元格中某个字符出现的次数
    请收藏:流固耦合经验总结(一)
    十一、DOM的Diffing算法
    Java中的多线程
    Vue3生命周期
    用IntelliJ远程打断点调试
    4. C++内存管理
  • 原文地址:https://blog.csdn.net/sheziqiong/article/details/125460127