python
использует итерационный алгоритм Mersenne Twister для генерации псевдослучайных чисел [1] . seed - это просто место, где мы начинаем итерацию.
Для ясности, у большинства компьютеров нет "истинного" источника случайности.Интересно, что «случайность» так важна для многих приложений, и ее довольно сложно найти (вы можете купить специализированное устройство , предназначенное для этой цели).Поскольку трудно создавать случайные числа, но они, тем не менее, необходимы, было разработано много-много-много-много алгоритмов для генерации чисел, которые не случайны, но тем не менее выглядят так, как будто они.Алгоритмы, которые генерируют числа, которые "выглядят случайными" , называются генераторами псевдослучайных чисел (PRNG).Поскольку PRNG на самом деле являются детерминированными, они не могут просто создать число из эфира и сделать его случайным.Им нужен вход .Оказывается, что используя некоторые сложные операции и модульную арифметику, мы можем взять вход и получить другое число, которое, кажется, мало или совсем не имеет отношения к входу.Используя эту интуицию, мы можем просто использовать предыдущий вывод PRNG в качестве следующего ввода.Затем мы получаем последовательность чисел, которая, если наш PRNG хорош, кажется, не имеет никакого отношения друг к другу.
Чтобы запустить наш итеративный PRNG, нам нужен начальный ввод .Этот начальный ввод называется "семя".Поскольку PRNG является детерминированным, для данного начального числа он будет генерировать идентичную последовательность чисел.Обычно есть начальное число по умолчанию, которое само по себе является случайным.Наиболее распространенным является текущее время.Однако текущее время не очень хорошее случайное число, поэтому известно, что такое поведение иногда вызывает проблемы .Если вы хотите, чтобы ваша программа запускалась одинаковым образом при каждом запуске, вы можете предоставить начальное число (0 - популярный вариант, но полностью произвольный).Затем вы получаете последовательность случайных чисел, но если вы дадите кому-то свой код, он может фактически полностью воссоздать время выполнения программы, как вы видели ее при запуске.