01数据结构——时间复杂度如何计算?具体思路

本文主要介绍数据结构中时间复杂度如何计算,以及思路。需要分几种情况讨论 

(Ⅰ)一层循环

解题思路:①列出循环趟数t以及每轮循环i的变化值。

                  ②找到t与i的关系

                  ③确定循环终止条件

                  ④算结果

【例】:

void fun(int n){
    int i=1;
    while(i<=n)
        i=i*2;
}

【解】:

t:  0   1    2   3     ........
i:  1   2    4   8     ........

i=2^t
i=n (判断条件虽然是i<=n,但可以理解为i=n)

联立上面两个式子
得t=logn

即T(n)=O(logn)

 (Ⅱ)两层循环

解题思路:①列出外层循环中i的变化值

                  ②列出内层语句执行的次数

                  ③求和,写结果

 【例】:

int m=0,i,j;
for(i=1;i<=n;i++)
    for(j=1;j<=2*i;j++)
        m++;

【解法一】:

i:      1      2       3        4   ........  n

内层
执行:   2      4       6        8   ........  2n
次数

内层次数(等差数列)求和:n(2+2n)/2=n(n+1)=n^2+n
时间复杂度即T(n)=O(n^2)

【解法二】:

对内层求和,条件作为上下限(当循环变量++时适用,因为不是++会影响到执行次数)。

即T(n)=\sum_{1}^{n}\sum_{1}^{2*i}1=\sum_{1}^{n}2*i=2+4+...+2n=\frac{n(2+2n)}{2}=O(^{_{n}2})。

(Ⅲ)三层循环

解题思路:①列式求和。

 【例】:

for(i=1;i<=n;i++)
    for(j=1;j<=i;j++)
        for(k=1;k<=j;k++)
            x++;

【解】:

分析:将每一层变量的最大遍历次数相乘。最外层是n次,中间层是i次,最内层是j次,所以是n*i*j。又因为i是1~n的范围,用放缩思想将i和j赋值为最大值n,直接秒出最后得n^{3}

基本语句x++的执行次数为T(n)=\sum_{1}^{n}\sum_{1}^{i}\sum_{1}^{j}1=O(\frac{1}{6}n^{3})=O(n^{3})。

总结:

01数据结构——时间复杂度如何计算?具体思路_第1张图片

你可能感兴趣的:(数据结构,数据结构)