Random(int seed)保证什么?

| 我正在研究一个项目,该项目依赖于为用户分配较大集合的随机子集(毫无幻想,只是统一)。每个用户都有一个唯一的标识符,从一组同构到整数。据我所知,有两种方法可以做到这一点。 在用户和上述较大集合的键控元素之间创建一个数据库联结表,每个用户一次使用某个功能。这对于我的需求而言可能不切实际,因此我宁愿这样做... 在运行时,通过类似的功能确定子集,但使用唯一的用户ID作为种子值,并将其保存在内存中。下次需要它时,将从更大的集合中重新创建它。 所以我的问题是,如果我使用.NET Random对象使用用户ID作为种子值来创建第二个函数,Microsoft是否保证将来不会更改Random算法?即所有新的Random(n)\的Next()序列在所有机​​器上是否永远相同? 另外,我可以创建自己的随机生成器,并将其与代码打包在一起。实际上,这可能是我要做的,但是我仍然很想知道答案。     
已邀请:
        Microsoft无法保证您的代码永远不会更改,因为对已确定的漏洞,问题或缺乏商品的代码进行了改进,但是到目前为止,代码尚未更改,并且如果您不更改现有框架,则应始终拥有相同的功能。 因此,就好像它不会改变一样...但是当您决定升级框架时,请确保它仍然可以正常工作。     
        不,明确保证不能在各个版本之间都兼容:   不保证Random类中的随机数生成器的实现在.NET Framework的主要版本之间保持相同。因此,您的应用程序代码不应假定相同的种子会在不同版本的.NET Framework中产生相同的伪随机序列。     
        您可以使用非常大的质数生成一个看起来非常随机的数字序列,并且该序列将始终是相同的序列: p = VeryLargePrimeNumber q =小于p的任何数字(但不能太小) 迭代是这样的: n =(n * q)%p 前n个是种子。 可能某些加密方法会更适合... 也就是说,每次迭代都对种子位进行签名, 在下一次迭代中,您签署了先前的签名, 等等。     
        假定上下文保持不变(即底层代码不变),则给固定值n的伪随机数生成器植入种子将使该生成器每次生成完全相同的伪随机序列。 供应商(在本例中为Microsoft)可以保证PRSG的实施将永远不会改变。但是,他们却没有:为什么要这么做?他们认为PRNG类似于熵的产生。 如果您正在使用PRNG生成可重复的唯一标识符,那么您就在树错树丛中。     

要回复问题请先登录注册