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

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

Mary-Kate Olsen
Libérer: 2025-01-31 18:51:10
original
957 Les gens l'ont consulté

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

Quelle est l'efficacité de l'utilisation

et pour mélanger les listes? Random OrderBy Cet article explore l'efficacité de l'utilisation de la méthode et

pour mélanger les listes. Les exemples de code sont les suivants:

Random Principe de travail du code OrderBy

var r = new Random();
var shuffled = ordered.OrderBy(x => r.Next());
Copier après la connexion
Ce code utilise la classe

pour générer des nombres aléatoires. Pour chaque élément de la liste, la méthode utilise l'expression Lambda pour allouer un nombre aléatoire pour cela. Ensuite, la liste est triée en fonction de ces nombres aléatoires pour réaliser des effets de mélange.

Quelle est l'efficacité de cet algorithme de shuffle? Random ordered Bien que ce code puisse atteindre l'objectif de mélange, son efficacité est problématique. OrderBy La couche inférieure de la méthode utilise l'algorithme de tri O (n log n), ce qui est trop compliqué pour la tâche de remaniement, car le remaniement ne nécessite que la complexité temporelle de O (n). x => r.Next()

Mieux et considérant les facteurs

L'algorithme de shuffle plus efficace est l'algorithme de shuffle Fisher-Yates. Pour plus de commodité et de clarté, vous pouvez créer une méthode d'extension

en utilisant l'algorithme Fisher-Yates.

OrderBy Fisher-yates Shuffle Algorithme à travers des listes d'itération, en échangeant des éléments avec des éléments sélectionnés aléatoires pour atteindre le mélange. Ce qui suit est une méthode d'extension simple (vérification illimitée):

L'utilisation de l'algorithme Fisher-Yates peut éviter les frais généraux de calcul apportés par tout en maintenant la fonction de mélange.

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal