Задать вопрос
MaxLevs
@MaxLevs

Какова вероятность получить идентичные последовательности?

Есть два варианта получить последовательность чисел

Первый - обычный shuffle
def get_seq1(N=10):
    from random import shuffle
    seq1 = [X for X in range(N)]
    shuffle(seq1)
    return seq1


Второй внешне напоминает работу простого уличного лототрона
def get_seq2(N=10):
    from random import shuffle
    from random import randrange
    seq2 = []
    numbers = [X for X in range(N)]
    for _ in range(N):
        shuffle(numbers)
        seq2.append(numbers.pop(randrange(0, len(numbers))))
    return seq2


Мне интересно, совпадают ли в этих двух подходах вероятности получить идентичные последовательности.
seq11 = get_seq1()
seq12 = get_seq1()
print(seq11 == seq12)

seq21 = get_seq2()
seq22 = get_seq2()
print(seq21 == seq22)


Может кто объяснить?
  • Вопрос задан
  • 137 просмотров
Подписаться 1 Простой Комментировать
Ответ пользователя Михаил Трайнин К ответам на вопрос (2)
@Stormx480
Python Backend Developer
Ну если тебе нужно что бы этого не происходило ты можешь это ограничить. Сначала "заролять" одну функцию, потом другую с условием что бы результат не был равен результату предыдущей функции.

Ну а вообще это все ограничивается теорией вероятности. Шанс что тебе выпадет одно число из 10 - 1/10 соответственно. Шанс что тебе выпадет одно и тоже число из 10 дважды - 1/10*10 = 0.01.
Нужно понимать что шанс выпадения у любого элемента списка одинаковый. Т.е. шанс того что выпадет 5 такой же, как шанс того что выпадет 6. Соответственно для получения вероятности последовательности это все надо переумножить, формулу я уже не помню честно говоря, поищи в интернете. Ну попытаюсь логично подумать и просто возвести это все в 10 степень. т.е. 0.01^10 это будет примерно 1.0E-20

Вот тут есть хорошая статья на тему теории вероятности и случайности. Примеры на игральных костях, но думаю Вам она сгодится, на досуге советую почитать, интересная вещь.
Ответ написан