标签: random

从范围生成随机整数

我需要一个能在给定范围内生成随机整数的函数(包括边界值).我没有不合理的质量/随机性要求,我有四个要求:

  • 我需要快速.我的项目需要产生数百万(有时甚至数千万)的随机数,而我当前的发电机功能已被证明是一个瓶颈.
  • 我需要它合理均匀(使用rand()非常好).
  • min-max范围可以是<0,1>到<-32727,32727>.
  • 它必须是可播种的.

我目前有以下C++代码:

output = min + (rand() * (int)(max - min) / RAND_MAX)
Run Code Online (Sandbox Code Playgroud)

问题是,它并不是真正统一的 - 只有当rand()= RAND_MAX时才返回max(对于Visual C++,它是1/32727).这是小范围的主要问题,如<-1,1>,其中最后一个值几乎从不返回.

所以我抓住笔和纸,并提出了以下公式(它建立在(int)(n + 0.5)整数舍入技巧):

在此输入图像描述

但它仍然没有给我统一的分配.对于值-1,0,0,重复运行10000个样本给出37:50:13的比率.

你能建议更好的配方吗?(甚至整个伪随机数发生器功能)

c++ random

154
推荐指数
8
解决办法
26万
查看次数

在Rails中创建唯一令牌的最佳方法?

这就是我正在使用的.令牌不一定要被猜测,它更像是一个短网址标识符,而不是其他任何东西,我想保持简短.我已经按照我在网上找到的一些例子,如果发生碰撞,我认为下面的代码会重新创建令牌,但我不确定.不过,我很想看到更好的建议,因为边缘感觉有点粗糙.

def self.create_token
    random_number = SecureRandom.hex(3)
    "1X#{random_number}"

    while Tracker.find_by_token("1X#{random_number}") != nil
      random_number = SecureRandom.hex(3)
      "1X#{random_number}"
    end
    "1X#{random_number}"
  end
Run Code Online (Sandbox Code Playgroud)

我的令牌的数据库列是一个唯一的索引,我也在validates_uniqueness_of :token模型上使用,但因为这些是根据用户在应用程序中的操作自动批量创建的(他们下订单并购买令牌,基本上),它是让应用程序抛出错误是不可行的.

我猜,我也可以减少碰撞的几率,在最后添加另一个字符串,根据时间或类似的东西生成的东西,但我不希望令牌太长.

random guid ruby-on-rails ruby-on-rails-3

154
推荐指数
9
解决办法
11万
查看次数

需要可预测的随机发生器

我是一名网络游戏开发者,我遇到了随机数问题.假设玩家有20%的几率用他的剑获得重击.这意味着,5次点击中的1次应该是至关重要的.问题是我的现实生活成绩非常糟糕 - 有时候球员在5次安打中得到3次降落,有时15次命中都没有.战斗相当短(3-10次命中),因此获得良好的随机分布非常重要.

目前我使用PHP mt_rand(),但我们只是将代码移动到C++,所以我想在游戏的新引擎中解决这个问题.

我不知道解决方案是否是一些统一的随机生成器,或者可能记住以前的随机状态以强制正确分配.

c++ random algorithm

151
推荐指数
16
解决办法
2万
查看次数

从枚举中选择一个随机值?

如果我有这样的枚举:

public enum Letter {
    A,
    B,
    C,
    //...
}
Run Code Online (Sandbox Code Playgroud)

随机选择一个的最佳方法是什么?它不需要是生产质量的防弹,但相当均匀的分布将是不错的.

我可以做这样的事情

private Letter randomLetter() {
    int pick = new Random().nextInt(Letter.values().length);
    return Letter.values()[pick];
}
Run Code Online (Sandbox Code Playgroud)

但有更好的方法吗?我觉得这是以前已经解决的问题.

java random enums

149
推荐指数
10
解决办法
13万
查看次数

ActiveRecord中的随机记录

我需要通过ActiveRecord从表中获取随机记录.我从2006年开始跟随Jamis Buck的例子.

但是,我也通过Google搜索遇到了另一种方式(由于新的用户限制,无法使用链接进行归因):

 rand_id = rand(Model.count)
 rand_record = Model.first(:conditions => ["id >= ?", rand_id])
Run Code Online (Sandbox Code Playgroud)

我很好奇这里的其他人是如何做到的,或者是否有人知道哪种方式会更有效率.

random ruby-on-rails rails-activerecord

147
推荐指数
11
解决办法
8万
查看次数

Golang随机数生成器如何正确播种

我试图在Go中生成一个随机字符串,这是我到目前为止编写的代码:

package main

import (
    "bytes"
    "fmt"
    "math/rand"
    "time"
)

func main() {
    fmt.Println(randomString(10))
}

func randomString(l int) string {
    var result bytes.Buffer
    var temp string
    for i := 0; i < l; {
        if string(randInt(65, 90)) != temp {
            temp = string(randInt(65, 90))
            result.WriteString(temp)
            i++
        }
    }
    return result.String()
}

func randInt(min int, max int) int {
    rand.Seed(time.Now().UTC().UnixNano())
    return min + rand.Intn(max-min)
}
Run Code Online (Sandbox Code Playgroud)

我的实施很慢.播种使用time在一定时间内带来相同的随机数,因此循环一次又一次地迭代.我该如何改进我的代码?

random go

146
推荐指数
6
解决办法
11万
查看次数

为什么C++ rand()似乎只生成相同数量级的数字?

在用C/C++编写的小应用程序中,我遇到了一个问题 rand函数也许是种子:

我想生成一系列具有不同顺序的随机数,即具有不同的对数值(基数为2).但似乎所有产生的数字都是相同的顺序,波动在2 ^ 25到2 ^ 30之间.

是因为rand()用Unix时间播种,现在是一个相对较大的数字?我忘记了什么?我rand()只在一开始播种一次main().

c c++ random math

146
推荐指数
7
解决办法
9724
查看次数

从C#中的List <T>中选择N个随机元素

我需要一个快速算法从通用列表中选择5个随机元素.例如,我想从a获得5个随机元素List<string>.

c# random algorithm collections element

145
推荐指数
14
解决办法
11万
查看次数

如何从Python集中选择2个随机项?

我目前有一个n大小的Python集,其中n> = 0.是否有快速的1或2行Python解决方案来做到这一点?例如,该集合将如下所示:

fruits = set(['apple', 'orange', 'watermelon', 'grape'])
Run Code Online (Sandbox Code Playgroud)

目标是从上面选择2个随机项目,上述集合可能包含0个,1个或更多项目.我能想到的唯一方法是将集合转换为列表(可变),从中可以访问集合长度内的2个随机唯一索引.

python random

145
推荐指数
1
解决办法
12万
查看次数

2个双数之间的随机数

是否有可能在2个双打之间生成一个随机数?

例:

public double GetRandomeNumber(double minimum, double maximum)
{
    return Random.NextDouble(minimum, maximum) 
}
Run Code Online (Sandbox Code Playgroud)

然后我用以下内容称呼它:

double result = GetRandomNumber(1.23, 5.34);
Run Code Online (Sandbox Code Playgroud)

任何想法将不胜感激.

c# random

144
推荐指数
5
解决办法
18万
查看次数