用C语言或者C++判断一段关系是否是等价关系,如果是找出它的划分,如若不是,求包含它的最小等价关系

您所在的位置:网站首页 等价关系如何划分的 用C语言或者C++判断一段关系是否是等价关系,如果是找出它的划分,如若不是,求包含它的最小等价关系

用C语言或者C++判断一段关系是否是等价关系,如果是找出它的划分,如若不是,求包含它的最小等价关系

2024-07-16 16:32:28| 来源: 网络整理| 查看: 265

      我们可以首先写一个名叫Relation的类。在这个类中,我们将会有等价关系对应的集合的维度d以及该等价关系的关系矩阵,如下图

 而这个类有三种构造函数和一个析构函数

 这些源码我将会在文章的最后给出,代码逻辑较简单,就不赘述了。

         在该类中还写了获取维度,运算符重载,得到关系矩阵指定位置的值,在屏幕上打印关系矩阵的值等一系列函数,具体代码可见源码

 最后写了判断三种性质(自反,对称,传递)的函数,以及通过这三个函数来判断是否为等价关系函数,如果是求划分的函数,如果不是求最小等价关系的函数

下图为判断是否为等价关系的函数,由等价关系的定义,只需要该关系具有自反性,对称性,传递性 即可

下图为求一个关系的最小等价关系,我们知道以下三个式子恒成立

(1)r(s(R))=s(r(R))

(2) r(t(R)=t(r(R))

(3) t(s(R)包含s(t(R))

因此我们可以先求该关系的自反闭包,再求得到的自

反闭包的对称闭包,最后求得到的对称闭包的传递关

系,因此首先我们可以先写三个函数:已知一个关系,求它的自反闭包,对称闭包,传递闭包。代码如下图:

已经有了这三个函数,那么便可以找出它的最小等价关系,代码如下图

如果一个关系为等价关系,那么求等价类。

result是一个大小为dimension的数组,如果当前关系

是等价关系,则result中存放的是当前关系的各个元素

所在等价类的编号,返回true;否则result数组中任一项的值都是-1,并返回false。

       最后的main函数:首先屏幕会打印“请先输入该集合的元素个数:”,然后打印“依次输出该集合各元素的值:”最后会打印“输入该关系的关系矩阵:”,然后便会判断关系性质,是否等价,如果等 价,划分是什么,如果不等最小等价类是什么。下图为测试用例

最后,给出源码

#include "stdio.h" #include #include using namespace std; class Relation { protected: int dimension; int *Matrix; public: Relation(int d = 1); //构造维数为d的空关系,如果不输入d的值,则默认为1 Relation(int d, const int *M);//由输入的关系矩阵的维数与一个关系矩阵的值的数组构造关系 Relation(const Relation &r);//拷贝构造函数 ~Relation();//析构函数 Relation &operator =(const Relation &r); //赋值运算符重载 int GetDimension() const; //返回关系矩阵的维数 int GetatPosition(int row, int column) const; //得到关系矩阵的第row行第column列的值,如果越界则返回-1 int operator() (int row, int column) const; //可以使用R(i,j)来得到关系矩阵的第row行第column列的值, //如果越界则返回-1 bool GetMatrix(int *result) const; //得到关系矩阵的值 void Output() const; //在屏幕显示该关系的关系矩阵 bool IsReflexive() const; //判断该关系是否自反 bool IsSymmetric() const; //判断该关系是否对称 bool IsTransitive() const; //判断该关系是否传递 Relation ReflexiveClosure() const; //返回自反闭包的关系矩阵 Relation SymmetricClosure() const; //返回对称闭包的关系矩阵 Relation TransitiveClosure() const; //返回传递闭包的关系矩阵 bool IsEquivalence() const; //判断该关系是否是一个等价关系 Relation minEquivalence()const; //求最小的等价关系 bool EquiClasses(int *result) const; //result是一个大小为dimension的数组,如果当前关系 //是等价关系,则result中存放的是当前关系的各个元素 //所在等价类的编号,返回true;否则result数组中任一 //项的值都是-1,并返回false。 }; Relation::Relation(int d) { //构造一个维数为d的空关系 dimension = d; Matrix = new int[dimension * dimension]; memset(Matrix, 0, sizeof(int) * dimension * dimension); } Relation::Relation(int d, const int *M) { //由关系矩阵的维数和一个关系矩阵的值的数组构造关系 dimension = d; Matrix = new int[dimension * dimension]; memcpy(Matrix, M, sizeof(int) * dimension * dimension); } Relation::~Relation() { //析构函数 delete []Matrix; } //拷贝构造函数 Relation::Relation(const Relation &r) { dimension = r.dimension; Matrix = new int[dimension * dimension]; memcpy(Matrix, r.Matrix, sizeof(int)*dimension * dimension); } //赋值运算符重载 Relation &Relation::operator =(const Relation &r) { dimension = r.dimension; Matrix = new int[dimension * dimension]; memcpy(Matrix, r.Matrix, sizeof(int)*dimension * dimension); return *this; } int Relation::GetDimension() const { //得到关系矩阵的维数 return dimension; } int Relation::GetatPosition(int row, int column) const { //得到关系矩阵的第row行第column列的值,如果越界则返回-1 if (row >= 0 && row < dimension && column >= 0 && column < dimension) return Matrix[row * dimension + column]; else return -1; } int Relation::operator()(int row, int column) const { //可以使用R(i,j)来得到关系矩阵的第row行第column列的值,如果越界则返回-1 if (row >= 0 && row < dimension && column >= 0 && column < dimension) return Matrix[row * dimension + column]; else return -1; } bool Relation::GetMatrix(int *result) const { //得到关系矩阵的值 if (result != NULL) { memcpy(result, Matrix, sizeof(int)*dimension * dimension); return true; } return false; } void Relation::Output() const { //在屏幕显示该关系的关系矩阵 int row, column; cout


【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭