将n个数字组合成两个唯一的组

时间:2014-04-14 13:56:26

标签: javascript logic permutation

我必须为游戏实施组合,其中玩家被随机选择为来自n个玩家的两个小组。

例如:

如果有四名球员 - A B C D

AB vs CD - 第一轮球队 AC vs BD - 第二轮比赛 AD vs BC - 第三轮球队

如果有六名球员 - A B C D E F

ABC vs DEF ADE与BCF

每次玩家玩独特玩家时,没有两个玩家可以连续三次与同一玩家一起玩游戏。有没有办法产生这种组合。

感谢您的回答。

1 个答案:

答案 0 :(得分:1)

它易于存档你可以创建一个函数,只需传入你的4或6个名字作为参数或更好的数组然后只需随机混合这个数组

事实上无偏见的随机播放算法是Fisher-Yates(又名Knuth)Shuffle。

请参阅https://github.com/coolaj86/knuth-shuffle

您可以看到great visualization here(以及原始帖子linked to this

function shuffle(array) {
  var currentIndex = array.length
    , temporaryValue
    , randomIndex
    ;

  // While there remain elements to shuffle...
  while (0 !== currentIndex) {

    // Pick a remaining element...
    randomIndex = Math.floor(Math.random() * currentIndex);
    currentIndex -= 1;

    // And swap it with the current element.
    temporaryValue = array[currentIndex];
    array[currentIndex] = array[randomIndex];
    array[randomIndex] = temporaryValue;
  }

  return array;
}

像这样使用

var arr = [2, 11, 37, 42];
shuffle(arr);
console.log(arr);

使用了更多信息about the algorithm