Random 创建具有相同域和范围的随机双射函数

Random 创建具有相同域和范围的随机双射函数,random,bijection,Random,Bijection,创建一个具有相同域和范围的随机双射函数。 所谓随机双射函数,我指的是使用随机算法(或至少是伪随机算法)将元素从域映射到范围的函数,而不是像x=y这样的函数。域和范围有时可能是一个非常小的集合,如{1,2,3,4,5},因此配对函数不起作用。 此外,计算资源是有限的,因此它应该是一个计算上可行的函数 编辑:我在问题中的意思是, 假设你有一个5个数字的列表a={1,2,3,4,5}。现在你要做的是创建一个随机函数f,当应用到上述集合时,它给出了一个包含上述相同数字的集合,但顺序不同,概率足够高。如果

创建一个具有相同域和范围的随机双射函数。 所谓随机双射函数,我指的是使用随机算法(或至少是伪随机算法)将元素从域映射到范围的函数,而不是像x=y这样的函数。域和范围有时可能是一个非常小的集合,如{1,2,3,4,5},因此配对函数不起作用。 此外,计算资源是有限的,因此它应该是一个计算上可行的函数

编辑:我在问题中的意思是, 假设你有一个5个数字的列表a={1,2,3,4,5}。现在你要做的是创建一个随机函数f,当应用到上述集合时,它给出了一个包含上述相同数字的集合,但顺序不同,概率足够高。如果我做f(A)=B,那么B可以是{2,4,1,5,3}。所以A到B的映射是1->2,2->4,4->1,4->5和5->3。但是如果我再做一次f(A),那么这次的映射应该是另一个这样的随机映射,即如果f(A)=C,那么C可以是A的任意一个概率一致相等的可能置换。这可以很容易地通过计算第n个置换来实现。但我怀疑的是,如果我想在给定的特定时间间隔内从集合a中找出一个数的映射,那么它可以在恒定的时间和空间中完成。

好吧,如果经典满足赫尔-多贝尔定理,它就具有这个性质


例如,Knuth LCG(a=6364136223846793005,c=1442695040888963407)将1:1域[0…264)映射到共域[0…264)

集的随机双射函数本身就是一种置换。谷歌“随机置换”。Fisher-Yates洗牌是一种自然的方法。