分析复制算法的最佳运行时间

时间:2014-02-04 20:10:34

标签: algorithm complexity-theory time-complexity

对于如何计算最佳案例运行时间 - 欧米茄f(n) - 我对此算法感到困惑。特别是,我不明白如何有一个“最佳案例” - 这似乎是一个非常简单的算法。有人可以给我一些提示/一般方法来解决这些类型的问题吗?

for i = 0 to n do
    for j = n to 0 do
        for k = 1 to j-i do
            print (k)

4 个答案:

答案 0 :(得分:3)

看看这个问题和答案Still sort of confused about Big O notation它可以帮助你解决最坏情况,最佳情况,大O,大欧米茄等之间的一些混淆。

至于你的具体问题,你被要求找到算法时间复杂度的一些(渐近)下限(你还应该澄清你是指大欧米茄还是小欧米茄)。

否则你是对的,这个问题很简单。您只需考虑为给定的print (k)执行n的次数。

你可以看到第一个循环是n次。第二个也是n次。

对于第三个,你看到如果i = 1,那么j = n-1,因此k是1到n-1-1 = n-2,这让我想到你的例子是否正确以及是否存在应改为i-j

在任何情况下,第三个循环将至少执行n / 2次。它是n/2,因为当j-i增加时减去ji减少,所以n/2 0结果为print (k)然后它将是负数,此时最内层的循环将不再执行。

因此n*n*n/2将执行Omega(n^3) - print(k)次,您可以从定义中轻松验证。

请注意,正如@Yves在答案中指出的那样,这是假设log(n)在恒定时间内完成,这可能就是你练习中的含义。

在现实世界中,这不是真的,因为打印数字也需要时间,如果print(k)在基数2或基数10中打印,则时间会增加n(它将是{{ 1}}对于基地1)。

否则,在这种情况下,最好的情况与最坏情况相同。只有一个大小为n的输入,因此您无法找到大小为n的“最佳实例”和大小为n的“最差实例”。只有大小n的实例。

答案 1 :(得分:2)

除了 n

之外,我在该功能中看不到不同执行之间的任何变化

除此之外,据我所知,只有一个案例,这是同时最好的情况和最坏的情况

O(n 3 以防您想知道。

答案 2 :(得分:0)

如果这是一种虐待狂,那么复杂性可能是Theta(n^3.Log(n)),因为三重循环,但也因为要打印的数字位数随n而增加。

答案 3 :(得分:-1)

作为n算法行为的唯一因素,最好的情况是n0。一次初始化,一次测试,然后完成......

修改: 最佳案例描述了最优条件下的算法行为。您提供了一个依赖于n的代码片段。什么是nbest案件? n为零。

另一个例子: 在数组上执行线性搜索的最佳情况是什么?要么键匹配第一个元素,要么数组为空。