我已经用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个临时输入列表,这会在生成子集时造成额外的开销。
对于较大的输入,我也观察到计算功率集需要太长时间。
如何使用迭代器模式重写此方法,以便每次它产生当前值时都无需创建临时列表。