为给定的间隔生成唯一的“随机”int值

时间:2013-11-06 18:34:39

标签: c++ arrays random

我需要生成将用作数组索引的'random'int值,因此它们需要在给定的时间间隔内是唯一的。

LFSR似乎非常适合这项任务,但有一个问题:数组大小应该大小为2 ^ n(在某些情况下,它会强制分配比所需数据更多的内存(例如,数据大小2100 - 数组大小4096) ))或跳过生成的数字直到找到正确的值(浪费LFSR功能,在某些情况下,索引的生成时间可能会很明显)。

我试图创建一些公式来计算数组索引,但我失败了,特别是对于小(<120)数组大小。

这个问题的解决方案是否有最优解(在资源和计算时间方面)?

提前感谢您的回答!

1 个答案:

答案 0 :(得分:0)

可能对你有帮助。

#include <iostream>
#include <vector>

#include <cstdlib>
#include <cstring>
#include <ctime>

std::vector<int> random_interval_values(int b, int e)
{
    int n = e - b;

    std::vector<int>result(n);

    for(int i = 1; i < n ; ++i)
    {
         int t = rand() % i; // t - is random value in [0..i)
         result[i] = result[t]; // i-th element assigned random index-th value
         result[t]  =i;        // and, random position assigned i value

    }

    // increment all values to b.
    for(int i = 0; i < n; ++i) result[i] += b;

    return result;
}

int main()
{

   srand( time (NULL )) ;

   int interval_begin = 7;
   int interval_end   = 15;
    // [ interval_begin ... interval_end )  


   std::vector<int> v = random_interval_values( interval_begin, interval_end);

   for(int i= 0; i < v.size(); ++i)
     std::cout << v[i] << ' ';

  std::cout << std::endl;
}