Rumah >pembangunan bahagian belakang >C++ >Adakah `OrderBy (x => r.next ())` Cara pintar untuk mengosongkan senarai?

Adakah `OrderBy (x => r.next ())` Cara pintar untuk mengosongkan senarai?

DDD
DDDasal
2025-01-31 19:01:08628semak imbas

<.> r.next ()) `Cara SART untuk mengocok senarai? " /> Is `OrderBy(x =>
</p> <<> Adakah <p> senarai shuffle bijak? <strong> <<>
<code>OrderBy(x => r.Next())</code> Apabila membincangkan algoritma shuffle, sesetengah orang mengesyorkan menggunakan kod berikut: </strong>
</p>
<p> <估> penilaian </p> <pre class=<code class=" language-csharp>var r = new Random(); var shuffled = ordered.OrderBy(x => r.Next()); <p> Kaedah ini bukan kaedah shuffle yang ideal. Walaupun ia menghasilkan satu -satunya nombor rawak untuk setiap elemen, ia adalah operasi O (n log n), dan terdapat algoritma O (n) yang lebih berkesan. <strong> </strong> Prinsip kerja </p> <p> </p> Pada dasarnya, kaedah ini diedarkan kepada unsur -unsur secara rawak dan menyusunnya berdasarkan nombor ini. Ini memastikan bahawa setiap elemen muncul dalam kedudukan yang berbeza, tetapi lokasi sebenarnya ditentukan oleh nombor rawak yang dihasilkan. <p> <strong> kaedah alternatif </strong> </p> <p> Adalah disyorkan untuk menggunakan algoritma shuffle Fisher-Yates versi Durstenfeld, yang secara langsung bertukar elemen. Boleh dilaksanakan menggunakan sambungan seperti ini: </p> <p> <strong> Pengoptimuman Prestasi </strong> </p> <p> Untuk terus mengoptimumkan prestasi, unsur -unsur boleh dikembalikan dengan segera apabila mengalir, dengan itu mengurangkan kerja yang tidak perlu: (Kod ini sama seperti kod sebelumnya, diulang) </p> <pre class="brush:php;toolbar:false"><code class="language-csharp">public static IEnumerable<T> Shuffle<T>(this IEnumerable<T> source, Random rng) { T[] elements = source.ToArray(); for (int i = elements.Length - 1; i >= 0; i--) { int swapIndex = rng.Next(i + 1); yield return elements[swapIndex]; elements[swapIndex] = elements[i]; } }</code>

Penerangan penting

mesti menggunakan contoh rawak yang betul untuk mengelakkan menjana urutan digital yang sama beberapa kali dan menyimpan keselamatan benang.

Atas ialah kandungan terperinci Adakah `OrderBy (x => r.next ())` Cara pintar untuk mengosongkan senarai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn