Классический Фишер Йейтс выглядит примерно так:
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)]);
}
}
Эта версия чем-то хуже (или лучше), чем первая? Искажает ли она результирующие вероятности?