【离散数学】Python语言实现关系性质的判断

实验内容:

用矩阵表示二元关系;通过矩阵的特征判断二元关系所具有的性质;运用二维数组实现矩阵的输入,然后判断自反性,反自反性,对称性,反对称性,传递性

先复习一下相关的基础知识:

 1.    判断自反性:矩阵主对角线元素全为1

2.    判断反自反性:矩阵主对角线元素全为0

3.    判断对称性:矩阵根据主对角线对称位置的元素相等

4.    判断反对称性:如果Rij == 1,且 i!=j 则Rij == 0

5.    判断传递性:如果Rij == 1,且 Rjk == 1 则Rjk == 1

源代码如下:

# Author:  zhtstar
# Time:   2022/4/23 10:26

#获取矩阵的规模
dimension = eval(input('请输入矩阵的维数:'))

#初始化矩阵
matrix = [[0 for i in range(dimension)] for j in range(dimension)]

#给矩阵赋值
print('请按位置关系输入矩阵中各元素的值:')
for i in range(dimension):
    arr = input().split(' ')
    for j in range(dimension):
        matrix[i][j] = int(arr[j])


#判断自反性 is_reflexive
def is_reflexive(list):
    flag = 1
    for i in range(dimension):
        if list[i][i] != 1:
            flag = 0
            break
    return flag


#判断反自反性 is_irreflexive
def is_irreflexive(list):
    flag = 1
    for i in range(dimension):
        if list[i][i] != 0:
            flag = 0
            break
    return flag


#判断对称性 is_symmetric
def is_symmetric(list):
    flag = 1
    for i in range(dimension):
        for j in range(dimension):
            if list[i][j] != list[j][i]:
                flag = 0
                break
    return flag

#判断反对称性 is_antisymmetric
def is_antisymmetric(list):
    flag = 1
    for i in range(dimension):
        for j in range(dimension):
            if list[i][j]==1 and i!=j:
                if list[j][i] == 1:
                    flag = 0
                    break
    return flag

#判断传递性 is_transitive
def is_transitive(list):
    flag = 1
    for i in range(dimension):
        for j in range(dimension):
            for k in range(dimension):
                if list[i][j]==1 and list[j][k]==1 and list[i][k] == 0:
                    flag = 0
                    break
    return flag

result = ''
if is_reflexive(matrix) == 1:
    result += '自反性 '
if is_irreflexive(matrix) == 1:
    result += '反自反性 '
if is_symmetric(matrix) == 1:
    result += '对称性 '
if is_antisymmetric(matrix) == 1:
    result += '反对称性 '
if is_transitive(matrix) == 1:
    result += '传递性 '

# print(matrix)
if result != '':
    print('输入的矩阵的性质有:',result)
else:
    print('输入的矩阵什么性质也没有')

运行结果截图:

以下测试用例来源于课本《离散数学》113页 题4.4

 

 

 

分析与总结:

本次的实验任务已完成,本次的作业主要是在利用矩阵表示二元关系的前提下,通过矩阵的特征来判断二元关系的性质,并在最后输出判断结果。

在实验中,我定义了5个函数来分别判断该二元关系的自反性、反自反性、对称性、反对称性、传递性。在判断自反性、反自反性的函数内部,直接来观察矩阵的对角线元素的特征;在判断对称性、反对称性、传递性的函数内部采用逆向思维法,不直接判断该二元关系是否符合某些特征,而是寻找二元关系中是否存在不符合这些关系的反例,一旦找到反例,直接结束判断,并返回判断结果。

这次实验任务主要涉及的知识如下:

1.判断自反性:矩阵主对角线元素全为1

2.判断反自反性:矩阵主对角线元素全为0

3.判断对称性:矩阵根据主对角线对称位置的元素相等

4.判断反对称性:如果Rij == 1,且 i!=j 则Rij == 0

5.判断传递性:如果Rij == 1,且 Rjk == 1 则Rjk == 1

 

  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值