Вариант Фишера Йейтса

Классический Фишер Йейтс выглядит примерно так:

void shuffle1(std::vector<int>& vec)
{
    int n = vec.size();
    for (int i = n - 1; i > 0; --i)
    {
        std::swap(vec[i], vec[rand() % (i + 1)]);
    }
}

Вчера, Я по ошибке реализовал итерацию «в обратном направлении»:

void shuffle2(std::vector<int>& vec)
{
    int n = vec.size();
    for (int i = 1; i < n; ++i)
    {
        std::swap(vec[i], vec[rand() % (i + 1)]);
    }
}

Эта версия чем-то хуже (или лучше), чем первая? Искажает ли она результирующие вероятности?

11
задан fredoverflow 14 January 2012 в 10:29
поделиться