【发布时间】:2012-05-09 03:03:24
【问题描述】:
我正在编写一个 Cuda 应用程序,它应该计算我的集合 S 的两个元素的函数。但是这对的顺序没有任何区别,所以:f(a,b) = f(b,a)
因此,我想生成最大大小为 K 的 S 的所有子集,而不会在集合之间复制元素对。
换句话说,给定任意两个子集,我不希望它们的交集大于一个元素。 (这样可以避免多次计算这两个元素的函数)
例子:
给定S={1,2,3,4,5,6,7,8,9} 和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}。
【问题讨论】:
-
您能花点时间写下您的问题吗?它应该包含一个short, self-contained, correct, example;对问题所在的清晰描述以及对what you have tried 的描述。
-
我认为您可能不小心遗漏了问题的某些部分。
-
这可能是一个有趣的问题,我真的不明白为什么必须关闭它。在您更具体地确定您要查找的内容后重新发布。
-
请勿转发;编辑问题。已经有重新开放的投票。
-
继续编辑。问题:1)您谈论“对”,但您的示例涉及三胞胎(但只有一对)。你想要哪一个?两个都?单身人士也行? 2)您的示例不包含所有可能的组合,仅包含其中一些组合。你想要所有可能的组合吗?只有一些?我们如何决定哪些? 3) “我更喜欢二进制”是什么意思?
标签: python math parallel-processing combinatorics discrete-mathematics