嵌套循环,运行次数和复杂性

时间:2015-10-05 16:50:19

标签: algorithm big-o complexity-theory nested-loops code-complexity

我有这两个代码,问题是找到x = x + 1将在每种情况下运行多少次,因为T1(n)代表代码1而T2(n)代表代码2.然后我必须找到每个人的BIG,但是我知道该怎么做,事情就是我在找到x = x + 1将会运行多少次(当然n)。

代码1:

SELECT     s.firstname, s.lastname, t.firstname, t.lastname
FROM       students s
JOIN teachers t ON NOT EXISTS (
    SELECT *
    FROM   stu_cou
    JOIN   tea_cou tc ON sc.courses_courseid = tc.courses_courseid
    WHERE  sc.students_studentid = s.studentid
    AND tc.teachers_teacherid = t.teacherid
    );

代码2:

for( i= 1; i <= n; i++)
    {
    for(j = 1; j <= sqrt(i); j++)
          {
           for( k = 1; k <= n - j + 1; k++)
               {
               x = x + 1;
               }
          }
    }

我真的被困了,已经阅读了很多,所以我问是否有人可以帮助我,请分析解释。

PS:我认为在代码2中,这个for(j = 1; j <= n; j++) { h = n; while(h > 0) { for (i = 1; i <= sqrt(n); i++) { x = x+1; } h = h/2; } } 将运行n * log(n)次,对吧?什么?

1 个答案:

答案 0 :(得分:1)

对于code 1,您有x=x+1的来电次数:

enter image description here

在这里,我们将1+sqrt(2)+...+sqrt(n)n sqrt(n)联系起来,并使用了第一个词是主要词语的事实。

对于code 2,计算更简单:

enter image description here enter image description here

第二个循环通过迭代h=n实际上从0变为h = h/2,但您可以看到这与从1log n的相同。我们使用的是j, t, i相互独立的事实(类似于我们可以写1n f(n)的总和只是nf(n)