Как получить уникальные случайные элементы из массива?

arrays algorithm random

1615 просмотра

1 ответ

Привет, у
меня есть массив (уникальных) объектов, и я хотел бы получить 4 случайных объекта из этого массива, но один и тот же объект не должен выбираться дважды, поэтому использование простой случайной функции не сработает.

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

Знаете ли вы лучший, более эффективный метод?

Автор: klaussner Источник Размещён: 12.11.2019 09:04

Ответы (1)


10 плюса

Решение

Перемешайте массив и получите первые 4 предмета. -> Накладные расходы, потому что массив может быть очень большим.

Используйте современную версию этого перетасовки Fisher Yates . Это может быть выполнено на месте, и если вы остановитесь после первых четырех перестановок, это даст вам нужный вам результат. Нет необходимости перетасовывать весь массив.

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

Автор: Mark Byers Размещён: 19.02.2011 08:59
Вопросы из категории :
32x32