Обсуждение:Тасование Фишера — Йетса

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

Ошибка в "вывернутом" алгоритме

[править код]

В текущей версии от 11:37, 14 февраля 2022‎ "вывернутый" алгоритм представлен в следующем виде:

 for i from 0 to n − 2 do
     j ← random integer with 0 ≤ j ≤ i
     a[i] ← a[j]
     a[j] ← source[i]

Здесь цикл проходит до n - 2. Это не выглядит правильным - ведь тогда последний элемент исходного массива (с индексом n - 1) никогда не будет вставлен в новый массив.

Стоит заметить, что в английской версии этой статьи конечная итерация цикла приходится на n - 1, а не на n - 2:

 for i from 0 to n − 1 do
     j ← random integer such that 0 ≤ j ≤ i
     if j ≠ i
         a[i] ← a[j]
     a[j] ← source[i]

Раньше статья содержала n - 1 (последняя версия статьи с таким алгоритмом - 13:36, 25 ноября 2021). Но в версии 19:50, 3 декабря 2021‎ конечное значение цикла было исправлено на n - 2 - правка содержит пометку "Исправлен неправильный "вывернутый" алгоритм". Показалось странным то, что эта правка была отпатрулирована участником User:Jumpow.

Я отменил правку от 19:50, 3 декабря 2021‎. Если отмена этой правки покажется Вам некорректной, то пожалуйста представьте здесь в обсуждении свои аргументы перед тем как возвращать ее. Спасибо.

2600:1700:38D0:67A0:55F7:9EEA:9154:4846 06:59, 29 мая 2022 (UTC)[ответить]