Случайные числа без повторов
26927 20.09.2015 Скачать пример
Постановка задачи
Предположим, что нам необходимо создать набор целых случайных чисел без повторов в заданном интервале значений. Примеры с ходу:
- генерация уникальных случайных кодов для товаров или пользователей
- назначение людей на задачи (каждому по случайной из списка)
- перестановки слов в поисковом запросе (привет seo-шникам)
- игра в лото и т.д.
Способ 1. Простой
Для начала рассмотрим простой вариант: нам необходимо получить случайный набор из 10 целых чисел от 1 до 10. Использование встроенной в Excel функции СЛУЧМЕЖДУ (RANDBETWEEN) уникальности не гарантирует. Если ввести ее в ячейку листа и скопировать вниз на 10 ячеек, то запросто могут случиться повторы:
Поэтому мы пойдем другим путем.
Во всех версиях Excel есть функция РАНГ (RANG), предназначенная для ранжирования или, другими словами, определения топовой позиции числа в наборе. Для самого большого числа в списке ранг=1, второе в топе имеет ранг=2 и т.д.
Введем в ячейку А2 функцию СЛЧИС (RAND) без аргументов и скопируем формулу вниз на 10 ячеек. Эта функция сгенерирует нам набор из 10 случайных дробных чисел от 0 до 1:
В соседний столбец введем функцию РАНГ, чтобы определить позицию в рейтинге для каждого полученного случайного числа:
Получим в столбце В то, что хотели — любое нужное количество неповторяющихся случайных целых чисел от 1 до 10.
Чисто теоретически, может возникнуть ситуация, когда СЛЧИС выдаст нам два одинаковых случайных числа в столбце А, их ранги совпадут и мы получим повтор в столбце В. Однако, вероятность такого сценария крайне мала, учитывая тот факт, что точность составляет 15 знаков после запятой.
Способ 2. Сложный
Этот способ чуть сложнее, но использует всего одну формулу массива. Допустим, нам нужно создать на листе список из 9 неповторяющихся случайных целых чисел в интервале от 1 до 50.
Введите в ячейку А2 следующую формулу, нажмите в конце Ctrl+Shift+Enter (чтобы ввести ее как формулу массива!) и скопируйте формулу вниз на требуемое количество ячеек:
Способ 3. Макрос
Ну и, конечно, можно решить задачу с помощью программирования на Visual Basic. В одной из старых статей про случайную выборку я уже приводил макро-функцию массива Lotto, которая выдает требуемое количество случайных неповторяющихся чисел из заданного интервала.
Ссылки по теме
- Как подсчитать количество уникальных значений в диапазоне
- Случайная выборка элементов из списка
Справочник по функциям: rand
Возвращает матрицу со случайными элементами, равномерно распределенными по
интервал (0, 1).
Аргументы обрабатываются так же, как аргументы для глаз
.
Вы можете запросить состояние генератора случайных чисел, используя форму
v = ранд ("состояние")
Это возвращает вектор-столбец v длины 625. Позже вы можете восстановить генератор случайных чисел в состояние v , используя форму
рандов ("государство", в)
Вы также можете инициализировать вектор состояния из произвольного вектора длины ≤ 625 для и . Это новое состояние будет хешем, основанным на значении против , а не против .
По умолчанию генератор инициализируется с
/dev/urandom
, если он
доступны, в противном случае из процессорного времени, времени настенных часов и текущего
долю секунды. Обратите внимание, что это отличается от MATLAB , который
всегда инициализирует состояние в одно и то же состояние при запуске. Чтобы получить
поведение сравнимо с 9{19937}-1 (См.
В старых версиях Octave использовался другой генератор случайных чисел.
Новый генератор используется по умолчанию, так как он значительно быстрее предыдущего.
старый генератор и производит случайные числа со значительно более длинным циклом
время. Однако в некоторых случаях желательно получить
те же случайные последовательности, что и старые генераторы. Для этого
ключевое слово
"seed"
используется для указания того, что старые генераторы должны
использоваться, как врандов ("сид", вал)
, который устанавливает начальное значение генератора на val . Семя
Генератор можно запросить с помощью
с = ранд («начальное число»)
Однако следует отметить, что запрос начального числа не вызовет рандов
использовать старые генераторы, только установка сид будет. Вызывать рандов
, чтобы снова использовать новые генераторы, ключевое слово "состояние"
. Состояние или начальное значение генератора можно сбросить на новое случайное значение с помощью
ключевое слово "сброс"
.
Класс возвращаемого значения может управляться завершающим "двойной"
или "одиночный"
аргумент. Это единственные действительные
классы.
См. также: ранд, ранде, ранд, ранд.
Сгенерируйте случайные числа — Видеоурок по MATLAB
Из курса: MATLAB 2018 Essential Training
Генерация случайных чисел
“
— [Преподаватель] В другом месте этого курса я показал вам, как создавать диапазоны или последовательности чисел, которые следуют шаблону.



