Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.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_Time Complexity_Complexity Theory_Asymptotic Complexity - Fatal编程技术网

Algorithm 依赖随机结果终止的算法的最坏情况时间复杂度?

Algorithm 依赖随机结果终止的算法的最坏情况时间复杂度?,algorithm,time-complexity,complexity-theory,asymptotic-complexity,Algorithm,Time Complexity,Complexity Theory,Asymptotic Complexity,假设我们有一个递归函数,该函数仅在随机生成的参数满足某些条件时终止: e、 g: 我知道对于无限循环,不会定义复杂性。如果某个函数确实会终止,但会在未知的时间后终止,那该怎么办 找到这个问题的平均时间复杂度就可以了。如果存在的话,人们将如何着手寻找更糟糕的案例时间复杂性 提前谢谢你 编辑:正如一些人指出的,我完全忽略了这个函数没有输入的事实。相反,假设我们有: {define (some-recursive-function n) x = (random in range of 1 t

假设我们有一个递归函数,该函数仅在随机生成的参数满足某些条件时终止:

e、 g:

我知道对于无限循环,不会定义复杂性。如果某个函数确实会终止,但会在未知的时间后终止,那该怎么办

找到这个问题的平均时间复杂度就可以了。如果存在的话,人们将如何着手寻找更糟糕的案例时间复杂性

提前谢谢你

编辑:正如一些人指出的,我完全忽略了这个函数没有输入的事实。相反,假设我们有:

{define (some-recursive-function n)

    x = (random in range of 1 to n);
    if (x == 10)
    {
        return "this function has terminated";
    }
    else
    {
        (some-recursive-function)
    }
}

这会改变什么吗?

如果没有n的函数从上面限定函数的运行时,那么运行时就没有上限。根据具体情况,运行时可能有一个下限。我们也可以谈论预期的运行时,甚至对预期的运行时设置边界,但这一方面不同于平均情况下的边界,另一方面也不同于运行时本身的边界

正如目前所写的,当n小于10时,根本没有边界:函数在任何事件中都不会终止。对于n>=10,在任何情况下都没有上限-可能需要任意长的时间才能完成-但在任何情况下下限都是线性的(您必须至少读取n的值,该值由n=上限(对数n)位组成;选择不大于n的随机数的方法可能需要额外的时间和/或空间)。这里的案例行为相当乏味


如果我们根据输入的值(非长度)考虑函数的预期运行时间,我们观察到,任何特定调用选择正确的随机数(再次,对于n>=10)有1/N的可能性;我们认识到,我们需要尝试获得一个的次数由几何分布给出,并且期望值为1/(1/n)=n。因此,预期递归深度是输入值n的线性函数,因此是输入大小n=logn的指数函数。我们恢复了期望的精确表达式;因此,上界和下界都是线性的,这涵盖了所有情况(最佳、最差、平均等)。我说递归深度,因为运行时还有一个额外的因子N=log N或更多,根据上一段的观察。

如果没有n的函数从上面限定函数的运行时间,那么运行时间就没有上限。根据具体情况,运行时可能有一个下限。我们也可以谈论预期的运行时,甚至对预期的运行时设置边界,但这一方面不同于平均情况下的边界,另一方面也不同于运行时本身的边界

正如目前所写的,当n小于10时,根本没有边界:函数在任何事件中都不会终止。对于n>=10,在任何情况下都没有上限-可能需要任意长的时间才能完成-但在任何情况下下限都是线性的(您必须至少读取n的值,该值由n=上限(对数n)位组成;选择不大于n的随机数的方法可能需要额外的时间和/或空间)。这里的案例行为相当乏味


如果我们根据输入的值(非长度)考虑函数的预期运行时间,我们观察到,任何特定调用选择正确的随机数(再次,对于n>=10)有1/N的可能性;我们认识到,我们需要尝试获得一个的次数由几何分布给出,并且期望值为1/(1/n)=n。因此,预期递归深度是输入值n的线性函数,因此是输入大小n=logn的指数函数。我们恢复了期望的精确表达式;因此,上界和下界都是线性的,这涵盖了所有情况(最佳、最差、平均等)。我说递归深度,因为运行时也会有一个额外的因子N=logn,或更多,这是由于前面段落中的观察。

您需要知道有“简单”计算公式复杂度的一种递归算法,当然使用递归

在这种情况下,我们显然需要知道递归算法是什么,因为在最好的情况下,它是O(1)(时间复杂性),但在最坏的情况下,我们需要将O(n)(考虑到数字可能重复)添加到算法本身的复杂性中

我将提出以下问题/答案,以获得更多便利:


您需要知道,有一些“简单”的公式可以计算递归算法的复杂度,当然可以使用递归

在这种情况下,我们显然需要知道递归算法是什么,因为在最好的情况下,它是O(1)(时间复杂性),但在最坏的情况下,我们需要将O(n)(考虑到数字可能重复)添加到算法本身的复杂性中

我将提出以下问题/答案,以获得更多便利:


考虑到这里并没有n,最坏的情况是无界的,要找到形式O(f(n))的复杂性将是一个挑战。也使用随机数进行排序。最坏的情况不是无限的吗?无法保证某个范围内的给定数字会被随机选择。您的意思是在递归调用中传递
n
,还是
x
?@IlyaBursov这仍然不是保证,只是非常不可能。最坏的情况意味着最坏的情况,这意味着可怜的小10永远不会被调用。考虑到这里并没有n,所以要找到形式O(f(n))的复杂性是很有挑战性的,因为这里的最坏情况是无界的。也使用随机数进行排序。最坏的情况不是无限的吗?不能保证一个给定的数字
{define (some-recursive-function n)

    x = (random in range of 1 to n);
    if (x == 10)
    {
        return "this function has terminated";
    }
    else
    {
        (some-recursive-function)
    }
}