rt。
问题:
给定 N,M,如何真正均匀随机(指每种可能的序列的概率相同)出一个长度为 N 的单调不降序列(所以可以有相同的),每个元素是在 [1,M] 中的整数。
显然生成所有数字再排序不是正确的,当 N=2 时就有:
- 如果两个数字 x,y 相同,则概率为 M21。
- 如果两个数字 x,y(这是经过排序的生成的序列,满足 x<y) 不同,概率为 M22。
容易验证概率和为 M×M21+M(M−1)×M21=1。
更进一步地,如果我们有一个能够均匀随机地产生某种类型(比如一个类)的随机对象产生器,同时有这种类型的小于号重载(可以比较两个对象,并且性质良好),还有这种类型的等于号重载,给定 N,如何产生一个长度为 N 的,对于每个 1≤i<j≤N 都有 ai≤aj(这里的 ≤ 表示重载后的 a<b || a==b)的序列 a1⋯N。
解答必关。