Сгенерировать M уникальных случайных чисел в диапазоне от 1..N. Быстрый алгоритм есть? Есть быстрые алгоритмы генерации таких чисел, чтобы они не повторялись ? Видится сбор чисел от генератора случайных числе в список, и проверка каждого нового на уникальность по списку. Видится сложность порядка: O(n^2) Диапазон M < N, и могут быть одинакового порядка, порядок в районе 10000. Я могу использовать только списки и туплы.
Для генерации 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 уникальных чисел за линейное время.
Для генерации M уникальных случайных чисел в диапазоне от 1 до N можно использовать следующий алгоритм:
Создать список из всех чисел в диапазоне от 1 до N.Перемешать список.Взять первые M элементов списка.Этот алгоритм обеспечивает генерацию M уникальных случайных чисел за время O(N) и не требует дополнительной проверки на уникальность каждого числа.
Пример кода на Python:
import randomdef 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 уникальных чисел за линейное время.