打乱 int/char 的数组

Unshuffle an array of int/char

为了打乱字符串 st 的字符,我使用了 std::shuffle 和一个由已知种子提供的随机数生成器。这是编码器的一部分,为简单起见,它只是随机输入。

混洗后的数据将被发送到解码器。在这一边,我们无法访问原始输入,但可以访问混洗后的输入。

如何使用相同的随机数生成器和相同的种子解开字符串shuffledSt,直到获得原始字符串st

#include <random>
#include <algorithm>
int main (int argc, char* argv[])
{
    std::string st = "asdfgh";
    int seed = 1000;
    
    std::shuffle(st.begin(), st.end(), std::default_random_engine(seed));
    std::cerr << st << '\n';

    std::string shuffledSt = st;

    return 0;
}

我建议遵循以下算法

  • 使用 std::iotast.size() 个元素生成向量 indices
  • 使用相同的引擎和相同的种子随机播放该向量。
  • 在循环打乱后的向量时,生成一个新字符串 result,其中 result[indices[i]] = st[i]