我正在编写一个 Cuda 应用程序,它应该在我的集合 S 的两个元素上计算一个函数。但是这对的顺序没有任何区别,所以:f(a,b)
=f(b,a)
出于这个原因,我想生成最大大小为 K 的 S 的所有子集,而不会在集合之间复制元素对。
换句话说,给定任何两个子集,我不希望它们的交集大于一个元素。(这样我可以避免多次计算这两个元素的函数)
例子:
给定S={1,2,3,4,5,6,7,8,9}
and K=3
,输出应该是这样的:
{ {1,2,3}, {1,4,5}, {1,6,7}, {1,8,9}, {2,4,6}, {2,5,7}, {2,8}, {2,7,9}, {3,4,7},
{3,5,8}, {3,6,9}, {4,5,9} }
但输出不应如下所示:
{ {1,2,3}, {1,4,5}, {1,6,7}, {1,8,9}, {2,4,6}, {2,5,7}, {2,6,8}, {2,7,9}, {3,4,7},
{3,5,8}, {3,6,9}, {4,5,9} }
因为 和 的{2,4,6}
交集{2,6,8}
是{2,6}
。