Rumah >pembangunan bahagian belakang >C++ >Adakah menggunakan `orderby` dengan` rawak` cara yang efisien untuk shuffle senarai?
Apakah kecekapan menggunakan
dan untuk menyenaraikan senarai? Random
OrderBy
Artikel ini meneroka kecekapan menggunakan kaedah dan
Random
Prinsip kerja kod OrderBy
<code class="language-csharp">var r = new Random(); var shuffled = ordered.OrderBy(x => r.Next());</code>Kod ini menggunakan
kelas untuk menjana nombor rawak. Untuk setiap elemen dalam senarai, kaedah menggunakan ekspresi lambda untuk memperuntukkan nombor rawak untuknya. Kemudian, senarai itu disusun mengikut nombor rawak ini untuk mencapai kesan shuffling.
Apakah kecekapan algoritma shuffle ini? Random
ordered
Walaupun kod ini dapat mencapai tujuan mengocok, kecekapannya bermasalah. OrderBy
Lapisan bawah kaedah menggunakan algoritma penyortiran O (N log n), yang terlalu rumit untuk tugas perombakan, kerana perombakan hanya memerlukan kerumitan masa O (n). x => r.Next()
Algoritma shuffle yang lebih berkesan adalah algoritma shuffle Fisher-Yates. Untuk kemudahan dan kejelasan, anda boleh membuat kaedah pengembangan
menggunakan algoritma Fisher-Yates.
OrderBy
algoritma shuffle Fisher-Yates melalui senarai lelaran, bertukar elemen dengan unsur-unsur terpilih rawak untuk mencapai shuffling. Berikut adalah kaedah pengembangan mudah (pemeriksaan tanpa had):
Menggunakan algoritma Fisher-Yates boleh mengelakkan pengiraan overhead yang dibawa oleh sambil mengekalkan fungsi shuffling.
Atas ialah kandungan terperinci Adakah menggunakan `orderby` dengan` rawak` cara yang efisien untuk shuffle senarai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!