最坏情况下该算法的下限运行时间

时间:2014-01-09 01:34:30

标签: algorithm

我有一个算法如下:

enter image description here

甚至我有找到这个算法下限的anwser:

enter image description here

但问题是我无法理解这一点:当我们设置i> = n / 2但是n / 4< = j< = n / 2时,在这个算法中j不能得到任何值,但是你在答案中看到中间循环迭代n / 4?

我真的很困惑。

3 个答案:

答案 0 :(得分:2)

好的,我不确定你对哪一部分感到困惑,但让我从你的摘要中重新解释下限解释,也许,混淆部分会清理。

首先,下限方法(有点明显的东西,但在你的摘要中省略,对初学者来说可能是不明显的)。如果您想象(i,j,k)的所有可能值的集合,我们不希望将它们全部计算,但我们只计算它们的较小子集,由某些任意定义限制。事实证明,计算子集的下限比整个集合更容易(因为你可以做简单的数学运算,比如因为这些限制而乘以范围的下限),而且传统上,这也是整个集合的下限。 。

现在,这些任意限制选择以下内容: 1)只查看i值> = n / 2。这意味着,不是看[1..n],而是看[n / 2..n]。 2)考虑到先前的限制,也限制j:查看范围[n / 4..n / 2]中的j值。文中的“考虑”一词适用于(1)和(2))。请注意,我们可以这样做的原因是[n / 4..n / 2]始终是[1..i]范围的子集,因为我们已经决定只查看i> = n /的情况2。因此,将[1..i]限制为[n / 4..n / 2]是正确的做法,以获得一些下限。

现在我们知道i是[n / 2..n](至少n / 2),j是[n / 4..n / 2](至少n / 4),有n /可能(i,j)对的2 * n / 4种组合。对于这些对中的每一对,内循环将至少进行n / 4-1次迭代(我不知道为什么-1,也许表示向下舍入?),因此我们得到n / 2 * n / 4 *(n / 4-1)(i,j,k)的元组是欧米茄(n ^ 3)。

如果一小部分变体是omega(n ^ 3),那么原始集合也是omega(n ^ 3)。

P.S。我不明白为什么你说“n / 4< = j< = n / 2然后在这个算法j中不能得到任何值”。 n / 4小于n / 2,因此对于足够大的n值,j范围将有一些数字。

答案 1 :(得分:1)

在我看来,中间循环中的迭代次数应始终小于或等于内循环中的迭代次数,因为k总是从1到j。

以下是我走过循环的例子。

array[1,2,3,4,5]

will produce the following iterations with the restrictions on the loops:

i=3,j=2,k=1 //i starts at 3 because of n/2 minimum
            //j can't go below or above 2 because of condition on middle loop
i=3,j=2,k=2
i=4,j=2,k=1
i=4,j=2,k=2
i=5,j=2,k=1
i=5,j=2,k=2

3 iterations of outer loop (at least n/2)
1 iteration of middle loop for each outer loop iteration (NOT at least n/4)
2 iterations of inner loop for each iteration of middle loop (at least n/4 - 1)

文本可能刚刚交换了底部两个循环的描述。如果是这种情况,给出的答案仍然是正确的。

无论如何,重要的是要注意它在O(n ^ 3)时间运行。

答案 2 :(得分:0)

您可以将循环中的迭代次数可视化为

for( i in [1..n] )
  for( j in [1..i] )
     statement;

as(对于n = 6):

x 
x x 
x x x
x x x x
x x x x x
x x x x x x

这会给你复杂性O(N*N)。 最内层循环(在您的样本中)中的迭代次数也是N依赖的,因此它将为您提供一个N乘数(第三维)。所以x es将填充1/32(?)的立方体积。但由于它是立方体形成,因此复杂性将为O(N³)