生活随笔
收集整理的這篇文章主要介紹了
集合上二元关系性质判定的实现(python实现)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
判斷一個(gè)二元關(guān)系的性質(zhì)(自反,反自反,對(duì)稱,反對(duì)稱,傳遞)
例如:編寫程序?qū)崿F(xiàn)有限二元關(guān)系(集合)是否具有自反性、對(duì)稱性、傳遞性等。
這大致都是仿照SIgmundRoths大佬寫出的程序,但是在運(yùn)行的時(shí)候發(fā)現(xiàn)判斷傳遞關(guān)系時(shí),出現(xiàn)了一個(gè)序偶如果能和多個(gè)序偶進(jìn)行傳遞判斷的情況下,至于第一個(gè)序偶進(jìn)行判斷而忽略了后續(xù)判斷的情況,所以稍微改動(dòng)了下,但大致還是大佬的結(jié)構(gòu),關(guān)于所說的重復(fù)累贅問題,我這邊解決失敗了,所以等之后有時(shí)間會(huì)再來嘗試的
這是大佬的原文章
改動(dòng)部分
2020/6/20 更改了傳遞性判斷,原方法無法判斷如果全部不存在匹配的情況,級(jí)形如< 1 , 2 >,< 3 ,4 >的判斷,就是將傳遞性模塊重新構(gòu)造了一邊。
同時(shí)調(diào)整了空集的情況
可以改進(jìn)的地方
輸入模塊
輸入出沒有進(jìn)行輸入的判斷,如果出現(xiàn)<2,>的輸入將默認(rèn)為正確,另外每輸入一個(gè)序偶都需要進(jìn)行回車。
對(duì)稱性與反對(duì)稱性模塊
會(huì)有重復(fù)的判斷,如對(duì)稱性模塊里,如果已經(jīng)判斷了一對(duì)序偶具有對(duì)稱性,但在下一個(gè)序偶判斷是,仍然會(huì)和他們匹配,且對(duì)稱的序偶對(duì)的第二個(gè)序偶也會(huì)重復(fù)一次判斷。
反對(duì)稱模塊也類似,會(huì)進(jìn)行繁瑣的重復(fù)
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("您的輸入有誤,結(jié)果不具有參考性")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("沒有對(duì)稱性")flag
= 0return 0if flag
:print("具有對(duì)稱性")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("不具有反對(duì)稱性")return 0if flag
== 0:breakif flag
:print("具有反對(duì)稱性")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
()
總結(jié)
以上是生活随笔為你收集整理的集合上二元关系性质判定的实现(python实现)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。