- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
采用这个函数,这是一个种子 Fisher-Yates 洗牌(顺序是随机的,但在给定相同种子的情况下可重现):
function seeded_shuffle(array &$items, $seed = false) {
$items = array_values($items);
mt_srand($seed ? $seed : time());
for ($i = count($items) - 1; $i > 0; $i--) {
$j = mt_rand(0, $i);
list($items[$i], $items[$j]) = array($items[$j], $items[$i]);
}
}
这个算法可以逆向吗?也就是说,给定种子值和打乱后的数组,数组能否“打乱”到原来的顺序?如果是,怎么办?
(问题来了 in the comments here .)
最佳答案
事实证明答案是肯定的,而且非常简单:
function seeded_unshuffle(array &$items, $seed) {
$items = array_values($items);
mt_srand($seed);
$indices = [];
for ($i = count($items) - 1; $i > 0; $i--) {
$indices[$i] = mt_rand(0, $i);
}
foreach (array_reverse($indices, true) as $i => $j) {
list($items[$i], $items[$j]) = [$items[$j], $items[$i]];
}
}
只需使用已知种子生成相同的随机数序列,并反向遍历即可。
关于php - 种子洗牌可以逆转吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24262147/
我构建了一个网页,用户可以在其中提交 PDF,然后将其插入到 mediumblob 中的 MySQL 数据库中以供以后检索。 一切正常,除非 PDF 包含图像或嵌入字体,在这种情况下,图像会损坏并且使
我正在开发一个应用程序,用户可以在其中创建 HTML 模板并将其保存到数据库中。模板由不同的组件组成,如文本、图像等。当我尝试使用撇号 ' 它给了我 mysql_error (显然)。所以我尝试 my
我制作了一个应用程序,可以通过低功耗蓝牙与设备通信。基本上,我的应用程序和这个设备都有自己的消息语法。它们以字节形式交换数据,并且这些数据中的每个值都是相反的。 我的问题是,在反转值后,当我将 3 字
我有一个嵌套列表,我想在用户将鼠标悬停在父列表项上时显示它。我是从左边移动的列表,当它处于下拉列表的位置时。我能够做到这一点,但是当用户取消悬停时,我想在它向左移动之前反向下拉,但我所做的一切都会导致
Android 电子市场应用程序的源代码不可用。我想做的是反转市场使用的网络协议(protocol)。目的是构建一个可以模拟手机并搜索特定短语的工具,从而返回目标应用程序的排名(或者可能是该特定关键字
如何反向re.escape? This blog from 2007说没有反向功能,但十年后仍然如此吗? Python 2 的 decode('string_escape') 不适用于所有转义字符(例
我是一名优秀的程序员,十分优秀!