0

我需要生成将用作数组索引的“随机”int 值,因此它们对于给定的间隔需要是唯一的。

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

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

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

提前感谢您的回答!

4

1 回答 1

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;
}
于 2013-11-06T18:49:50.563 回答