【发布时间】:2017-01-21 01:37:02
【问题描述】:
在我正在工作的项目中,我需要生成 n 个随机的 double 数字(取决于输入文件的内容)或将它们转换为 doubles(如果我有输入)文件。这些数字在逗号后应该只有 2 位小数(例如:0.98)。
我知道在 Java 8 中,有两种方法可以做到这一点:
- Java 8 方式:
nthNumber = Double.parseDouble(new DecimalFormat("#.##").format(ThreadLocalRandom.current().nextDouble(0,1)).replace(",",".")); - 旧时尚方式:
nthNumber = Double.parseDouble(new DecimalFormat("#.##").format(new Random().nextDouble()).replace(",", "."));
渐近地说,哪个最快?根据我对 A.D.S. 的了解,我会说会是同一时间 (O(n)?) 但我不是 100% 确定
除了这两种方法之外,还有其他方法可以在0 和1 之间生成随机doubles,这些方法渐近地说比我的建议更快吗? (相反,有没有方法可以在O(n) 或O(1) 中完成所有操作?)
提前感谢所有愿意花一分钟时间回答我这个问题的人
【问题讨论】:
-
Math.random()怎么样 -
是否比 Random().nextDouble() 或 ThreadLocalRandom.current.nextDouble() 快?
-
你不会比 O(n) 更好
-
实际函数调用的持续时间与算法复杂度无关。如果此代码将在多个线程上并发执行,则只需使用
ThreadLocalRandom。 -
@Groo 从我对 ADS 的真正糟糕研究中,我记得函数的复杂性是由各种函数的渐近成本的乘积给出的,这就是我谈论算法复杂性的原因(但我肯定是错的)