# 題目:
# 求在Rn中找出個(gè)數(shù)最少的一個(gè)子集,這個(gè)子集的所有元素的并集為U,要求U ∩ C = C,且U ∪ C = U,請(qǐng)寫(xiě)出求解這樣的一個(gè)子集的通用算法。
R = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n']
R1 = ['b', 'b', 'c', 'd', 'e', 'f', 'g']
R2 = ['b', 'c', 'd', 'g', 'k', 'l', 'm', 'n']
R3 = ['a', 'c', 'g', 'i', 'j', 'k', 'm', 'n']
R4 = ['a', 'c', 'd', 'f', 'g', 'i', 'j', 'k', 'm', 'n']
R5 = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'j', 'k', 'l', 'n']
Rn = [R1, R2, R3, R4, R5]
C = ['b', 'b', 'd', 'g']
# -------------------------------------------------------------------------------------------------------------------
# 思路:
# 將C的集合與R1、R2…Rn的集合對(duì)比遍歷對(duì)比,找出符合要求且元素?cái)?shù)最少的Rn(可能是多個(gè))
C_set = set(C) # 求出C的集合(即去重)
subset = [R] # 滿(mǎn)足U∩C = C,且U∪C = U的目標(biāo)子集初始化為R,命名為subset
for i in Rn: # 遍歷Rn
for j in C_set: # 遍歷C的集合,如果C集合中的每個(gè)元素都在子集中,則下一步,否則剔除
if j not in set(i):
break
else:
if len(i) < len(subset[0]): # 若該子集元素個(gè)數(shù)<subset中子集的元素個(gè)數(shù),則清空subset,將該子集設(shè)為新的subset
subset = [[]]
subset[0] = i
elif len(i) == len(subset[0]): # 若該子集元素個(gè)數(shù)=subset中子集的元素個(gè)數(shù),則將此子集添加到subset
subset.append(i)
print(subset) # 打印出滿(mǎn)足條件的子集
最小子集問(wèn)題
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- 9. Palindrome Number Determine whether an integer is a pa...
- centos minimal 網(wǎng)絡(luò)配置 在虛擬機(jī)上安裝發(fā)現(xiàn)默認(rèn)是命令行界面一路進(jìn)行下去,最后發(fā)現(xiàn)是Minimal的...
- CSS3 transform ????rotate 深入 ????透視效果perspective(px) ...
- 來(lái)自一位美容導(dǎo)師的自述 《努力!遇見(jiàn)更好的自己》 ——做事無(wú)分難易,無(wú)分雅俗,事在人為,貴在堅(jiān)持。 一個(gè)東北女孩...