【问题标题】:Seed based randomization perl基于种子的随机化 perl
【发布时间】:2015-06-05 04:15:00
【问题描述】:

我定义了一个数组,比如@Array(1..31)。现在我有一个代码,我在其中随机选择一个数字一定次数并将结果存储在另一个数组中。下面的例子:

$a1 = $Array[rand(@Array)];
push (@a2, $a1);

现在,当我多次执行此脚本时,我发现新数组每次都包含非常不同的模式。但我不希望这样,我想在每次出现种子时都生成一个类似的模式。

有人可以帮我看看如何合并种子以从数组中随机选择可预测的元素。?

【问题讨论】:

  • 使用srand
  • 我尝试了 srand,但它给出了一个错误:深度递归例程
  • Edit 你的问题显示你使用的代码和你得到的错误。
  • 我去掉了递归子程序的调用,但现在只要我调用子程序创建一个随机数,它只会不断地从数组中选择一个数字。
  • edit 您的问题显示您认为不起作用的代码。此外,rand 可以多次返回相同的值;你想要List::Util::shuffle

标签: perl random seed


【解决方案1】:

你不要用srand替换rand:你使用srand来初始化rand的种子:所以调用srand(0)一次,然后像以前一样使用rand

根据您的评论,您可以使用:

srand(0);
sub random {
    my $random_select = $_[rand(@_)];
    print " The random number selected is $random_select\n";
    return $random_select;
}

或者回到您的原始代码,只需将第一行添加到其中:

BEGIN { srand(0) }
$a1 = $Array[rand(@Array)];
push (@a2, $a1);

【讨论】:

    猜你喜欢
    • 2018-08-25
    • 1970-01-01
    • 2022-01-06
    • 2018-05-30
    • 2011-09-27
    • 2022-08-03
    • 2019-07-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多