StdRandom.java
是一个非常实用的 Java 类,它提供了多种生成伪随机数的方法,适用于不同的概率分布。下面是对 StdRandom
类的主要功能和用法的总结:
主要功能
-
设置和获取随机种子
setSeed(long s)
:设置随机数生成器的种子,确保每次运行程序时都能生成相同的随机数序列。getSeed()
:获取当前的随机数生成器种子。
-
生成均匀分布的随机数
uniform()
:返回一个在 [0, 1) 区间内的随机浮点数。uniform(int n)
:返回一个在 [0, n) 区间内的随机整数。uniform(long n)
:返回一个在 [0, n) 区间内的随机长整数。uniform(int a, int b)
:返回一个在 [a, b) 区间内的随机整数。uniform(double a, double b)
:返回一个在 [a, b) 区间内的随机浮点数。
-
生成伯努利分布的随机数
bernoulli()
:返回一个布尔值,以 50% 的概率为true
,50% 的概率为false
。bernoulli(double p)
:返回一个布尔值,以概率p
为true
,以概率1 - p
为false
。
-
生成高斯分布的随机数
gaussian()
:返回一个标准正态分布(均值为 0,标准差为 1)的随机浮点数。gaussian(double mu, double sigma)
:返回一个均值为mu
,标准差为sigma
的高斯分布的随机浮点数。
-
生成几何分布的随机数
geometric(double p)
:返回一个几何分布的随机整数,表示独立试验前第一次成功的次数。
-
生成泊松分布的随机数
poisson(double lambda)
:返回一个泊松分布的随机整数,均值为lambda
。
-
生成指数分布的随机数
exponential(double lambda)
:返回一个指数分布的随机浮点数,均值为1/lambda
。
-
洗牌算法
shuffle(double[] a)
:随机打乱数组a
中的元素。shuffle(int[] a)
:随机打乱数组a
中的元素。shuffle(Object[] a)
:随机打乱数组a
中的元素。shuffle(double[] a, int lo, int hi)
:随机打乱数组a
中从索引lo
到hi
之间的元素。shuffle(int[] a, int lo, int hi)
:随机打乱数组a
中从索引lo
到hi
之间的元素。shuffle(Object[] a, int lo, int hi)
:随机打乱数组a
中从索引lo
到hi
之间的元素。
示例用法
import algs4.util.StdRandom;
public class Main {
public static void main(String[] args) {
// 设置随机种子
StdRandom.setSeed(12345);
// 生成 [0, 1) 区间的随机浮点数
double randomDouble = StdRandom.uniform();
System.out.println("Random double: " + randomDouble);
// 生成 [0, 10) 区间的随机整数
int randomInt = StdRandom.uniform(10);
System.out.println("Random int: " + randomInt);
// 生成伯努利分布的随机布尔值
boolean randomBoolean = StdRandom.bernoulli(0.7);
System.out.println("Random boolean: " + randomBoolean);
// 生成高斯分布的随机浮点数
double gaussianValue = StdRandom.gaussian(5.0, 2.0);
System.out.println("Gaussian value: " + gaussianValue);
// 洗牌算法
double[] array = {1.0, 2.0, 3.0, 4.0, 5.0};
StdRandom.shuffle(array);
System.out.print("Shuffled array: ");
for (double value : array) {
System.out.print(value + " ");
}
}
}
总结
StdRandom
类提供了一套强大的工具,用于生成各种概率分布的随机数和洗牌操作。通过设置随机种子,可以确保结果的可重复性,这在测试和调试中非常有用。希望这些信息对您有所帮助!如果有任何具体问题或需要进一步的帮助,请随时告诉我。