【发布时间】:2018-11-11 05:10:42
【问题描述】:
好吧,我有一个列表列表,就像标题所说的那样,我想组合 k 个列表,其中每个列表都有不同的元素。
示例:
我有以下列表:
{ {1,2,3} , {1,11} , {2,3,6} , {6,5,7} , {4,8,9} }
这些列表的有效 3 尺寸组合可以是:
{ {1,11}, {4,8,9} ,{6,5,7} }
这只是其中一个有效组合,我要返回的是 K 个列表的所有有效组合的列表。
无效的组合是:
{ {1,11} ,{2, 3, 6}, {6, 5, 7} }
因为元素 6 出现在第二个和第三个列表中。
我已经有一个执行此操作的代码,但它只是查找所有可能的组合并在将其添加到最终结果列表之前检查它们是否有效。由于当 K 变大时,这个列表非常大(153 个列表),所以所花费的时间也非常大(在 K = 5 时,我需要大约 10 分钟。)
我想看看是否有有效的方法来做到这一点。 以下是我当前的代码(我要组合的列表是类 Item 的属性):
public void recursiveComb(List<Item> arr, int len, int startPosition, Item[] result)
{
if (len == 0)
{
if (valid(result.ToList()))
{
//Here I add the result to final list
//valid is just a function that checks if any list has repeated elements in other
}
return;
}
for (int i = startPosition; i <= arr.Count - len; i++)
{
result[result.Length - len] = arr[i];
recursiveComb(arr, len - 1, i + 1, result);
}
}
【问题讨论】:
-
我不明白这个问题...是的,我可以看到什么是有效的,什么是无效的,但是你想用这个做什么。过滤还是验证?
-
我想过滤所有有效的组合并将它们添加到最终列表中。
-
你关心哪些内部列表会被删除吗?
-
我的意思是你为什么保留
{1,11}而不是{1,2,3},我真的很困惑。您需要添加更多信息 -
@TheGeneral 他想展示与有效示例相关的无效示例。它只是他想要收集到列表中并在最后输出给用户的众多列表中的一种可能性。确实很有趣的问题。
标签: c# list combinations