Шанс воспроизведения двух одинаковых песен уменьшается с увеличением размера списка воспроизведения.Считаете ли вы, что вероятность того, что одна и та же песня воспроизводится в плейлисте размером 7000, на самом деле ниже 50%?Если это так, то проверка любых более высоких значений приведет только к меньшим процентам, поэтому вы никогда не найдете свой ответ.
Если вы хотите провести симуляцию (в отличие от чисто математического подхода),Основная оптимизация, которую я могу найти, заключается в том, что вставка и добавление массива довольно сильно снижает производительность, если делать это много раз.То, что я сделал, было создать массив логических значений, которые хранят состояние, если какая-либо из данных песен была воспроизведена.Гораздо проще проверить, воспроизводилась ли данная песня, и не требуется никаких вставок, которые создают новые массивы за кадром.
Вот код:
from random import randint
playlist_size = 1
samples = 1000
songs_per_sample = 100
simulation_running = True
while simulation_running:
replays = 0
for _ in range(samples):
songs_played = [False] * playlist_size
for song_sample in range(songs_per_sample):
song_to_play_index = randint(0, playlist_size - 1)
if songs_played[song_to_play_index]:
replays += 1
songs_played[song_to_play_index] = True
replay_chance = replays / (samples * songs_per_sample)
if replay_chance <= 0.5:
break
playlist_size += 1
print(playlist_size)
Запуск этойна самом деле дает удивительный ответ, который намного ниже 7000!