我需要生成将用作数组索引的'random'int值,因此它们需要在给定的时间间隔内是唯一的。
LFSR似乎非常适合这项任务,但有一个问题:数组大小应该大小为2 ^ n(在某些情况下,它会强制分配比所需数据更多的内存(例如,数据大小2100 - 数组大小4096) ))或跳过生成的数字直到找到正确的值(浪费LFSR功能,在某些情况下,索引的生成时间可能会很明显)。
我试图创建一些公式来计算数组索引,但我失败了,特别是对于小(<120)数组大小。
这个问题的解决方案是否有最优解(在资源和计算时间方面)?
提前感谢您的回答!
答案 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;
}