Shuffle Shuffle, убедившись, что ни один элемент остается в том же положении

Я хочу перетасовать список уникальных предметов, но не делать совершенно случайное перемешивание. Мне нужно быть уверены, что ни один элемент в списке шаффл не находится в том же положении, что и в исходном списке. Таким образом, если оригинальный список (A, B, C, D, E), этот результат будет в порядке: (C, D, B, E, A), но это не будет: (C, E, A, D, B) потому что «D» все еще четвертый предмет. Список будет иметь максимум семи предметов. Экстремальная эффективность не является рассмотрением. Я думаю, что эта модификация Fisher / Yates делает трюк, но я не могу доказать это математически:

function shuffle(data) {
    for (var i = 0; i < data.length - 1; i++) {
        var j = i + 1 + Math.floor(Math.random() * (data.length - i - 1));

        var temp = data[j];
        data[j] = data[i];
        data[i] = temp;
    }
}
15
задан cychoi 30 May 2014 в 04:25
поделиться