Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.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 随机数递归_Algorithm_Recursion_Probability - Fatal编程技术网

Algorithm 随机数递归

Algorithm 随机数递归,algorithm,recursion,probability,Algorithm,Recursion,Probability,如果最初使用m作为参数调用foo,那么预期调用rand的次数是多少 顺便说一句,rand1,n返回1到n范围内均匀分布的随机整数。一个简单的例子是计算f2需要调用多少次。假设这个时间是x,那么x=1+0/2+x/2,因为我们实际调用1,然后概率1/2我们转到f1,概率1/2我们停留在f2。解方程得到x=2 与大多数递归的运行时分析一样,我们试图得到运行时的递归公式。我们可以使用期望线性进行随机调用: function foo(n) if n = 1 then r

如果最初使用m作为参数调用foo,那么预期调用rand的次数是多少


顺便说一句,rand1,n返回1到n范围内均匀分布的随机整数。

一个简单的例子是计算f2需要调用多少次。假设这个时间是x,那么x=1+0/2+x/2,因为我们实际调用1,然后概率1/2我们转到f1,概率1/2我们停留在f2。解方程得到x=2

与大多数递归的运行时分析一样,我们试图得到运行时的递归公式。我们可以使用期望线性进行随机调用:

function foo(n)  
     if n = 1 then  
        return 1  
     else  
        return foo(rand(1, n))  
     end if  
   end function
因此

因此,对于n>1:

这也是我们直觉上可能期望的,因为n在每次调用f时应该大约为一半


我们也可以考虑“高概率的最坏情况”。对于这一点,很容易使用马尔可夫不等式,即P[X=1-1/a。设置a=100,我们得到99%的概率,该算法对rand的调用不到100*logn。

一个简单的例子是计算f2需要调用多少次。假设这个时间是X,那么X=1+0/2+X/2,因为我们实际调用1,然后概率1/2我们转到f1,概率1/2我们停留在f2。求解t这个方程式给了我们x=2

与大多数递归的运行时分析一样,我们尝试获得运行时的递归公式。我们可以使用期望的线性来进行随机调用:

function foo(n)  
     if n = 1 then  
        return 1  
     else  
        return foo(rand(1, n))  
     end if  
   end function
因此

因此,对于n>1:

这也是我们直觉上可能期望的,因为n在每次调用f时应该大约为一半


我们也可以考虑“高概率的最坏情况”,因为这很容易使用马尔可夫不等式,它表示P[X=1-1/a。设置a=100,我们得到99%的概率,该算法对兰德公司的调用少于100*logn。

这是家庭作业吗?你提到的m变量是什么?这是一个完全相同的变量。在提问之前,请使用搜索功能或谷歌查看你的问题是否已经得到回答。这是家庭作业吗?是什么你提到的m变量?这是一个完全相同的变量。在提问之前,请使用搜索功能或谷歌查看你的问题是否已经得到了回答。由于根本没有调用rand,所以期望值不是在n=10吗?在这种情况下这有关系吗?好吧,你必须进行一次调用,其中如果n=1,则分支为tak恩。@ThomasAhle这个问题问的是rand调用的预期数量。我认为你的分析是正确的,我投了赞成票,只是细节稍有错误-ET1=0。最坏的情况如何?会调用多少随机函数?这取决于你所说的最坏情况。通常对于这样的随机过程,我们可能会感兴趣n最坏的情况是99%的概率,或者一些这样的数字。这不应该超过logn的常数因子。如果你是指最坏的情况,比如随机生成器总是返回n,那么显然你会无限次地调用它。n=10时的期望值不是吗,因为根本不调用rand?这在这种情况下重要吗?嗯,您必须执行一次调用,其中if n=1,则执行分支。@ThomasAhle问题询问的是预期的rand调用数。我认为您的分析是正确的,但细节稍有错误-ET1=0。最坏的情况如何?将对随机函数进行多少次调用?这取决于您所说的最坏case、 通常,对于这样的随机过程,我们可能会对99%概率的最坏情况感兴趣,或者一些这样的数字。这不应该超过logn中的常数因子。如果你是指随机生成器中的最坏情况总是返回n,那么显然你会无限多次地调用它。
E[T(n)](n-1) = n + (E[T(n-1)] - 1)(n-1)
E[T(n)] = 1/(n-1) + E[T(n-1)]
        = 1/(n-1) + 1/(n-2) + ... + 1/2 + 2
        = Harmonic(n-1) + 1
        = O(log n)