算法的最佳和最差情况运行时间

时间:2015-04-26 10:38:11

标签: algorithm

我需要计算以下算法的最佳和最差情况运行时间。我的问题是我需要在第二个循环中考虑i*i吗?并将该循环的复杂性视为Q(N^2)

    for i=1 to 2*n do
       for j=1 to i*i do
          for k=1 to k<j do
             if j%i==0 then
                 sum=sum+1;

这是完整的代码

    procedure proc(n:integer){
    var i,j,k :integer
    var sum: integer
   begin
 sum=0;
 for i=1 to 2*n do
 begin
       for j=1 to i*i do
       begin 
              for k=1 to k<j do
              begin
                       if j%i==0 then
                       sum=sum+1;
                       end if
                       k=k+1;
    end
   j=j+1;
  end 
 i=i+i;
 end
 end }

1 个答案:

答案 0 :(得分:2)

让我们从内到外分析它。

         if j%i==0 then
             sum=sum+1;

每次到达时都需要一段时间。

      for k=1 to k<j do

最内循环运行O(j)次,每次k的值从1到j(不包括)。到目前为止,我们有O(j*1) = O(j)

   for j=1 to i*i do

对于中间循环 - j的每个值必须在O(j)的复杂性中起作用。这意味着,您将需要整个循环(对于i的每个值):

1 + 2 + .... + i*i = i*i*(i*i+1)/2 = i^2(i^2+1)/2  [sum of arithmetic progression]

以上内容属于O(i^4)

for i=1 to 2*n do

Sum{i^2*(i^2+1)/2 | i from 1 to 2n } which is in O(n^5)