Bir diziden daha büyük sayıları rastgele getiren algoritma
Aug 19 2020
Genel olarak küçük listeler için araştırma yaptım ve algoritmayı buldum. Bazı dizilerim var:
arr = [1,2,3,4 .... , 96,97,98,99,100];
arr2 = [105, 110, 165, 170];
arr3 = [1,2,7,8,9];
Bu dizileri bir işleve göndermek ve bu diziden rastgele sayılar elde etmek istiyorum, ancak her seferinde daha büyük sayılar alma olasılığının daha yüksek olmasını istiyorum.
Örneğin 1. dizide 96 olasılığı 4'ten fazla olmalı, ancak 97 olasılığı 96'dan fazla olmalıdır.
Elemanların rastgele ağırlıklı dağılımı nasıl oluşturulur
Genellikle çözümler bu konudaki gibidir. Ancak bu, dizilerimde performans sorunlarına neden olabilir.
Bunu nasıl başarabilirim?
Yanıtlar
2 NinaScholz Aug 19 2020 at 15:29
Olasılıkları hesaplayabilir ve değeri seçebilirsiniz.
Özel bir dizi ile kullanmak için random
getRandomValue = random(sortedArray),
ve daha sonra bir döngüde
let value = getRandomValue();
const
random = sortedValues => {
let length = sortedValues.length,
sum = length * (length + 1) / 2;
return () => {
let r = Math.random();
return sortedValues.find((_, i) => (r -= (i + 1) / sum) <= 0);
};
},
getRandomValue = random([6, 7, 8, 9, 10]),
counts = {};
for (let i = 0; i < 1e6; i++) {
let value = getRandomValue();
counts[value] = (counts[value] || 0) + 1;
}
console.log(counts);
.as-console-wrapper { max-height: 100% !important; top: 0; }
Donovan, Şarkılarından 1'ini The Beatles'ın "Lucy in the Sky with Diamonds" şarkısıyla karşılaştırdı
Gene Simmons, KISS Çizgi Romanlarının Potansiyel Olarak "İnsanlığı Yeniden Yaratabileceğini" Söyledi
Tom Girardi Dolandırıcılık Suçlamalarından Yargılanma Yetkisinin Belirlenmesi İçin Duruşmaya Katıldı
Kevin Jonas'ın Kızı Alena, Doğum Günü Fotoğrafında Büyümüş Görünüyor: '9 Yaşında Gerçek Hissetmiyor'