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

时间:2017-10-26 19:46:34

标签: algorithm time-complexity complexity-theory asymptotic-complexity

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

e.g:

{
define (some-recursive-function)

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

我理解对于无限循环,不会定义复杂性。 肯定终止的某些功能怎么样,但是在一段未知的时间之后呢?

找到平均时间复杂度就可以了。如果一个存在,如何找到更糟糕的案例时间复杂度?

提前谢谢!

编辑:有几个人指出,我完全错过了这个功能没有输入的事实。相反,我们假设:

{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)
    }
}

这会改变什么吗?

2 个答案:

答案 0 :(得分:0)

如果没有n的函数从上面限定函数的运行时,那么就没有运行时的上限。根据具体情况,运行时可能存在下限。我们也可以谈论预期的运行时,甚至将边界放在预期的运行时上,但这与一般情况下的边界不同,另一方面,与运行时本身的界限不同。

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

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

答案 1 :(得分:-1)

您需要知道有“简单”公式来计算递归算法的复杂性,使用当然重现。

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

我会把这个问题/答案放在更多设施上:

Determining complexity for recursive functions (Big O notation)