我正在使用以下 C# 函数来获取限制为最小长度子集的 powerset
string[] PowerSet(int min_len, string set)
{
IEnumerable<IEnumerable<string>> seed =
new List<IEnumerable<string>>() { Enumerable.Empty<string>() };
return set.Replace(" ", "")
.Split(',')
.Aggregate(seed, (a, b) => a.Concat(a.Select(x => x.Concat(new[] { b }))))
.Where(subset => subset.Count() >= min_len)
.Select(subset => string.Join(",", subset))
.ToArray();
}
问题是当原始集合很大时,即使最小长度也很大,算法也必须非常努力。
例如:
PowerSet(27, "1,11,12,17,22,127,128,135,240,254,277,284,292,296,399,309,322,326,333,439,440,442,447,567,580,590,692,697");
应该很容易,但对于上述功能来说太冗长了。我正在寻找可以有效处理这些情况的函数的简洁修改。