Heim >Backend-Entwicklung >C++ >Verwendet 'OrderBy' mit 'random' eine effiziente Möglichkeit, eine Liste zu mischen?
und , um Listen zu mischen? Random
OrderBy
In diesem Artikel wird die Effizienz der Verwendung der Methode und
Random
Code -Arbeitsprinzip OrderBy
<code class="language-csharp">var r = new Random(); var shuffled = ordered.OrderBy(x => r.Next());</code>Dieser Code verwendet
Klasse, um Zufallszahlen zu generieren. Für jedes Element in der Liste verwendet die -Methode den Lambda -Ausdruck , um eine Zufallszahl dafür zuzuweisen. Anschließend wird die Liste nach diesen Zufallszahlen sortiert, um Mischungseffekte zu erzielen.
Was ist die Effizienz dieses Shuffle -Algorithmus? Random
ordered
Obwohl dieser Code den Zweck des Mischens erreichen kann, ist seine Effizienz problematisch. OrderBy
Die untere Schicht der Methode verwendet O (n log n) Sortieralgorithmus, was für die Umschulungsaufgabe zu kompliziert ist, da die Umform nur die zeitliche Komplexität von O (n) erfordert. x => r.Next()
Der effektivere Shuffle-Algorithmus ist der Fisher-Yates-Shuffle-Algorithmus. Aus Gründen der Bequemlichkeit und Klarheit können Sie mit dem Fisher-Yates-Algorithmus eine
-Expansionsmethode erstellen.
OrderBy
Fisher-yates Shuffle-Algorithmus durch Iterationslisten und tauschen Elemente mit zufälligen ausgewählten Elementen aus, um das Mischen zu erreichen. Das Folgende ist eine einfache -Gerhebungsmethode (unbegrenzte Überprüfung):
Die Verwendung des Fisher-Yates-Algorithmus kann den Berechnungsaufwand vermeiden, der durch beibehalten wird, während die Mischungsfunktion beibehalten wird.
Das obige ist der detaillierte Inhalt vonVerwendet 'OrderBy' mit 'random' eine effiziente Möglichkeit, eine Liste zu mischen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!