代码之家  ›  专栏  ›  技术社区  ›  Sanjeev Kumar Dangi

是否有效的随机生成算法?

  •  3
  • Sanjeev Kumar Dangi  · 技术社区  · 15 年前
    long timeValue = timeInMillis();
    int rand = timeValue%100 + 1;
    

    如果我们在一个循环中执行上述代码n次,它将生成n个介于1到100之间的随机数。我知道生成随机的NOS是一个难题。只是想知道这是一个好的随机数生成算法吗?还是伪随机数发生器?

    为什么我认为这将产生对随机行为的良好估计? 1)1~100号均为均匀分布。没有偏见。 2)timeinmillis将显示一些随机行为,因为我们无法真正猜测CPU将在什么时候执行该函数。在CPU中运行着很多不同的任务。因此,在循环的下一次迭代中,TimeInMillis()指令的确切执行时间是不可预测的。

    2 回复  |  直到 15 年前
        1
  •  5
  •   winwaed    15 年前

    不。首先,在大多数处理器上,这将在1毫秒内循环多次(可能是完整的100次),从而产生100个相同的数字。

    即使在随机数生成器中植入计时器刻度也很危险-计时器刻度很少像您预期的那样“随机”。

        2
  •  1
  •   EKanadily    15 年前

    我建议生成随机数:

    1-选择尽可能远离您所在位置的网站。例如,如果您在美国,请尝试一些在马拉西亚、中国、俄罗斯、印度等地拥有服务器IP的网站。流量大的服务器更好。

    2-在您的国家互联网流量高的时候(在我的国家,大约是晚上7点到11点),多次对这些网站执行ping操作,获取每个ping结果(仅使用整数值),并计算其模数2(即,从每个ping操作中,您得到一个位:0或1)。

    3-重复该过程几天,记录结果。

    4-收集你从所有Ping中得到的所有比特(可能你会得到数十万比特),然后从中选择你的比特。(也许您想使用上面提到的相同方法中的一些数据来选择您的位。)

    小心:在您的代码中,您应该检查超时等等。

    推荐文章