Comment améliorer l'efficacité de la sélection aléatoire des éléments du tableau
Lorsqu'il s'agit de choisir au hasard des éléments du tableau tout en évitant les répétitions, l'efficacité joue un rôle crucial. Bien que le code fourni empêche effectivement de sélectionner le même élément plusieurs fois de suite, il existe un potentiel d'amélioration des performances.
En ce qui concerne la question de la récursivité, la fonction fournie n'est pas techniquement qualifiée de récursive car elle ne s'appelle pas elle-même. directement mais s'appelle plutôt via une autre fonction (chooseName()). Cependant, il partage des similitudes avec les fonctions récursives dans sa nature itérative.
Pour améliorer l'efficacité, une approche alternative peut être adoptée qui élimine le comportement récursif et réduit considérablement le temps passé à rechercher des éléments uniques. Cette stratégie implique la création d'une nouvelle fonction qui sélectionne aléatoirement les éléments jusqu'à ce que tous les éléments du tableau soient épuisés. Une fois que tous les éléments ont été utilisés, la fonction recommence depuis le début, en garantissant qu'aucun élément n'est répété.
Le code suivant implémente cette approche :
<code class="javascript">function randomNoRepeats(array) { var copy = array.slice(0); return function() { if (copy.length < 1) { copy = array.slice(0); } var index = Math.floor(Math.random() * copy.length); var item = copy[index]; copy.splice(index, 1); return item; }; } var chooser = randomNoRepeats(['Foo', 'Bar', 'Gah']); chooser(); // => "Bar" chooser(); // => "Foo" chooser(); // => "Gah" chooser(); // => "Foo" -- only repeats once all items are exhausted.</code>
En utilisant cette approche modifiée, vous peut efficacement éviter les répétitions tout en conservant une sélection d'éléments efficace sans risque de longues itérations de boucle comme dans l'implémentation de type récursif.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!