📜  子集、幂集和通用集(1)

📅  最后修改于: 2023-12-03 15:09:20.641000             🧑  作者: Mango

子集、幂集与通用集

在离散数学中,子集、幂集和通用集是基本概念,它们经常被用于算法设计和数据结构实现。

1. 子集

子集是指集合中元素的一个子集合,可以是空集、单个元素的集合或整个集合本身。通常用 $A \subseteq B$ 表示 $A$ 是 $B$ 的子集。

在编程中,可以使用布尔数组、整数二进制表示、递归等方式来表示和计算子集。下面是使用整数二进制表示的示例代码:

def get_subsets(nums):
    n = len(nums)
    res = []
    for i in range(2 ** n):
        subset = []
        for j in range(n):
            if ((i >> j) & 1):
                subset.append(nums[j])
        res.append(subset)
    return res

以上代码中,$nums$ 是原始集合,$n$ 是它的元素个数,$2^n$ 表示子集的个数,$i$ 表示所有可能的子集组合,$j$ 表示 $nums$ 中的元素。其中,$((i >> j) & 1)$ 表示将 $i$ 向右移 $j$ 位并取最后一位的值,用来判断是否包含当前元素。

2. 幂集

幂集是指一个集合的所有子集的集合,包括空集和整个集合本身。通常用 $\mathcal{P}(A)$ 表示 $A$ 的幂集。

在编程中,可以使用递推或递归方式来生成幂集。下面是一个使用递推的示例代码:

def get_power_set(nums):
    res = [[]]
    for num in nums:
        res += [item + [num] for item in res]
    return res

以上代码中,$nums$ 是原始集合,$res$ 初始时只包含空集,然后将每个元素 $num$ 加入到已有的子集中生成新的子集并添加到 $res$ 中。

3. 通用集

通用集是指某个给定集合最大的超集,它包含了所有元素,通常用 $\Omega$ 表示。

在编程中,通用集通常被定义为全集或者用不同数据结构来表示。例如,在 Python 中可以用 set 类型表示集合,用 Python 的 built-in 函数 set() 表示全集:

def get_universal_set(nums):
    return set(nums)
参考资料