«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как эффективно выбирать элементы массива случайным образом без повторения?

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

Опубликовано 3 ноября 2024 г.
Просматривать:848

How to Efficiently Select Array Items Randomly Without Repetition?

Эффективный выбор элементов массива случайным образом без повторения

Вы разработали функцию, которая случайным образом выбирает элементы из массива, гарантируя, что недавние выборы не повторяются. Хотя текущее решение работает эффективно, у вас есть опасения по поводу его эффективности и того, может ли оно привести к чрезмерному зацикливанию. Давайте рассмотрим более эффективный подход.

1. Рекомендации по рекурсии

Да, вашу функцию ChooseName() можно считать рекурсивной, поскольку она вызывает саму себя до тех пор, пока не найдет уникальное имя. Рекурсия может быть полезна для решения определенных проблем, но важно помнить об использовании стека и возможности чрезмерной глубины.

2. Эффективное решение

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

Вот реализация этого подхода на JavaScript:

function randomNoRepeats(array) {
  var copy = array.slice(0);
  return function() {
    if (copy.length  "Bar"
console.log(chooser()); // => "Foo"
console.log(chooser()); // => "Gah"
console.log(chooser()); // => "Foo" -- only repeats once all items are exhausted.

Этот подход использует метод JavaScript arraylice() для создания поверхностной копии исходного массива. Затем он неоднократно выбирает случайные элементы из копии и удаляет их из копии, эффективно имитируя случайный выбор без повторов, пока все элементы не будут исчерпаны. Как только все элементы выбраны, копия сбрасывается, что позволяет начать случайный выбор заново.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3