Menyediakan Benih Tersuai untuk Penjana Nombor Rawak JavaScript
Fungsi JavaScript Math.random() lalai menjana nilai rawak dalam julat [0 , 1], tetapi ia tidak membenarkan anda menetapkan benih tersuai. Akibatnya, urutan nombor rawak yang dijana tidak boleh diulang.
Untuk mencipta penjana nombor rawak JavaScript dengan benih yang boleh disesuaikan, kita boleh meneroka berbilang pilihan:
Math.random( ) Fungsi Pembantu:
Jika anda tidak memerlukan pembenihan tersuai, anda boleh menggunakan Math.random() dengan fungsi pembantu untuk mencipta julat nilai yang boleh diulang (cth., randRange(mula, tamat)) .
Penjana Nombor Pseudorandom (PRNG):
Untuk lebih kawalan ke atas rawak, pertimbangkan untuk menggunakan PRNG seperti Mersenne Twister. Walau bagaimanapun, pelaksanaannya adalah kompleks. Alternatifnya ialah Penjana Kongruen Linear (LCG), yang lebih mudah untuk dilaksanakan dan menyediakan rawak yang baik.
Pelaksanaan LCG (RNG Boleh Benih Pendek):
Di bawah adalah contoh pelaksanaan RNG boleh benih pendek menggunakan LCG:
<code class="js">function RNG(seed) { this.m = 0x80000000; // 2**31; this.a = 1103515245; this.c = 12345; this.state = seed ? seed : Math.floor(Math.random() * (this.m - 1)); } RNG.prototype.nextInt = function() { this.state = (this.a * this.state + this.c) % this.m; return this.state; }; RNG.prototype.nextFloat = function() { // returns in range [0,1] return this.nextInt() / (this.m - 1); }; RNG.prototype.nextRange = function(start, end) { // returns in range [start, end): including start, excluding end // can't modulu nextInt because of weak randomness in lower bits var rangeSize = end - start; var randomUnder1 = this.nextInt() / this.m; return start + Math.floor(randomUnder1 * rangeSize); }; RNG.prototype.choice = function(array) { return array[this.nextRange(0, array.length)]; };</code>
Untuk menggunakan RNG:
<code class="js">var rng = new RNG(20); for (var i = 0; i < 10; i++) console.log(rng.nextRange(10, 50)); var digits = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']; for (var i = 0; i < 10; i++) console.log(rng.choice(digits));</code>
Atas ialah kandungan terperinci Bagaimanakah saya boleh mencipta urutan nombor rawak yang boleh berulang dalam JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!