Сгенерировать M уникальных случайных чисел в диапазоне от 1..N. Быстрый алгоритм есть? Есть быстрые алгоритмы генерации таких чисел, чтобы они не повторялись ?
Видится сбор чисел от генератора случайных числе в список, и проверка каждого нового на уникальность по списку.
Видится сложность порядка: O(n^2)
Диапазон M < N, и могут быть одинакового порядка, порядок в районе 10000.
Я могу использовать только списки и туплы.

21 Авг 2019 в 06:08
127 +1
0
Ответы
1

Для генерации M уникальных случайных чисел в диапазоне от 1 до N можно использовать следующий алгоритм:

Создать список из всех чисел в диапазоне от 1 до N.Перемешать список.Взять первые M элементов списка.

Этот алгоритм обеспечивает генерацию M уникальных случайных чисел за время O(N) и не требует дополнительной проверки на уникальность каждого числа.

Пример кода на Python:

import random
def generate_unique_numbers(N, M):
numbers = list(range(1, N+1))
random.shuffle(numbers)
return numbers[:M]
N = 10000
M = 100
unique_numbers = generate_unique_numbers(N, M)
print(unique_numbers)

Этот алгоритм проще и более эффективен, чем проверка каждого числа на уникальность по списку, и позволит сгенерировать M уникальных чисел за линейное время.

20 Апр в 13:23
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 548 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир