最小子集问题

作者: 冷水调画 | 来源:发表于2019-03-31 14:54 被阅读0次
# 题目:
# 求在Rn中找出个数最少的一个子集,这个子集的所有元素的并集为U,要求U ∩ C = C,且U ∪ C = U,请写出求解这样的一个子集的通用算法。

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的集合对比遍历对比,找出符合要求且元素数最少的Rn(可能是多个)

C_set = set(C)                                 # 求出C的集合(即去重)
subset = [R]                                   # 满足U∩C = C,且U∪C = U的目标子集初始化为R,命名为subset

for i in Rn:                                   # 遍历Rn
    for j in C_set:                            # 遍历C的集合,如果C集合中的每个元素都在子集中,则下一步,否则剔除
        if j not in set(i):
            break
    else:
        if len(i) < len(subset[0]):            # 若该子集元素个数<subset中子集的元素个数,则清空subset,将该子集设为新的subset
            subset = [[]]
            subset[0] = i
        elif len(i) == len(subset[0]):         # 若该子集元素个数=subset中子集的元素个数,则将此子集添加到subset
            subset.append(i)

print(subset)                                  # 打印出满足条件的子集

相关文章

  • 最小子集问题

  • LintCode每日一练-限制条件子集

    问题:限制条件子集 给一个数组,给定一个target,求满足以下条件的子集个数:条件:子集中的最小值+最大值小于给...

  • 滑动窗口

    滑动窗口应用场景: 最长连续子串等、最小和连续子集等问题,和动规的区别是动规可以划分出子集; 思维导图: 举例: ...

  • 2018-08-21

    回溯法求子集,有个问题没有解决硬币问题动态规划:趴楼梯的最小代价https://blog.csdn.net/hap...

  • 子集问题

    一、问题描述 集合{a,b}的子集有{},{a},{b},{a,b} 二、解决问题问题分析:集合的子集问题在高中就...

  • 选择排序

    1.循环将数组分为两个子集,排序的和未排序的,每轮从未排序的子集中选出最小的元素,放入排序子集2.优化:为减少交换...

  • Python小白 Leetcode刷题历程 No.76-N

    Python小白 Leetcode刷题历程 No.76-No.80 最小覆盖子串、组合、子集、单词搜索...

  • 0/1背包问题 0/1 Knapsack

    题目列表 相等子集划分问题 Equal Subset Sum Partition 416. 分割等和子集 子集和问...

  • 【算法】最小生成树

    最小生成树是指,在边有权重的连通无向图上,图的总权重最小的连通子集(所有的结点都被连通,选取的边具有最小的权重和)...

  • 最小数原理与无穷递降法

    最小数原理在数学竞赛中经常被用到,其最基本的表达形式如下: 最小数原理 正整数集的任何一个非空子集必有最小元素,即...

网友评论

    本文标题:最小子集问题

    本文链接:https://www.haomeiwen.com/subject/hutubqtx.html