如何有效地为n个元素创建摇滚剪纸游戏, 其中n是任何奇数> = 3。
换句话说,我想要n个元素的非传递完整排序 这样每个元素大于(n-1)/ 2个其他元素和每个元素 element小于(n-1)/ 2个其他元素。
答案 0 :(得分:7)
假设您的商品编号为0,1,2,...,n-1。
项目i击败项目j iff i - j (mod n) > (n-1)/2
。
换句话说,您可以旋转列表,使您选择的项目位于列表的中间位置:
i - (n-1) / 2, ..., i-2, i-1, i, i+1, i+2, ..., i + (n-1) / 2
然后,项目i击败列表中的所有项目。
i vs j的矩阵看起来像这样:
0 1 2 3 4
0 - L L W W
1 W - L L W
2 W W - L L
3 L W W - L
4 L L W W -
这不是唯一的可能性,但它可能是最简单的。您可以构建符合这些规则的任何矩阵:
这是另一个更复杂的例子:
0 1 2 3 4
0 - L W W L
1 W - W L L
2 L L - W W
3 L W L - W
4 W W L L -
或者用另一种方式表达:
0 beats 2 and 3. 1 beats 0 and 2. 2 beats 3 and 4. 3 beats 1 and 4. 4 beats 0 and 1.
在此示例中,可以重新标记项目以提供与上一游戏中相同的逻辑。我怀疑这一点是否一般。
答案 1 :(得分:3)
太棒了,谢谢!
作为另一种方法(受你的启发),对于下一个(n-1)/ 2个元素,k敲打k + 1(mod n-1),k + 2(mod n-1)等等。