【问题标题】:Calculating the occurrence of a random number计算随机数的出现
【发布时间】:2014-06-19 20:01:49
【问题描述】:

我想计算一个随机数的出现。我会从 1 到 1,000,000,000 中随机挑选 1,000,000 个数字。

例如:当我输入 1000 时,它会显示在这 1,000,000 个数字中 1000 出现了多少次。

下面是我写的代码,不知道为什么总是输出0。你能帮我修一下代码吗?

我制作了一个哈希表并将链表放入其中以避免异常,因为 1,000,000,000 时程序内存不足。

public static void main(String[] args) {

    Hashtable<Integer,LinkedList<Integer>> map
            = new Hashtable<Integer,LinkedList<Integer>>();

    int index;
    int b;
    int x;

    for (b=0; b<1000000; b++){
        x = (int) (Math.random()*1000000000)+1;
        index = x % 10000;

        if(map.get(index) == null){
            map.put(index, new LinkedList<Integer>());
            map.get(index).add(x);
        }else{
            map.get(index).add(x);
        }
    }

【问题讨论】:

  • 很有可能(>999/1000,有更好的统计数据的人可以计算出来)您选择的数字被随机选择了 0 次。
  • @KevinL 是对的,这也只是制作哈希表。你不返回任何东西或打印你的结果......
  • 尝试使用较小的数字,例如从 1 到 10 的 100 个随机数中,5 有多少?然后您可以将其扩展到更大的数字。
  • 我试过循环1到100000,但都返回0。我没有显示输出方法
  • 您正在检查 10000 而不是 1000 。向我们展示您的输出效果。

标签: java algorithm hashtable


【解决方案1】:

您的代码可能运行良好。这就是原因。

使用您的描述进行统计

1,000,000 个随机数字,从 1 到 1,000,000,000
1000 发生了多少次

在 1 到 1,000,000,000 之间选择一个随机数成为像 1,000 这样的特定数字的几率是:

      1
------------- = 0.000 000 001 (very close to zero)
1,000,000,000

如果你做 1,000,000 次,机会是:

0.000 000 001 * 1,000,000 = 0.001 (still pretty close to zero)

要达到 1,您必须再次乘以 1,000。

这意味着,根据您的描述编写一个程序,您必须运行它一千次​​trong>,以确保您会看到特定的数字 1,000 出现 至少一次

使用您的代码 sn-p 进行统计

您的实际代码 sn-p 似乎与您的描述不符。所以让我们分开来看。

for (b=0; b<1000000; b++){
    x = (int) (Math.random()*1000000000)+1;
    index = x % 10000;

% 符号是模数,当一个数 x 可以被 10,000 完全整除时,它给出 0(注意:不是 1,000)。目前尚不清楚在将其用作索引后您在使用此模值做什么,但我假设在循环完成后,您将获得 index = 0 的计数。

假设是这种情况,从 1 到 1,000,000,000 符合x % 10000 = 0 条件的数字是:

10000, 20000, 30000, .... 999990000, 1000000000

这样的数字有 100,000 个。将其中任何一个作为随机数一次获得的几率是:

   100,000
------------- = 0.0001 (pretty close to zero)
1,000,000,000

由于您重复了 1,000,000 次,因此获得x % 10000 = 0 的几率为:

0.0001 * 1,000,000 = 100 (very very good!)

这意味着,如果您执行map.get(0).size(),您应该会得到大约 100 的值。

现实检查

我给了它一个test run on Ideone。事实上,我在几次运行中得到了以下结果。我还插入了map.get(1000) 只是为了它。

For map.get(0),    size is 92
For map.get(1000), size is 106

For map.get(0),    size is 113
For map.get(1000), size is 92

For map.get(0),    size is 104
For map.get(1000), size is 86

For map.get(0),    size is 111
For map.get(1000), size is 103

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-22
    • 1970-01-01
    • 2021-07-02
    • 1970-01-01
    • 2020-03-05
    • 1970-01-01
    • 1970-01-01
    • 2019-03-18
    相关资源
    最近更新 更多