package
0.0.0-20241221191246-b80a13d7bbe0
Repository: https://github.com/yvv4git/go-algorithms.git
Documentation: pkg.go.dev

# README

Fisher-Yates алгоритм

Info

Алгоритм Fisher-Yates, также известный как Knuth shuffle, назван в честь двух ученых, которые внесли вклад в его разработку и популяризацию:

  1. Ronald Fisher и Frank Yates: Этот алгоритм был впервые опубликован в их книге "Statistical Tables" в 1938 году. В то время алгоритм был описан в терминах работы с бумагой и карандашом, а также с использованием таблиц случайных чисел.
  2. Donald Knuth: В своей книге "The Art of Computer Programming" (Том 2: Seminumerical Algorithms), опубликованной в 1969 году, Дональд Кнут подробно описал этот алгоритм и популяризовал его в контексте компьютерных наук. Поэтому алгоритм также известен как Knuth shuffle.

Алгоритм Fisher-Yates является эффективным и простым способом перемешивания элементов массива, обеспечивающим равномерное распределение всех возможных перестановок. Благодаря своей простоте и эффективности, он широко используется в различных областях, включая компьютерные науки, статистику и математику.

Math

Математическая суть алгоритма Fisher-Yates (или Knuth shuffle) заключается в обеспечении равномерного распределения всех возможных перестановок элементов в массиве. Вот основные математические аспекты, которые лежат в основе этого алгоритма:

  1. Равномерное распределение перестановок: Алгоритм гарантирует, что каждая из n! (факториал n) возможных перестановок n элементов массива будет иметь одинаковую вероятность появления. Это достигается за счет того, что на каждом шаге алгоритма выбирается случайный элемент из оставшихся элементов массива.
  2. Однородность выбора: На каждом шаге алгоритма выбирается случайный индекс j из диапазона от 0 до i (где i — текущий индекс в цикле). Этот выбор является однородным, то есть каждый индекс в этом диапазоне имеет равную вероятность быть выбранным.
  3. Эффективность.
    Алгоритм работает за линейное время O(n), где n — количество элементов в массиве. Это делает его очень эффективным с точки зрения вычислительной сложности.
  4. In-place перемешивание.
    Алгоритм выполняет перемешивание "на месте", то есть не требует дополнительной памяти, зависящей от размера массива. Это делает его эффективным с точки зрения использования памяти.
  5. Гарантия случайности.
    Благодаря равномерному распределению перестановок и однородному выбору индексов, алгоритм обеспечивает действительно случайное перемешивание элементов массива. Это важно для многих приложений, где требуется случайный порядок элементов.

Таким образом, математическая суть алгоритма Fisher-Yates заключается в обеспечении равномерного и эффективного перемешивания элементов массива, что делает его широко используемым инструментом в различных областях, включая компьютерные науки, статистику и математику.