Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 随机线性无关二元向量的生成问题_C_Random_Vector - Fatal编程技术网

C 随机线性无关二元向量的生成问题

C 随机线性无关二元向量的生成问题,c,random,vector,C,Random,Vector,我试图连续生成一个随机线性独立的二进制向量序列,每个向量包含1024个元素0或1。我需要生成1024个(这也是我能得到的最大值)这样的向量。这是我所做的基本想法 srand( (unsigned) time(NULL) ); while(obtained <= 1024) { for (int i=0;i<1024;i++) vector[i] = rand() % 2; check linear indepence against previous

我试图连续生成一个随机线性独立的二进制向量序列,每个向量包含1024个元素0或1。我需要生成1024个(这也是我能得到的最大值)这样的向量。这是我所做的基本想法

srand( (unsigned) time(NULL) );
while(obtained <= 1024)
{
    for (int i=0;i<1024;i++)
        vector[i] = rand() % 2;

    check linear indepence against previously stored linearly independent vectors

    if (linearly independent)
        store it;
        obtained += 1;
    else
        discard;
 }
srand((无符号)时间(NULL));

虽然(获得似乎您使用的C库的
rand
实现质量很低。例如,MSVC的CRT中的实现是出了名的糟糕

实际上,您所做的与测量随机数生成器质量的常用统计测试非常相似。矩阵秩测试创建随机二进制矩阵,计算其秩,并测试秩的分布是否与预期分布匹配。本质上,您的代码无法创建满秩二进制矩阵特里克斯

您可以使用更好的RNG(可能来自第三方库),也可以尝试以下方法:

  • 使用
    rand
    返回的值的不同位
  • 经过一定次数的迭代后,再次调用
    rand
    ,并丢弃该值。由于1024是2的幂,这可能是随机值中出现某种重复的原因
  • 从单个调用
    rand
    中使用更多位。确保在系统上检查rand_MAX的值

我很高兴地说,通过在GNU科学库(GSL)中使用RNG,我已经解决了这个问题。现在使用
GSL\u RNG\u mt19937
RNG代替unix标准rand()。

实际上我是在Linux环境中工作的,所以使用标准C库。