生活随笔
收集整理的這篇文章主要介紹了
集合上二元关系性质判定的实现(python实现)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
判斷一個二元關系的性質(自反,反自反,對稱,反對稱,傳遞)
例如:編寫程序實現有限二元關系(集合)是否具有自反性、對稱性、傳遞性等。
這大致都是仿照SIgmundRoths大佬寫出的程序,但是在運行的時候發現判斷傳遞關系時,出現了一個序偶如果能和多個序偶進行傳遞判斷的情況下,至于第一個序偶進行判斷而忽略了后續判斷的情況,所以稍微改動了下,但大致還是大佬的結構,關于所說的重復累贅問題,我這邊解決失敗了,所以等之后有時間會再來嘗試的
這是大佬的原文章
改動部分
2020/6/20 更改了傳遞性判斷,原方法無法判斷如果全部不存在匹配的情況,級形如< 1 , 2 >,< 3 ,4 >的判斷,就是將傳遞性模塊重新構造了一邊。
同時調整了空集的情況
可以改進的地方
輸入模塊
輸入出沒有進行輸入的判斷,如果出現<2,>的輸入將默認為正確,另外每輸入一個序偶都需要進行回車。
對稱性與反對稱性模塊
會有重復的判斷,如對稱性模塊里,如果已經判斷了一對序偶具有對稱性,但在下一個序偶判斷是,仍然會和他們匹配,且對稱的序偶對的第二個序偶也會重復一次判斷。
反對稱模塊也類似,會進行繁瑣的重復
import re
import operatori
= 0
s
= ' '
s1
= {}
variable
= []while (s
!= ''):i
= i
+1s
= input()i
= str(i
)str1
= 'f' + istr2
= 'b' + ii
= eval(i
)if s
== '':breaks1
[str1
] = re
.search
('([0-99]*),([0-99]*)',s
).group
(1)s1
[str2
] = re
.search
('([0-99]*),([0-99]*)',s
).group
(2)if s1
[str1
] == '' or s1
[str2
] == '':print("您的輸入有誤,結果不具有參考性")break
num
= i
def creater(i
):global x1
,x2i
= str(i
)str1
= 'f' + istr2
= 'b' + ix1
= s1
[str1
]x2
= s1
[str2
]def get_element():global num
,x1
,x2
for i
in range(1,num
):creater
(i
)if x1
not in variable
:variable
.append
(x1
)if x2
not in variable
:variable
.append
(x2
)def check_reflexivity():ref
= variable
for i
in range(1,num
):creater
(i
)if x1
== x2
:ref
.remove
(x1
)else:continueif ref
== []:print("具有自反性")return 1else:print("不具有自反性")return 0def check_irreflexivity():flag
= 0for i
in range(1,num
):creater
(i
)if x1
is x2
:print("沒有反自反性")flag
= 1return 0breakif flag
!= 1:print("具有反自反性")return 1def check_symmetry():flag
= 1for i
in range(1,num
):creater
(i
)y1
= x1y2
= x2
for k
in range(1,num
):creater
(k
)if y1
== x2
and y2
== x1
:breakif k
== num
- 1:print("沒有對稱性")flag
= 0return 0if flag
:print("具有對稱性")return 1def check_antisymmetry():flag
= 1for i
in range(1,num
):creater
(i
)y1
= x1y2
= x2
for k
in range(1,num
):creater
(k
)if y1
== x2
and y2
== x1
:if x1
== x2
:continueelse:flag
= 0print("不具有反對稱性")return 0if flag
== 0:breakif flag
:print("具有反對稱性")return 1def check_transitivity():flag
= 2falg1
= 0for i
in range(1,num
):creater
(i
)y1
= x1y2
= x2
if x1
:flag1
= 1for k
in range(1,num
):creater
(k
)if y2
== x1
:z1
= y1z2
= x2
else:continuefor t
in range(1,num
):creater
(t
)if z1
== x1
and z2
== x2
:flag
= 1breakelif t
== num
- 1:flag
= 0if flag
== 0:breakif flag
== 1:continueif flag
== 0:print("沒有傳遞性")breakif i
== num
-1 and k
== num
- 1 and flag
!= 1:print("沒有傳遞性")breakif flag
== 1 or falg1
== 0:print("有傳遞性")def main():get_element
()if check_irreflexivity
():print("沒有自反性")else:check_reflexivity
()check_symmetry
()check_antisymmetry
()check_transitivity
()if __name__
== '__main__':main
()
總結
以上是生活随笔為你收集整理的集合上二元关系性质判定的实现(python实现)的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。