相关疑难解决方法(0)

O(1)中的唯一(非重复)随机数?

我想生成0到1000之间永远不会重复的唯一随机数(即6不会出现两次),但这并不是像以前的值的O(N)搜索那样.这可能吗?

language-agnostic random algorithm math

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

如何在Ruby中生成n个唯一随机数的列表?

这是我到目前为止:

myArray.map!{ rand(max) }
Run Code Online (Sandbox Code Playgroud)

然而,显然,有时候列表中的数字并不是唯一的.如何确保我的列表只包含唯一的数字,而不必创建一个更大的列表,然后我从中选择n个唯一的数字?

编辑:
我真的很想看到这个完成w/o循环 - 如果可能的话.

ruby random

34
推荐指数
4
解决办法
3万
查看次数

智能方式生成唯一的随机数

我想生成一系列在00000001到99999999范围内的唯一随机数.

所以第一个可能是00001010,第二个可能是40002928等.

简单的方法是生成一个随机数并将其存储在数据库中,并且每次下次再次执行它并检查数据库中是否已存在该数字,如果存在,则生成一个新数据,再次检查等等.但是看起来不对,如果生成的项目数量很大,我可以重新生成一个数字,可能是100次.

有更聪明的方法吗?

编辑总是我忘记说为什么我想要这个,它可能会让事情更清楚,也许可以得到另一种选择,它是:我们想要为预订生成订单号,所以我们可以使用000001,000002等.但是我们不想让竞争对手知道创造了多少订单(因为它不是一个大批量的市场,我们不希望他们知道我们是在2个月后订购30还是订单100.所以我们想要一个随机的订单号(但却是唯一的)

c# random

27
推荐指数
4
解决办法
2万
查看次数

生成随机数的算法

我希望生成一个随机数并将其发布到数据库中的表中,以用于特定的user_id.问题是,相同的数字不能使用两次.有一百万种方法可以做到这一点,但我希望非常热衷于算法的人能够在一个优雅的解决方案中巧妙地解决问题,因为满足以下条件:

1)对数据库的查询量最少.2)在内存中进行数据结构爬行的次数最少.

基本上这个想法是做以下事情

1)创建0到9999999之间的随机数
2)检查数据库以查看数字是否存在
或者
2)查询数据库中的所有数字
3)查看返回的结果是否与数据库中的数据匹配
4)如果匹配,重复步骤1,如果没有,问题就解决了.

谢谢.

php mysql random algorithm pseudocode

8
推荐指数
3
解决办法
6017
查看次数

从有序列表创建随机有序列表

我有一个应用程序,它可以获得制造过程的质量结果,并创建图表既可以显示坏的Pareto图表,也可以显示生产吞吐量.

为了自动执行测试这些统计过程的任务,我希望确定地能够将记录添加到数据库中,并使质量技术转到某些图表并与已知的好图表进行比较.但是,我也想模拟结果,以便他们进入数据库,就好像用户正在运行测试过程一样.

我有一个想法是用i数字填充列表,j数字bad1,k数字2,等等.然后以某种方式在插入数据库之前随机排序列表.

所以,我的问题是,有一个标准的算法来获取一个排序的值列表并创建一个随机排序的列表?

algorithm

6
推荐指数
1
解决办法
5683
查看次数

公式选择位图中的每个像素而不重复

我正在寻找一种算法,我现在正在快速编程但是伪代码或任何类似的"C系列"语法都可以.

想象一下大量的值列表,例如位图中的像素.你想以视觉上随机的顺序挑选每一个,一次一个,并且永远不会选择相同的两个,并且最终总是挑选它们.

我之前在分形生成器中使用它,因此它不仅是逐行渲染,而是以随机方式慢慢构建,但很久以前,在Java小程序中,我不再拥有代码.

我不相信它使用任何伪随机数生成器,我喜欢它的主要原因是它没有使渲染时间比直线逐行方法花费更长的时间.我看到的任何改组算法都会使渲染需要更长的时间来处理这么多的值,除非我遗漏了一些东西.

编辑:我使用了洗牌阵列方法.当应用程序加载时我会洗牌一次,无论如何都不会花那么长时间.这是我的"经销商"课程的代码.

import Foundation
import Cocoa
import Quartz

class Dealer: NSObject
{
  //########################################################
  var deck = [(CGFloat,CGFloat)]()
  var count = 0
  //########################################################
  init(_ w:Int, _ h:Int)
  {
    super.init()
    deck.reserveCapacity((w*h)+1)
    for y in 0...h
    {
      for x in 0...w
      {
        deck.append((CGFloat(x),CGFloat(y)))
      }
    }
    self.shuffle()
  }
  //########################################################
  func shuffle()
  {
    var j:Int = 0
    let total:Int = deck.count-1
    for i:Int in 0...total
    {
      j = Int(arc4random_uniform(UInt32(total)))
      deck.swapAt(i, j)
    }
  }
  //########################################################
  func deal() -> (CGFloat,CGFloat)
  {
    let result = …
Run Code Online (Sandbox Code Playgroud)

sorting random algorithm array-formulas swift

5
推荐指数
1
解决办法
128
查看次数

寻找散列函数 /Ordered Int/ 到 /Shuffled Int/

我正在寻找可以将有序整数索引值更改为随机哈希索引的恒定时间算法。如果是可逆的就好了。我需要每个索引的哈希键都是唯一的。我知道这可以通过在大文件中查找表来完成。IE 创建一个所有整数的有序集合,然后将它们随机打乱并以随机顺序写入文件。然后,您可以在需要时将它们读回。但这需要查找一个大文件。我想知道是否有一种简单的方法可以使用伪随机生成器来根据需要创建序列?

生成使用PRNG,而不是洗牌洗牌范围答案erikkallen线性反馈移位寄存器貌似正确类的事情。我刚刚尝试过,但它会产生重复和漏洞。

问候大卫·艾伦·芬奇

c++ algorithm hash

4
推荐指数
1
解决办法
1302
查看次数

寻找一种算法以(伪)随机顺序吐出一系列数字

假设我有一系列数字:{n,n + 1,n + 2,... n + m}

如果不提前存储数字,我想创建一个函数f(),给定序列{1,2,3,... m}将以随机(或至少伪随机)顺序吐出原始集合.

例如假设我的序列是{10,11,12,13,14,15,16,17}

   f(1) could yield 14
   f(2) could yield 17
   f(3) could yield 13
   f(4) could yield 10
   f(5) could yield 16
   f(6) could yield 15
   f(7) could yield 11
   f(8) could yield 12

在过去的某个时刻,一位同事向我展示了一种能够做到这一点的数学算法,但是我已经忘记了除了存在之外几乎所有关于它的事情.我记得你必须事先得到序列,并从函数中使用的序列中生成一些常量.对于那些想知道的人,我遗憾地失去了与那位同事的联系.

这个问题的答案看起来很接近我想要的,但我不确定答案是否允许我提前将输出约束到特定序列.


编辑:

为了澄清一点,我不想存储原始序列或混洗序列.我想从原始序列生成函数f().

令人沮丧的是,我已经看到了这一点,我只是记不起来,谷歌再次找到它.

Fisher-Yates算法非常适合置换或改组卡座,但它不是我想要的.

language-agnostic algorithm math sequence

4
推荐指数
1
解决办法
821
查看次数

以伪随机顺序访问网格中的每个单元格而无需临时存储

假设您有一个NxN网格,并且您希望以伪随机顺序访问每个单元格一次.该顺序不必非常随机,但它必须是可播种的,以便可以对网格单元排序进行不同的排列.有没有办法做到这一点,而不是简单地生成所有单元格坐标的列表,随机置换它,并索引它?我的意思是,我想要一个公式(或者更确切地说,构建这样一个公式的一般方法),它可以将索引(i,j)转换(i',j')为一对一,完全覆盖的方式.

后续(实际意图)问题:对于NxN网格可以做同样的事情,我们只想访问那些i>j(下三角形)的元素吗?

algorithm

4
推荐指数
1
解决办法
362
查看次数

填充间隔的随机数生成器

如何实现一个随机数生成器,给定一个间隔,(随机)生成该间隔中的所有数字,而不重复?

它应该消耗尽可能少的时间和内存.

刚刚发明的C#-ruby-ish伪代码中的示例:

interval = new Interval(0,9)
rg = new RandomGenerator(interval);
count = interval.Count // equals 10
count.times.do{
    print rg.GetNext() + " "
}
Run Code Online (Sandbox Code Playgroud)

这应该输出如下:

1 4 3 2 7 5 0 9 8 6 
Run Code Online (Sandbox Code Playgroud)

language-agnostic random algorithm

4
推荐指数
1
解决办法
6101
查看次数

随机生成独特的颜色?

我正在使用可绘制彩色线条的图形包(255,255,255).基本上我正在做的是(Random.Next(0,255),Random.Next(0,255),Random.Next(0,255))每次添加一行时生成一个颜色.

这一切都很好,但有时,我得到的颜色看起来非常相似,这使得用户很难辨别哪些数据对应哪一行.

是否有更聪明的方法来生成(255,255,255)格式的随机和独特颜色?

c#

4
推荐指数
2
解决办法
2709
查看次数

生成小范围的不同随机数?

我正在尝试生成一小段(约20个)不同/唯一的随机数.

这就是我现在拥有的:

unique_random.h:

#ifndef UNIQUE_RANDOM_H
#define UNIQUE_RANDOM_H

// generates a pseudo-random number in [min, max]
int random_number (unsigned int min, unsigned int max) {
    static bool seed_initialized = false;

    if (!seed_initialized) {
        seed_initialized = true;
        srand((unsigned int) time(NULL));
    }

    return rand() % (max - min + 1) + min; 
} 

// generates a random number different from the previously generated
int random_number_without_these (int min, int max, std::set<int>& generated) {
    int res = random_number (min, max);

    // if res one …
Run Code Online (Sandbox Code Playgroud)

c++ algorithm

1
推荐指数
1
解决办法
494
查看次数

获得10000多个独特的随机数(性能)

可能重复:
创建无重复的随机数序列

我想写一个只使用数字作为短字符串的URL缩短器.

我不想数数,我希望下一个新数字是随机的(或伪随机).

首先,思想算法看起来像这样(伪代码):

do 
{
 number = random(0,10000)
}
while (datastore.contains(number))

datastore.store(number, url)
Run Code Online (Sandbox Code Playgroud)

此实现的问题是:由于数据存储区包含更多数字,因此循环将多次执行的可能性越大.性能会随着时间的推移而降低.

是否有更好的方法来获取尚未使用的随机数?

random algorithm performance

0
推荐指数
1
解决办法
553
查看次数