如何有效地为n个元素创建剪刀石头布游戏,
其中n是任何大于等于3的奇数。

换句话说,我想要n个元素的非传递式完整排序
这样每个元素都大于(n-1)/2个其他元素,并且每个元素
元素小于(n-1)/2个其他元素。

最佳答案

假设您的商品编号为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 -

这不是唯一的可能性,但可能是最简单的。您可以构建任何遵循以下规则的矩阵:
  • 对角线上的所有值均为零。
  • 其他值为1或-1(胜利,失败)。
  • 这是一个skew symmetric matrix
  • 每行和每一列都有(n-1)/2个赢和输。

  • 这是另一个更复杂的示例:
      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拍2和3。
    1击败0和2。
    2拍3和4。
    3拍1和4
    4拍0和1。

    在此示例中,可以重新标记商品以提供与先前游戏相同的逻辑。我怀疑总体上如此。

    10-07 12:40
    查看更多