algorithm - 具有下一个和上一个支持的随机数生成?

标签 algorithm random

如何编写两个支持next和previous的随机数生成函数?

我的意思是如何编写两个函数:next_number()previous_number()next_number() 函数生成一个新的随机数和 previous_number() 函数生成先前生成的随机数。

例如:

int next_number()
{
   // ...?
}

int previous_number()
{
   // ...?
}

int num;

// Forward random number generating.
// ---> 54, 86, 32, 46, 17
num = next_number(); // num = 54
num = next_number(); // num = 86
num = next_number(); // num = 32
num = next_number(); // num = 46
num = next_number(); // num = 17

// Backward random number generating.
// <--- 17, 46, 32, 86, 54
num = previous_number(); // num = 46
num = previous_number(); // num = 32
num = previous_number(); // num = 86
num = previous_number(); // num = 54

最佳答案

您可以使用伪随机函数 (PRF) 轻松做到这一点。

这些函数接受一个键和一个值,并根据它们输出一个伪随机数。您将从/dev/random 中选择一个键,该键在程序运行时保持不变,然后为函数提供一个整数,您递增该整数以前进或递减该整数以返回。

这是一个伪代码示例:

initialize():
    Key = sufficiently many bytes from /dev/random
    N = 0

next_number():
    N = N + 1
    return my_prf(Key, N)

previous_number():
    N = N - 1
    return my_prf(Key, N)

在大多数密码学库中都可以找到强伪随机函数。正如 rici 指出的那样,您还可以使用任何加密函数(加密函数是伪随机排列,PRF 的子集,并且周期非常大,差异无关紧要)。

关于algorithm - 具有下一个和上一个支持的随机数生成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25168886/

相关文章:

python - SQL炼金术 : random Unique integer?

java - 围绕中心坐标排序坐标 - JAVA

javascript - 有效搜索较大字符串中的多个子字符串之一

algorithm - 匹配层次不精确图

python - 类型错误 : object of type 'int' has no len() *subtraction*

mysql - 从表中选择随机行

javascript - 按钮中的随机数会自行迭代!我怎样才能从迭代中删除它?

algorithm - 多目标问题的图形表示

c++ - 如何删除此代码的重复排列?

python - 为 K 均值聚类生成随机 (x,y) 点