Tag: 随机

用于泊松和均匀分布的Java生成器?

据我所知,标准发生器用于正态分布。 我必须根据正态,均匀和泊松分布生成随机数,但我似乎找不到最后2个的类。 我必须在0 – 999999范围内生成它们。

生成概率分布

给定一个大小为n的数组我想为每个索引生成随机概率,使得Sigma(a[0]..a[n-1])=1 一个可能的结果可能是: 0 1 2 3 4 0.15 0.2 0.18 0.22 0.25 另一个完全合法的结果可能是: 0 1 2 3 4 0.01 0.01 0.96 0.01 0.01 如何轻松快速地生成这些内容? 任何语言的答案都很好,Java首选。

Java的Random函数的反函数

Java的Random函数接受一个种子并产生一系列’伪随机’数字。 (它是基于Donald Knuth, The Art of Computer Programming, Volume 3, Section 3.2.1.)讨论的一些算法实现的Donald Knuth, The Art of Computer Programming, Volume 3, Section 3.2.1.)但是这篇文章对我来说太技术了解了) 它有反函数吗? 也就是说,给定一系列数字,是否有可能在数学上确定种子将是什么? (,这意味着,暴力强制不算作有效方法) [编辑]这里似乎有很多评论……我想我会澄清我在寻找什么。 因此,例如,函数y = f(x) = 3x具有反函数,其是y = g(x) = x/3 。 但函数z = f(x, y) = x * y没有反函数,因为(我可以在这里给出一个完整的数学certificate,但我不想偏离我的主要问题),直观地说,那里不止一对(x, y)使得(x * y) == z 。 现在回到我的问题,如果你说这个function不可逆,请解释原因。 (我希望从那些真正阅读过文章并理解它的人那里得到答案。像“这是不可能的”这样的答案并没有真正起作用)

Java如何生成随机数?

我知道你可以在Java中使用Math.random()来生成从0.0到1.0的随机双精度,但是计算机如何选择一个数字? 计算机跟随模拟随机性的代码是什么?

Java中有效的二项式随机数生成器代码

相关问题是: 生成泊松和二项式随机数的算法? 我只是对二项式随机数进行描述: 例如,考虑二项式随机数。 二项式随机数是硬币N次投掷中的头数,其中任意一次投掷的头部概率为p。 如果在区间(0,1)上生成N个均匀随机数并计算小于p的数,则计数是具有参数N和p的二项式随机数。 算法中有一个简单的解决方案来生成泊松和二项式随机数? 通过使用迭代: public static int getBinomial(int n, double p) { int x = 0; for(int i = 0; i < n; i++) { if(Math.random() < p) x++; } return x; } 但是,我追求二项式随机数生成器的目的只是为了避免低效的循环(i从0到n)。 我的n可能非常大。 p通常很小。 我的案例的玩具示例可以是:n = 1 * 10 ^ 6,p = 1 * 10 ^( – 7)。 n的范围可以是1 […]

关于不可变集和映射的JDK9随机化

阅读这个问题和Eugene给出的答案 ,我发现JDK9不可变集和映射将引入一个会影响其遍历的随机源。 这意味着迭代顺序确实是随机的,至少在JVM的不同运行中。 由于规范不保证集合和映射的任何遍历/迭代顺序,这绝对没问题。 实际上,代码绝不能依赖于特定于实现的细节,而是依赖于规范。 我知道今天,使用JDK 8,如果我有一个HashSet并执行此操作(取自链接的答案): Set wordSet = new HashSet(Arrays.asList(“just”, “a”, “test”)); System.out.println(wordSet); for (int i = 0; i < 100; i++) { wordSet.add("" + i); } for (int i = 0; i < 100; i++) { wordSet.remove("" + i); } System.out.println(wordSet); 然后元素的迭代顺序将改变,两个输出将不同。 这是因为向集合中添加和删除100个元素会更改HashSet的内部容量并重新生成元素。 这是完全有效的行为。 我这里不是在问这个问题。 但是,使用JDK9,如果我这样做: Set set = Set.of(“just”, “a”, “test”); […]

从Java中的Map中选择随机键和值集

我想从Map获取随机密钥及其各自的值。 这个想法是随机生成器会选择一个键并显示该值。 棘手的部分是键和值都是字符串,例如myMap.put(“Geddy”, “Lee”) 。

如何在一个加起来定义总数的数组中生成随机数?

我需要在Java中随机生成一个包含7个插槽的数组。 所有这些插槽的值必须至少为1,但组合后,其总值应为另一个定义的数字。 它们也都需要是一个int值,没有1.5或0.9816465684646数字。 例: int a=10; int[] ar = new int[7] ar[0] = 1 ar[1] = 1 ar[2] = 2 ar[3] = 2 ar[4] = 1 ar[5] = 2 ar[6] = 1 我希望它生成类似的东西,但如果int a = 15,所有数字将以任何顺序总共15

在ThreadLocalRandom上随机

java.util.Random的实例是线程安全的。 但是,跨线程并发使用相同的java.util.Random实例可能会遇到争用,从而导致性能不佳。 请考虑在multithreading设计中使用ThreadLocalRandom。 什么样的争用,从而表现不佳? 有人可以,在这里解释一下吗? 我不知道Random和ThreadLocalRandom里面的算法是什么让它们与众不同。

使用类似种子时,为什么初始随机数相似?

我发现了使用Java的Random类生成随机数的奇怪之处。 基本上,如果使用近似种子(例如1到1000之间)创建多个Random对象,则每个生成器生成的第一个值几乎相同,但下一个值看起来很好(我没有进一步搜索)。 以下是两个第一个生成的双打,种子从0到9: 0 0.730967787376657 0.24053641567148587 1 0.7308781907032909 0.41008081149220166 2 0.7311469360199058 0.9014476240300544 3 0.731057369148862 0.07099203475193139 4 0.7306094602878371 0.9187140138555101 5 0.730519863614471 0.08825840967622589 6 0.7307886238322471 0.5796252073129174 7 0.7306990420600421 0.7491696031336331 8 0.7302511331990172 0.5968915822372118 9 0.7301615514268123 0.7664359929590888 从991到1000: 991 0.7142160704801332 0.9453385235522973 992 0.7109015598097105 0.21848118381994108 993 0.7108119780375055 0.38802559454181795 994 0.7110807233541204 0.8793923921785096 995 0.7109911564830766 0.048936787999225295 996 0.7105432327208906 0.896658767102804 997 0.7104536509486856 0.0662031629235198 […]