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

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

Mary-Kate Olsen
Lepaskan: 2025-01-31 19:06:10
asal
760 orang telah melayarinya

Is `OrderBy(x => r.next ()) `Cara yang berkesan untuk mengosongkan senarai?

menggunakan OrderBy(x => r.Next()) untuk senarai shuffling: berkesan atau tidak?

Beberapa pengaturcara menggunakan OrderBy(x => r.Next()) untuk mengosongkan senarai, tetapi adakah ini pendekatan terbaik? Mari kita periksa mekanik dan kecekapannya.

Bagaimana ia berfungsi

Kaedah ini memberikan nombor rawak kepada setiap item dalam senarai dan kemudian menyusun senarai berdasarkan nombor rawak ini. Ini berkesan mengemukakan semula senarai secara rawak.

Isu Prestasi

Kelemahan utama adalah prestasi. Kaedah OrderBy mempunyai kerumitan masa O (n log n), menjadikannya lebih perlahan daripada algoritma o (n) yang lain untuk senarai yang lebih besar.

Penyelesaian yang lebih baik: The Fisher-Yates Shuffle

Alternatif yang jauh lebih efisien ialah Shuffle Fisher-Yates (khususnya, varian Durstenfeld), yang menggunakan algoritma swap. Contoh ini menunjukkan kaedah Shuffle yang boleh diguna semula menggunakan pendekatan ini:

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

versi yang lebih baik ini menghasilkan unsur -unsur kerana ia mengepam, mengoptimumkan penggunaan memori dan pemprosesan.

Nota penting pada Random

ingat perkara ini ketika bekerja dengan kelas Random:

  • Membuat pelbagai Random contoh berturut -turut boleh membawa kepada urutan nombor rawak yang sama.
  • Kelas Random bukan thread-safe.

rujuk artikel yang dipautkan untuk amalan terbaik menggunakan kelas Random untuk mengelakkan perangkap ini.

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

sumber:php.cn
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan