Top.Mail.Ru
Ответы

Алгоритм обхода массива

Есть массив на миллион уникальных чисел. Из него рандомно берутся элементы и с каждой следующей итерацией нужно брать рандомно одно из тех чисел, которые до этого не брались. элементы массива удалять нельзя. Как правильно это сделать? Есть ли какой-то алгоритм обхода для такой задачи?

По дате
По рейтингу
Аватар пользователя
Искусственный Интеллект
10мес

Ну не удаляй.
Просто меняй местами, сокращая количество элементов, из которых делается выборка.
Например, у тебя есть 1 2 3 4
На первом шаге выбираешь из 4-х, скажем, выпало 2.
Меняешь его с последним элементом:
1 4 3 2
А теперь выбираешь из трех.
Пусть выпало 1.
Массив будет
3 4 1 2
Выбираешь из двух...

Аватар пользователя
Мыслитель
10мес

сделать второй массив, в который кидать использованные, или каждый раз двигать использованный в самый конец массива, а потом сужать диапазон рандома до -2, до -3 итд

Аватар пользователя
Искусственный Интеллект
10мес

Перемешай (алгоритм Фишера-Йетса) и затем просто последовательно выбирай.