我们有 n 个唯一元素。假设 n = 8,而 N = {A,B,C,D,E,F,G,H} 。
我们想要获得这些元素的所有唯一组合,在这种情况下,应该产生28个唯一对。
[A, B]
[A, C]
[A, D]
[A, E]
[A, F]
[A, H]
[A, G]
[B, C]
[B, D]
[B, E]
[B, F]
[B, H]
[B, G]
[C, D]
[C, E]
[C, F]
[C, H]
[C, G]
[D, E]
[D, F]
[D, H]
[D, G]
[E, F]
[E, H]
[E, G]
[F, H]
[F, G]
[H, G]
然后,我们希望将这些对进行分组,并将它们分为 y 对的 x 组。设 X = 7 和 Y = 4 。在任何 x 组中,任何组中的一个元素都不能代表一个以上的元素,并且对中的任何一个对都不应使用超过一次。
一个简单的蛮力算法就落在这里-它创建4组4个,3组3个,其中3对无法分组。这是一致发生的。
***** Group 1 *****
Pair(element1=F, element2=G)
Pair(element1=E, element2=H)
Pair(element1=C, element2=D)
Pair(element1=A, element2=B)
***** Group 2 *****
Pair(element1=F, element2=H)
Pair(element1=E, element2=G)
Pair(element1=B, element2=C)
Pair(element1=A, element2=D)
***** Group 3 *****
Pair(element1=E, element2=F)
Pair(element1=D, element2=G)
Pair(element1=C, element2=H)
***** Group 4 *****
Pair(element1=D, element2=E)
Pair(element1=C, element2=F)
Pair(element1=B, element2=G)
Pair(element1=A, element2=H)
***** Group 5 *****
Pair(element1=D, element2=F)
Pair(element1=C, element2=E)
Pair(element1=B, element2=H)
Pair(element1=A, element2=G)
***** Group 6 *****
Pair(element1=D, element2=H)
Pair(element1=C, element2=G)
Pair(element1=B, element2=E)
Pair(element1=A, element2=F)
***** Group 7 *****
Pair(element1=B, element2=D)
Pair(element1=A, element2=C)
Pair(element1=H, element2=G)
我们可以加倍考虑暴力破解方法,只丢弃一个糟糕的最终分组,随机化唯一对的顺序,然后再试一次,但是必须有一种更简洁(更智能)的方式来实现。
做一点挖掘,我认为这可能是Exact Cover problem的情况。这是一个准确的概括吗?如果是这样,我可以将工作重心转向Algorithm X实现。我对此表示怀疑,因为我不仅在寻找确切的封面,而且还在寻找每个子集大小相同的确切封面。
我意识到这个问题看起来像是家庭作业问题,但我已经辍学了。信不信由你,这只是几个开发人员试图生成“结对编程”时间表的消息,但是失败了,并且意识到我们偶然发现了一个稍微有趣的问题。
谢谢。