Bagaimanakah Kita Boleh Memilih Item Susunan Rawak Dengan Cekap Tanpa Pengulangan?

Barbara Streisand
Lepaskan: 2024-10-31 10:41:40
asal
168 orang telah melayarinya

How Can We Efficiently Select Random Array Items Without Repetition?

Pemilihan Rawak Yang Cekap Item Tatasusunan Tanpa Pengulangan

Dalam artikel ini, kami meneroka isu yang dihadapi oleh pengguna yang mencari kaedah yang cekap untuk memilih secara rawak item daripada tatasusunan tanpa pengulangan. Kod yang disediakan secara berkesan memilih item tetapi memperkenalkan kemungkinan gelung tak terhingga disebabkan oleh penggunaan fungsi rekursif.

Fungsi Rekursif?

Fungsi chooseName() boleh dianggap rekursif kerana ia merujuk kepada dirinya sendiri dalam definisinya. Syarat penamatan ialah penemuan item unik, di mana unik ditetapkan kepada palsu, memecahkan gelung dan memulakan panggilan fungsi semula.

Meningkatkan Kecekapan

Untuk meningkatkan kecekapan, kami mempertimbangkan pendekatan alternatif yang dicadangkan oleh pengulas @YuriyGalanter. Daripada bergantung pada fungsi rekursif, kita boleh memilih item secara rawak daripada tatasusunan dan menyimpannya dalam tatasusunan sementara. Setelah semua item dipilih, kami menetapkan semula tatasusunan sementara dan meneruskan proses pemilihan rawak.

Pelaksanaan

Pelaksanaan di bawah menggabungkan pendekatan ini:

<code class="javascript">function randomNoRepeats(array) {
  var copy = array.slice(0);
  return function() {
    if (copy.length < 1) { copy = array.slice(0); }
    var index = Math.floor(Math.random() * copy.length);
    var item = copy[index];
    copy.splice(index, 1);
    return item;
  };
}

var chooser = randomNoRepeats(['Foo', 'Bar', 'Gah']);
chooser(); // => "Bar"
chooser(); // => "Foo"
chooser(); // => "Gah"
chooser(); // => "Foo" -- only repeats once all items are exhausted.</code>
Salin selepas log masuk

Dengan menggunakan fungsi ini, item boleh dipilih secara rawak tanpa potensi untuk gelung tak terhingga sambil mengelakkan isu pengulangan.

Atas ialah kandungan terperinci Bagaimanakah Kita Boleh Memilih Item Susunan Rawak Dengan Cekap Tanpa Pengulangan?. 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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!