【发布时间】:2015-05-29 14:45:01
【问题描述】:
我有一个大约 10 000 个元素的布尔数组。我想以相当低的概率(cca 0,1-0,01)更改元素的值,同时知道更改元素的索引。想到的代码是这样的:
int count = 10000;
Random r = new Random();
for (int i = 0; i < count; i++) {
double x = r.nextDouble();
if (x < rate) {
field[i]=!field[i];
do something with the index...
}
}
但是,由于我在更大的循环中执行此操作(不可避免地),这很慢。我能想到的唯一另一种可能性是使用分位数函数(高斯数学),但是我还没有找到任何可以免费使用的代码或库来使用。你有什么好主意如何解决这个问题,或者任何可以使用的库(最好是标准)?
【问题讨论】:
-
您能提供更多代码吗?什么是固定和基因型?
-
对不起,那是错误的。已更正
-
您可以简单地创建 (0.1 * 10000) 随机整数,其值介于 0 和 9999 之间:然后这些将完全成为您正在寻找的索引(并切换基于这些索引的布尔值将是微不足道且有效的)。
-
我不知道整数是否比生成双精度数更快。好吧,如果是的话,那么使用它们可能会很好,但是我更愿意只获得一个随机数,代表布尔值的数量以对应于给定的百分比进行更改,这样如果百分比为 50%(说明性)而不是 0.005% 而不是 50%)我最常得到 5000。或者一些类似的算法或函数。
-
Marco:是的,问题是,这不是概率的运作方式,有可能不会改变任何一个,以及是否有可能所有人都会改变(好吧,即使忽略这些极端且并非完全可取的情况,应该在数量上有所偏差)
标签: java arrays random boolean