Ha ideado una función que selecciona aleatoriamente elementos de una matriz, asegurando que las selecciones recientes no se repitan. Si bien la solución actual funciona de manera efectiva, le preocupa su eficiencia y si podría generar bucles excesivos. Exploremos un enfoque más eficiente.
1. Consideraciones de recursividad
Sí, su función ChooseName() puede considerarse recursiva ya que se llama a sí misma hasta que encuentra un nombre único. La recursividad puede ser útil para ciertos problemas, pero es importante tener en cuenta el uso de la pila y la posibilidad de una profundidad excesiva.
2. Una solución eficiente
Para abordar los problemas de eficiencia, podemos adoptar una estrategia diferente. En lugar de depender de la recursividad y el bucle hasta encontrar un nombre único, podemos crear una copia de la matriz original y seleccionar elementos aleatoriamente de la copia hasta que se seleccionen todos los elementos. Una vez que se agotan todos los elementos, restablecemos la copia a su estado original.
Aquí hay una implementación de JavaScript de este enfoque:
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.
Este enfoque utiliza el método array slice() de JavaScript para crear una copia superficial de la matriz original. Luego selecciona repetidamente elementos aleatorios de la copia y los elimina de la copia, imitando efectivamente una selección aleatoria sin repeticiones hasta que se agoten todos los elementos. Una vez seleccionados todos los elementos, la copia se restablece, lo que permite que la selección aleatoria comience de nuevo.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3