【问题标题】:random numbers in javajava中的随机数
【发布时间】:2010-02-26 04:28:28
【问题描述】:

我创建了下表,使用 java 作为前端,mysql 作为后端。

mysql> select * from consumer9;
-------------             
4 rows in set (0.13 sec)



Service_ID          Service_Type                            consumer_feedback 

100                    computing                                          -1
35                     printer                                             0
73                    computing                                           -1
50                     data                                                1

我使用随机数的概念生成了这些值。 我想获得 Service_types(Printer,Computing,data) 在所有表中均匀分布的输出,其中反馈值 1 出现次数最多。

【问题讨论】:

  • 我仍然不明白这里的问题到底是什么。您是否在问如何生成适合特定分布模式的数据?
  • 您的数据库架构错误。每个消费者都不应该有自己的桌子。一个单独的consumers 表或带有来自services 的外键的东西或其他东西。另外:SELECT service_type, COUNT(*) FROM services WHERE (consumer_feedback == 1) GROUP BY service_type
  • 问题不是很清楚 - 你能解释一下最后一行吗?

标签: java mysql


【解决方案1】:

java.util.Random 类可以生成具有合理均匀分布的伪随机数。给定您服务类型的List

List<String> services = new ArrayList<String>(
    Arrays.asList("COMPUTER", "DATA", "PRINTER"));

很容易随机选择一个:

String s = services.get(rnd.nextInt(services.size()));

同样,可以选择反馈值列表中的一个:

List<String> feedbacks = new ArrayList<String>(
    Arrays.asList("1", "0", "-1"));
String s = feedbacks.get(rnd.nextInt(feedbacks.size()));

获得不同分布的一个简单权宜之计是“堆叠牌组”。例如,

Arrays.asList("1", "1", "1", "0", "0", "-1"));

会以 1/21/3 的概率产生 1、0 和 -1,和1/6,分别。您可以使用nextGaussian() 和合适的confidence interval 安排更精细的分区。

这种方法只能用于生成测试数据。

附录:The Apache Commons Math Guide 包括关于 Data Generation 的一章,提供有关其他概率分布的信息链接和文档。

【讨论】:

    猜你喜欢
    • 2011-05-22
    • 1970-01-01
    • 1970-01-01
    • 2016-04-15
    • 2015-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多