et pour mélanger les listes? Random
OrderBy
Cet article explore l'efficacité de l'utilisation de la méthode et
Random
Principe de travail du code OrderBy
var r = new Random(); var shuffled = ordered.OrderBy(x => r.Next());
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()
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!