我使用以下C#函数获取长度受限的幂集子集:
问题在于,即使最小长度也很大,当原始集合很大时,算法也必须非常努力地工作。
例如:
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");
这应该很简单,但对于上述函数而言太冗长了。我正在寻找一种简洁修改我的函数,能够高效地处理这些情况。