取消随机排列整数/字符数组



为了洗牌字符串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;
}

我建议遵循算法

  • 生成包含st.size()元素std::iota的矢量indices
  • 相同的引擎和相同的种子洗牌该向量。
  • 在遍历随机向量时,生成一个新的字符串result其中result[indices[i]] = st[i]

相关内容

  • 没有找到相关文章

最新更新