在生成功率集的同时提供迭代器

时间:2019-03-01 13:51:21

标签: c# optimization

我已经用C#编写了代码,以生成给定的整数输入列表的幂集。

public List<List<int>> GeneratePowerSet(List<int> Set)
{
    int setCount = Set.Count;
    int powerSetCount = 1 << setCount;

    // Temporary list to hold the all subsets
    List<List<int>> subsets = new List<List<int>>();

    // Outer loop running 2^n times
    for (int i = 0; i < powerSetCount; i++)
    {
        // Inner loop running n times to check if j-th bit is set or not
        for (int j = 0; j < setCount; j++)
        {
            // Temporary list to hold the current subset
            List<int> subset = new List<int>();

            // Check if j-th bit of i is 1 or no
            if ((i & (1 << j)) != 0)
            {
                subset.Add(Set[j]);
            }
            subsets.Add(subset);
        }
    }

    return subsets;
}

如上所述,我正在制作2个临时输入列表,这会在生成子集时造成额外的开销。

对于较大的输入,我也观察到计算功率集需要太长时间。

如何使用迭代器模式重写此方法,以便每次它产生当前值时都无需创建临时列表。

0 个答案:

没有答案