在java中可逆地改组一个int数组[重复]
Posted
技术标签:
【中文标题】在java中可逆地改组一个int数组[重复]【英文标题】:Reversible shuffling a int array in java [duplicate] 【发布时间】:2013-03-15 04:33:11 【问题描述】:我有一个相当大的 int 数组。我需要使用一个键完全洗牌数组。我应该能够使用相同的键获得原始数组。我搜索了任何洗牌算法,但我发现像 Fisher Yates 这样的算法不使用密钥。
int 数组是图像的像素值。我需要将数据隐藏在其中。因此,在对数组进行洗牌后隐藏数据,只有在拥有密钥的情况下才能访问数据。
【问题讨论】:
您可以使用 Fisher Yates,正如 ***.com/a/3542000/367273 中所解释的那样——顺便说一句,这是 Google 上“可逆随机播放”的最佳匹配。 【参考方案1】:Fisher-Yates 使用伪随机数生成器,您可以使用密钥对其进行播种(查找加密 PRNG)。要反转该过程,请使用相同的键对索引数组 [0, n) 进行洗牌,然后执行反向洗牌。
【讨论】:
这就是我想出的for (int i=0; i < data.length; i++) j = (j + key[i % key.length]) % data.length; tmp = data[i]; data[i] = data[j]; data[j] = tmp;
它对数组进行洗牌但无法取回原始数据。
你能重播吗。以上是关于在java中可逆地改组一个int数组[重复]的主要内容,如果未能解决你的问题,请参考以下文章
Eclipse 不可逆 Dynamic Web Module 4.0 选择; Tomcat 9 不支持