【发布时间】:2021-07-12 02:38:08
【问题描述】:
我想构造一个双射函数f(k, n, seed),从[1,n] 到[1,n],其中1<=k<=n 和1<=f(k, n, seed)<=n 对应每个给定的seed 和n。该函数实际上应该从1,2,...,n 的随机排列 返回一个值。随机性由seed 决定。不同的seed可能对应不同的排列。对于每个1<=k<=n 和任何给定的seed,我希望函数f(k, n, seed) 的时间 复杂度为O(1)。
任何人都知道我该如何构造这样的函数?允许随机性是伪随机性。 n 可以非常大(例如 >= 1e8)。
【问题讨论】:
-
n 有多大?如果它很小,您可以通过改组 {1,..n} 制造的查找表来实现 f
-
@dmuir n 可以非常大,例如>= 1e8.
-
您可能正在寻找block cipher。 This question 及其答案可能很有趣。
-
@MarkDickinson 我会检查一下。谢谢!
标签: math random generator permutation bijection