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
Lepaskan: 2025-01-31 19:01:08
asal
628 orang telah melayarinya

<.> 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> <div class=

var r = new Random();
var shuffled = ordered.OrderBy(x => r.Next());
Salin selepas log masuk

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. <原> Prinsip kerja

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.

<替> kaedah alternatif

Adalah disyorkan untuk menggunakan algoritma shuffle Fisher-Yates versi Durstenfeld, yang secara langsung bertukar elemen. Boleh dilaksanakan menggunakan sambungan seperti ini:

<能> Pengoptimuman Prestasi

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)

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];
    }
}
Salin selepas log masuk

<说> 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 Laman Web ini
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
Cadangan popular
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan