我是一个有用的助手,可以翻译文本。
英译中:
这些列表的有效三个元素组合可能是:
这只是有效组合中的一个,我想返回的是K个列表的所有有效组合的列表。
无效的组合将会是:
因为元素6出现在第二个和第三个列表中。
我已经有一个代码可以做到这一点,但它只是找到所有可能的组合,然后检查它们是否有效,然后将其添加到最终结果列表中。由于列表列表相当大(153个列表),当K变大时,所需的时间也非常长(在K = 5时,需要大约10分钟)。
我想看看是否有一种有效的方法来做到这一点。 下面是我的当前代码(我要组合的列表是类项的属性):
英译中:
好的,我有一个列表的列表,就像标题所说的一样,我想要制作k个列表的组合,在其中每个列表都具有与其余列表不同的元素。
例如:
我有以下列表:
{ {1,2,3} , {1,11} , {2,3,6} , {6,5,7} , {4,8,9} }
这些列表的有效三个元素组合可能是:
{ {1,11}, {4,8,9} ,{6,5,7} }
这只是有效组合中的一个,我想返回的是K个列表的所有有效组合的列表。
无效的组合将会是:
{ {1,11} ,{2, 3, 6}, {6, 5, 7} }
因为元素6出现在第二个和第三个列表中。
我已经有一个代码可以做到这一点,但它只是找到所有可能的组合,然后检查它们是否有效,然后将其添加到最终结果列表中。由于列表列表相当大(153个列表),当K变大时,所需的时间也非常长(在K = 5时,需要大约10分钟)。
我想看看是否有一种有效的方法来做到这一点。 下面是我的当前代码(我要组合的列表是类项的属性):
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