程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Python實現---南郵離散數學實驗二:集合上二元關系性質判定

編輯:Python

目錄

一、要求:

二、利用到的充要條件結論證明:

三、代碼


一、要求:

'''
內容:輸入集合A及在A上的二元關系R,判斷二元關系R的幾種基本性質。
要求:能正確判定任意二元關系的自反性、對稱性、傳遞性、反自反性和反對稱性。
'''

二、利用到的充要條件結論證明:

簡化傳遞性的證明。

三、代碼

'''
內容:輸入集合A及在A上的二元關系R,判斷二元關系R的幾種基本性質。
要求:能正確判定任意二元關系的自反性、對稱性、傳遞性、反自反性和反對稱性。
'''
import numpy as np
import time as t
'''函數功能:完成用戶輸入並初始化系數矩陣'''
def init_Info(aArray):
#下面讓用戶輸入 序偶,以對應修改相應的關系矩陣
mylist=[]#一個專門用來存放二元組的列表
numstr = input("請輸入序偶(數字,中間用空格隔開,例:2 3 4 5表示<2,3>,<4,5>)):")
plist=numstr.split(" ")#將輸入的數據,以空格為分隔符割開,存進序列中
for i in range(0,len(plist),2):#每兩個數作為一個二元組,第三個參數為step
mylist.append(tuple((plist[i],plist[i+1])))#注意,此時二元組的兩個數是用字符串形式儲存的,用的時候記得轉化格式
for x in range(len(mylist)):#初始化關系矩陣為1的位置
aArray[int(mylist[x][0]),int(mylist[x][1])]=1
'''函數功能:計算是否滿足自反性'''
def reflection(arr):
flag=1
for i in range(n):
if arr[i,i]==0:#檢測對角線是否有0即可反映自反性
flag=0
break
return flag
'''函數功能:計算是否滿足反自反性'''
def irreflection(arr):
flag = 1
for i in range(n):
if arr[i, i] == 1:#檢測對角線是否有0即可反映反自反性
flag = 0
break
return flag
'''函數功能:計算是否滿足對稱性'''
def symmetry(arr):
flag=1
arr_t=arr.T#用arr_t存儲arr矩陣的轉置
if not((arr_t==arr).all()):#如果轉置矩陣和原矩陣不相等,就是不滿足對稱性
flag=0
return flag
'''函數功能:計算是否滿足反對稱性'''
def irsymmetry(arr):
arr_t = arr.T # 用arr_t存儲arr矩陣的轉置
for i in range(1,n):
for j in range(i):
if arr_t[i][j]==arr[i][j] and arr_t[i][j]==1 and arr[i][j]==1 :#務必注意,不同時為1
return False
return True
'''函數功能:計算是否滿足傳遞性'''
def transmission(arr):
b=np.dot(arr,arr)#R²
arr=np.array(arr,dtype=bool)#R (bool值存放版)
ARR=np.array(b,dtype=bool)# R²=R和R的復合 (bool存放版)
#判斷R和R²的包含關系
A=arr+ARR
if (A==arr).all()==0:
#如果兩者不相等,返回false(0) 就說明R並不是包含R²的,由充要條件可知,R不滿足傳遞性
return 0
else:
return 1
'''主函數'''
if __name__=='__main__':
# 用戶輸入的n,代表著會有0-(n-1)的元素
n = eval(input("請輸入集合A的元素個數n:"))
# 開一個n*n的數組,初始值默認為0
aArray = np.zeros((n, n))
#初始化數據(關系矩陣)
init_Info(aArray)
start=t.perf_counter()
#判斷自反性和反自反性
print("二元關系R{}滿足自反性".format(''if reflection(aArray) else '不'))#采用python的分支語句讓代碼更加簡潔
print("二元關系R{}滿足反自反性".format('' if irreflection(aArray) else '不'))
#判斷對稱性和反對稱性
print("二元關系R{}滿足對稱性".format('' if symmetry(aArray) else '不'))
print("二元關系R{}滿足反對稱性".format('' if irsymmetry(aArray) else '不'))
#判斷傳遞性
print("二元關系R{}滿足傳遞性".format('' if transmission(aArray) else '不'))
end=t.perf_counter()
print("初始化數據後,得到二元關系R的相關性質所計算的
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved