Algorithm 关于随机样本的算法设计手册(Steven Skiena)第250页
给出以下解释 问题:我们需要一种有效且无偏见的方法来生成随机数据 对顶点执行随机顶点交换。提出一个有效的解决方案 从{1]上的(n2)无序对生成元素的算法, …,n}均匀随机 解决方案:均匀生成随机结构是一个令人惊讶的问题 微妙的问题。考虑下面的随机生成过程 无序对:i=随机整数(1,n-1);j=随机整数(i+1,n) 很明显,这确实会产生无序对,因为iAlgorithm 关于随机样本的算法设计手册(Steven Skiena)第250页,algorithm,data-structures,random-sample,Algorithm,Data Structures,Random Sample,给出以下解释 问题:我们需要一种有效且无偏见的方法来生成随机数据 对顶点执行随机顶点交换。提出一个有效的解决方案 从{1]上的(n2)无序对生成元素的算法, …,n}均匀随机 解决方案:均匀生成随机结构是一个令人惊讶的问题 微妙的问题。考虑下面的随机生成过程 无序对:i=随机整数(1,n-1);j=随机整数(i+1,n) 很明显,这确实会产生无序对,因为i
n - 1 pairs start with 1 (1 2; 1 3; ...; 1 n)
n - 2 pairs start with 2 (2 3; 2 4; ...; 2 n)
n - 3 pairs start with 3
...
在上面的段落中,“我们可以通过精确计算无序对如何以i(精确地(n))开始来解决这个问题− i) )“这不应该告诉我有多少条无序的线对,而不是多少条无序的线对吗
是的,那里缺少“许多”
在上面的段落中,“忽略顺序(即,将有序对排列为无序对(x,y),使xn*n
可以生成对(12
和21
是不同的对)。由于您随后继续忽略排序,因此12
和21
都是相同的,因此您有两个有利的情况
但这并不能解释您丢弃
x对的事实。然后它将是2/(n*(n-1))
,因为如果你选择x
一次,你只有n-1
第二次选择的可能性。假设你的n个项目的索引为0..(n-1),并且random(n)
给出一个随机数≥ 0和
i = random(n)
j = random(n-1)
j = (i+j+1) % n
现在每一对(i,j)与i≠j的概率为1/(n(n-1))。显然,交换(i,j)与交换(j,i)具有相同的结果
你也可以这样做:
i = random(n)
j = random(n)
忽略这可能会导致(i,i)对的事实(交换它们将没有效果) 你查过了吗?我查过了,但显然我有一个旧版本。所以谢谢你的链接。你提供的勘误表仍然不能解释问题1。谢谢你的解释。你介意解释一下这对i j对不一致的结果有什么影响吗?这是否意味着,如果配对以大数字开头,则有更高的成功几率repeating@user119020是的,这是偏向于“大”对。再次感谢。但我还是不能把我的头围绕着它。我无法理解,如果一对以一个大数字开头,那么同一对重复出现的几率很高。但是,第一个数字是大数字,这是不存在偏差的。因此,假设这是运行10次,那么第一个数字是小数字和大数字的概率不是相等吗?因此,您不会得到均匀分布的结果吗?@user119020假设我们想要为n=4
生成随机无序的n
数字对。这将是12;1 3; 1 4; 2 3; 2 4; 3.4
。请注意,其中三个以1
开头,两个以2
开头,一个以3
开头。你是对的,第一个数字没有偏差,这正是问题所在。应该存在偏差:3
出现的次数应该少于1
。但它不会,因此34
将比它应该出现的次数更多。您应该将第一个随机数生成器偏向于更频繁地拾取较小的数字。