Zufällige große Ganzzahlen in Java generieren
Frage:
Wie generiert man beliebig große Zufallszahlen? BigInteger-Werte im Bereich von 0 bis n (außer n), wobei n keine Potenz von 2 ist?
Antwort:
Verwendung des Konstruktors von BigInteger, was etwas dauert count und einer Instanz eines Zufallsgenerators können Sie solche Werte erstellen:
public BigInteger(int numBits, Random rnd)
Um jedoch Werte innerhalb des gewünschten Bereichs zu erhalten, ist es notwendig, eine Schleife zu verwenden:
BigInteger randomNumber; do { randomNumber = new BigInteger(upperLimit.bitLength(), randomSource); } while (randomNumber.compareTo(upperLimit) >= 0);
Im Durchschnitt wird diese Schleife in weniger als zwei Iterationen ausgeführt, wodurch eine gleichmäßige Verteilung gewährleistet wird.
Bearbeiten:
In Situationen, in denen der Zufallsgenerator leistungsintensiv ist, können Sie dies tun Implementieren Sie den folgenden Ansatz:
int nlen = upperLimit.bitLength(); BigInteger nm1 = upperLimit.subtract(BigInteger.ONE); BigInteger randomNumber, temp; do { temp = new BigInteger(nlen + 100, randomSource); randomNumber = temp.mod(upperLimit); } while (s.subtract(randomNumber).add(nm1).bitLength() >= nlen + 100);
Während diese Methode die Wahrscheinlichkeit mehrerer Schleifeniterationen deutlich reduziert (weniger als eine Chance von 2^100), nutzt sie die rechenintensive mod()-Operation. Daher ist dieser Ansatz möglicherweise weniger effizient als der vorherige, wenn die bereitgestellte Random-Instanz einen geringen Leistungsaufwand aufweist.
Das obige ist der detaillierte Inhalt vonWie generiert man in Java beliebig große zufällige BigIntegers in einem bestimmten Bereich?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!