# README
Fisher-Yates алгоритм
Info
Алгоритм Fisher-Yates, также известный как Knuth shuffle, назван в честь двух ученых, которые внесли вклад в его разработку и популяризацию:
- Ronald Fisher и Frank Yates: Этот алгоритм был впервые опубликован в их книге "Statistical Tables" в 1938 году. В то время алгоритм был описан в терминах работы с бумагой и карандашом, а также с использованием таблиц случайных чисел.
- Donald Knuth: В своей книге "The Art of Computer Programming" (Том 2: Seminumerical Algorithms), опубликованной в 1969 году, Дональд Кнут подробно описал этот алгоритм и популяризовал его в контексте компьютерных наук. Поэтому алгоритм также известен как Knuth shuffle.
Алгоритм Fisher-Yates является эффективным и простым способом перемешивания элементов массива, обеспечивающим равномерное распределение всех возможных перестановок. Благодаря своей простоте и эффективности, он широко используется в различных областях, включая компьютерные науки, статистику и математику.
Math
Математическая суть алгоритма Fisher-Yates (или Knuth shuffle) заключается в обеспечении равномерного распределения всех возможных перестановок элементов в массиве. Вот основные математические аспекты, которые лежат в основе этого алгоритма:
- Равномерное распределение перестановок: Алгоритм гарантирует, что каждая из n! (факториал n) возможных перестановок n элементов массива будет иметь одинаковую вероятность появления. Это достигается за счет того, что на каждом шаге алгоритма выбирается случайный элемент из оставшихся элементов массива.
- Однородность выбора: На каждом шаге алгоритма выбирается случайный индекс j из диапазона от 0 до i (где i — текущий индекс в цикле). Этот выбор является однородным, то есть каждый индекс в этом диапазоне имеет равную вероятность быть выбранным.
- Эффективность.
Алгоритм работает за линейное время O(n), где n — количество элементов в массиве. Это делает его очень эффективным с точки зрения вычислительной сложности. - In-place перемешивание.
Алгоритм выполняет перемешивание "на месте", то есть не требует дополнительной памяти, зависящей от размера массива. Это делает его эффективным с точки зрения использования памяти. - Гарантия случайности.
Благодаря равномерному распределению перестановок и однородному выбору индексов, алгоритм обеспечивает действительно случайное перемешивание элементов массива. Это важно для многих приложений, где требуется случайный порядок элементов.
Таким образом, математическая суть алгоритма Fisher-Yates заключается в обеспечении равномерного и эффективного перемешивания элементов массива, что делает его широко используемым инструментом в различных областях, включая компьютерные науки, статистику и математику.