Нужен массив случайных чисел с неравномерным распределением

Рейтинг: 2Ответов: 1Опубликовано: 20.07.2025

Подскажите, пожалуйста, несложный способ сгенерировать массив случайных чисел 0-1 с неравномерным распределением (подсобрать их к началу, например) имея только генератор в диапазоне 0-1 и элементарные функции. Чем больше число, тем меньше должна быть вероятность его появления.

Хочу просимулировать время решения проблемы при обращении в техподдержку.

Посмотрел несколько вопросов, но путного ответа не нашёл.

Ответы

▲ 4Принят

Для того, чтобы сгенерировать нестандартное распределение, во многих случаях можно использовать метод обратного преобразования Смирнова.

Для его использования подбираем несложную функцию, которая описывает желаемое распределение. Например, равномерное распределение - это прямая y=x (в этом случае ничего делать не нужно). Пусть мы хотим плавное распределение в диапазоне 0..1, при котором 50% чисел будут меньше 0.1, а 80% чисел будут меньше 0.5. Чуть поиграв, выберем функцию f=x^(1/3) (красная линия). Плотность распределения выше там, гдe функция быстрее растёт (значение производной больше) - в данном случае в начале диапазона.

Теперь найдём обратную функцию - F=x^3 - синяя линия. (если исходная была y=f(x), то выразим x через y, это не всегда возможно)

График обратной функции является отражением исходной отноительно прямой y=x. Это свойство можно использовать, если распределение задано не единой функцией, а, например, набором отрезков.

введите сюда описание изображения

Теперь сгенерируем набор равномерно распределённых случайных чисел и применим к каждому результату обратную функцию. Получится набор с желаемым распределением. Пример гистограммы распределения для 3000 точек ниже, примерно 80% значений меньше 0.5 (2373 в данной генерации)

введите сюда описание изображения

Как иллюстрация к сигмоиде из комментария к вопросу:

введите сюда описание изображения