对随机序列进行下采样是否会减少随机性?是否有原理/定理显示这一点?

问题描述 投票:1回答:1

我想知道对随机(或伪随机)序列进行下采样是否使其随机性降低或保留其随机性。例如,如果您使用一系列伪随机字节(如下面的代码所示)并抛弃除字母数字字符以外的所有字符,那么字母数字字符的结果字符串是否仍然是伪随机的?随机案例怎么样?

是否有数学或计算原理或定理以这种方式或其他方式显示?

我看了这个问题:Is a subset of a random sequence also random?

但这并不具体包括选择过程,其中包括所选值的知识。 MusiGenesis的答案似乎表明这可能会导致较少的随机性。

// Open the /dev/urandom file to read random bytes
ifstream rand_file("/dev/urandom");

if (!rand_file) {
    cout << "Cannot open /dev/urandom!" << endl;
    return return_code::err_cannot_open_file;
}

string password("");
vector<char> rand_vec(rand_vec_length, 0);
while (password.length() < pwd_length) {
     fill_rand_vec(rand_vec, rand_file);

    // Iterate through the vector of psuedo-random bytes and add 
    // printable chars to the password
    for (auto rand_char : rand_vec) {
        if (isprint(rand_char) && !isspace(rand_char)) {
            password += rand_char;
        }

        if (password.length() >= pwd_length) {
            break;
        }
    }
}
c++ linux random
1个回答
4
投票

我不是数学家,但在我看来,假设你的初始字节序列是均匀分布的,在抛弃了所有不在你想要的范围内的字节之后,剩下的字节仍然必须是均匀分布的。只是你事先不知道你需要多少随机字节来结束给定数量的随机字母数字字符。它实际上可能需要任意长,这使得该方法不是特别有效。但是,您获得输出值的方法并不比任何其他字母数字值更倾向于使用任何字母数字字符值,因此产生的字母数字字符(无论它们可能多少)实际上不能是均匀分布的任何字符。

在我看来,你所描述的基本上是Rejection Sampling,这是一种能够从任意概率分布生成样本的标准技术。您可能想要阅读有关数学证明的内容。我相信您的特定示例可被视为拒绝抽样概率分布,其中字母数字字符值的概率为1/36(我假定,取决于您究竟考虑的字母数字),而其他每个值的概率为0 ...

© www.soinside.com 2019 - 2024. All rights reserved.