Maison >développement back-end >C++ >L'utilisation de «Random» et «OrderBy» est-elle un moyen efficace de mélanger une liste?

L'utilisation de «Random» et «OrderBy» est-elle un moyen efficace de mélanger une liste?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-31 18:56:10120parcourir

Is Using `Random` and `OrderBy` an Efficient Way to Shuffle a List?

Utiliser

et Liste de shuffle: est-ce un algorithme efficace? Random OrderBy Cet article examine si l'utilisation de et

est un moyen efficace de mélanger la liste.

Random Méthode OrderBy

le code fourni pour générer un nombre aléatoire pour chaque élément et reprendre la liste en fonction de ces nombres:

Évaluation

<code>var r = new Random();
var shuffled = ordered.OrderBy(x => r.Next());</code>
Bien que cette méthode semble très intuitive, elle a quelques lacunes:

Complexité informatique:

La complexité du temps est O (n log n), qui est inefficace pour les grandes listes. Le meilleur algorithme de shuffle a la complexité de O (n).

Problèmes potentiels:
    En fonction des éléments de numérotation aléatoire peut provoquer des mélanges d'écart, la fréquence de certains éléments peut être plus élevée que les autres éléments.
  • alternative
  • L'algorithme Better Shuffle est le shuffle Fisher-Yates, qui échange l'élément en position aléatoire dans la liste. Cela fournit une distribution plus uniforme et la complexité est O (n).
  • implémenter

Cette méthode d'expansion simplifie l'utilisation du mélange de Fisher-Yates et évite les besoins de génération de nouveaux tableaux.

Conclusion

et peuvent être utilisés pour les mélanges, mais ils ont le problème de l'efficacité et de la déviation. Fisher-Yates Shuffle offre une solution plus efficace et non déviation, qui est le premier choix dans la plupart des applications qui doivent être mélangées.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn