Wygeneruj losową liczbę binarną ze zmienną proporcją bitów „1”
Potrzebuję funkcji do generowania losowych liczb całkowitych. (załóżmy, że Javalong
wpisz teraz, ale zostanie to rozszerzone naBigInteger
lubBitSet
później.)
Najtrudniejszą częścią jest parametr P, który określa (niezależne) prawdopodobieństwo dowolnego bitu, w wyniku czego wynosi 1.
Jeśli P = 0,5, możemy użyć standardowego generatora liczb losowych. Niektóre inne wartości P są również łatwe do wdrożenia. Oto niekompletny przykład:
Random random = new Random();
// ...
long nextLong(float p) {
if (p == 0.0f) return 0L;
else if (p == 1.0f) return -1L;
else if (p == 0.5f) return random.nextLong();
else if (p == 0.25f) return nextLong(0.5f) & nextLong(0.5f);
else if (p == 0.75f) return nextLong(0.5f) | nextLong(0.5f);
else if (p == 0.375f) return nextLong(0.5f) & nextLong(0.75f); // etc
else {
// What goes here??
String message = String.format("P=%f not implemented yet!", p);
throw new IllegalArgumentException(message);
}
}
Czy istnieje sposób na uogólnienie tego dla dowolnej wartości P między 0,0 a 1,0?