在 Python 中有效地确定幂集成员之间的子集

Determine subsets among members of a powerset efficiently in Python

所以我按以下方式为字母表的幂集成员编制了索引:

def bytecode_index(some_subset):
    mask = 0
    for index in bytearray(some_subset):
        mask |= (1<<(index-97))
    return mask

这可能有点不标准,非常欢迎改进它,但我的问题的关键实际上如下:

我怎样才能使用两个这样的掩码并有效地和 python 地确定一个是否是另一个的子集?确定 index1 是否是 index2 的子集的一种方法是比较它们的二进制字符串。如果 index1 有一个 1,而 index2 有一个 0,则对应于 index1 的集合不是对应于 index2.

的集合的子集

为此我写了一些类似这样的东西:

def compare_binary_strings(index1,index2):

    return not any(x == "1" and y == "0" for x,y in zip(bin(index1), bin(index2)))

这似乎效率不高,因为它涉及将索引转换为字符串,然后逐个比较它们。非常感谢任何帮助。

有没有更简单的操作可以快速比较两个指标?

好吧,我不知道 Python 的情况,但通常检查一个位掩码是否是另一个位掩码的子集的方法是:

(x & y) == x

如果为真,xy 的子集。

这只是熟悉的

的位数学等价物

A⊆B⇔A∩B=A