【发布时间】:2020-04-14 15:06:24
【问题描述】:
我尝试解决下一个练习:
输入:带有count >= 1;的整数列表@一些正整数k
输出: 所有可能的这个整数的元组,长度为k;
例如
输入: {1, 2}; k = 4
输出:
{
{1, 1, 1, 1},
{1, 1, 1, 2},
{1, 1, 2, 1},
{1, 1, 2, 2},
{1, 2, 1, 1},
{1, 2, 1, 2},
{1, 2, 2, 1},
{1, 2, 2, 2},
{2, 1, 1, 1},
{2, 1, 1, 2},
{2, 1, 2, 1},
{2, 1, 2, 2},
{2, 2, 1, 1},
{2, 2, 1, 2},
{2, 2, 2, 1},
{2, 2, 2, 2}
}
我尝试创建一个包含k 输入列表副本的数组,而不是使用Combinations:
public static IEnumerable<IEnumerable<T>> Combinations<T>(
this IEnumerable<T> elements,
int k)
{
return k == 0
? new[] { new T[0] }
: elements.SelectMany((e, i) => elements
.Skip(i + 1)
.Combinations(k - 1)
.Select(c => (new[] { e }).Concat(c)));
}
但是k > 9 需要太长。有没有一种算法可以在短时间内解决这个问题?
【问题讨论】:
-
您将拥有
Math.Power(elements.Count(), k)项;在你的情况下2**9 == 512仅限项目
标签: c# algorithm statistics