Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 关于随机样本的算法设计手册(Steven Skiena)第250页_Algorithm_Data Structures_Random Sample - Fatal编程技术网

Algorithm 关于随机样本的算法设计手册(Steven Skiena)第250页

Algorithm 关于随机样本的算法设计手册(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

给出以下解释

问题:我们需要一种有效且无偏见的方法来生成随机数据 对顶点执行随机顶点交换。提出一个有效的解决方案 从{1]上的(n2)无序对生成元素的算法, …,n}均匀随机

解决方案:均匀生成随机结构是一个令人惊讶的问题 微妙的问题。考虑下面的随机生成过程 无序对:i=随机整数(1,n-1);j=随机整数(i+1,n)

很明显,这确实会产生无序对,因为i 但是他们是制服吗?答案是否定的。发生这种情况的概率是多少 是否生成对(1,2)?有一个1/(n)−1) 获得1分的机会, 然后是1/(n)−1) 得到2的几率,即p(1,2)=1/(n − 1)2. 但是得到(n)的概率是多少− 1,n)?再说一次 有1/n的机会获得第一个号码,但现在只有一个 第二个候选人的可能选择!这一对将出现n次 比第一次更频繁!问题是,以数字开头的配对较少 大数字胜于小数字。我们可以通过以下方法解决这个问题: 精确计算无序对如何以i(精确地(n)开头− i) ) 并适当地偏移概率。第二个值可以是 从i+1到n均匀随机选择。 但是,让我们来利用以下事实,而不是通过数学进行研究 随机均匀地生成n2有序对是很容易的。随便挑 两个相互独立的整数。忽略排序(即。 ,将有序对排列为无序对(x,y),使x
  • 在上面的一段中,“问题是,以 “大的数字比小的数字多。”这不是应该多对而不是少对吗

  • 在上面的段落中,“我们可以通过精确计算无序对如何以i(精确地(n))开始来解决这个问题− i) )“这不应该告诉我有多少条无序的线对,而不是多少条无序的线对吗

  • 编辑

  • 在上述段落中,“忽略顺序(即。 ,将有序对排列为无序对(x,y),使x 谢谢

    在上面的一段中,“问题是以大数字开头的对比以小数字开头的对少。”这不是应该是更多对而不是更少对吗

    不,更少了

    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),使x 在顺序确实重要的情况下,
    n*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
    将比它应该出现的次数更多。您应该将第一个随机数生成器偏向于更频繁地拾取较小的数字。