如何在不使用左移位的情况下找到给定集合的幂集?

How to find the power set of a given set without using left shift bit?

我正在尝试找出如何实现一种算法来找到给定集合的幂集,但我遇到了一些麻烦。这些集合实际上是向量,所以例如我得到 Set<char> set1{ 'a','b','c' }; 我会做 PowerSet(set1); 我会得到所有的集合 但如果我这样做 Set<char> set2{ 'a','b','c', 'd' }; 我会做 PowerSet(set2),但我会错过其中的几组。

Set<Set<char>> PowerSet(const Set<char>& set1)
{
    Set<Set<char>> result;
    Set<char> temp;
    result.insertElement({});
    int card = set1.cardinality();
    int powSize = pow(2, card);
    
    for (int i = 0; i < powSize; ++i)
    {
        for (int j = 0; j < card; ++j)
        {
            if (i % static_cast<int> ((pow(2, j)) + 1))
            {
                temp.insertElement(set1[j]);
                result.insertElement(temp);
            }
        }
        temp.clear();
    }
    return result;
}

供参考:

您的 if 测试是胡说八道 -- 它应该类似于

if ((i / static_cast<int>(pow(2,j))) % 2)

您还需要在内循环之后(就在 temp.clear() 之前)将 temp 插入到结果中。

通过这些更改,只要 pow(2, card) 不溢出 int 就应该可以工作——在大多数机器上大约 card == 30。