"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como selecionar itens da matriz de maneira eficiente e aleatória, sem repetição?

Como selecionar itens da matriz de maneira eficiente e aleatória, sem repetição?

Publicado em 2024-11-03
Navegar:312

How to Efficiently Select Array Items Randomly Without Repetition?

Seleção eficiente de itens de array aleatoriamente, sem repetição

Você desenvolveu uma função que seleciona aleatoriamente itens de um array, garantindo que as seleções recentes não sejam repetidas. Embora a solução atual funcione de maneira eficaz, você está preocupado com sua eficiência e se ela poderia levar a loops excessivos. Vamos explorar uma abordagem mais eficiente.

1. Considerações sobre recursão

Sim, sua função ChooseName() pode ser considerada recursiva, pois chama a si mesma até encontrar um nome exclusivo. A recursão pode ser útil para certos problemas, mas é importante estar atento ao uso da pilha e ao potencial de profundidade excessiva.

2. Uma solução eficiente

Para abordar questões de eficiência, podemos adotar uma estratégia diferente. Em vez de confiar na recursão e no loop até que um nome exclusivo seja encontrado, podemos criar uma cópia do array original e selecionar aleatoriamente os itens da cópia até que todos os itens sejam selecionados. Quando todos os itens estiverem esgotados, redefinimos a cópia para seu estado original.

Aqui está uma implementação JavaScript dessa abordagem:

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.

Essa abordagem faz uso do método array slice() do JavaScript para criar uma cópia superficial do array original. Em seguida, ele seleciona repetidamente itens aleatórios da cópia e os remove da cópia, imitando efetivamente uma seleção aleatória sem repetições até que todos os itens se esgotem. Depois que todos os itens forem selecionados, a cópia será redefinida, permitindo que a seleção aleatória seja iniciada novamente.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3