一、算法时间复杂度分析

    参考书目:《数据结构与算法 (java语言班)》 P25


    评价算法的运行时间是通过分析在一定规模下算法的基本操作完成的,并且我们只对大规模问题的运行时间感兴趣。O、Ω、Θ分别定义了时间复杂度的上界、下界、精确阶

    计算时间复杂度,最简单的方式就是计算出所有基本操作的执行次数。但是更多的时候,这种方式过于复杂而不可取。所以不存在固定的方法,但是有一些常用的分析技术可以使用。


一、计算循环次数

  • 基本步骤:

1、假设循环次数为k,计算循环总数;2、列出循环退出时以及退出前前一次循环,k与n满足的不等式;3、确定精确阶。


  • 例1.1  

输入:正整数n;输出:循环执行总次数;

代码:

public int function(int n){
    int i=1,count = 0;
    while(i<n){i = i*2;count++;}
    return count;
}

分析:设循环执行了k次,i在执行循环过程中的取值为:1,2...2^k,最后一次i = 2^k,所以n满足2^(k-1)<=n<2^k,k=[logn]+1 ,从而T(n)=Θ(logn)。


  • 例1.2

输入:正整数n;输出:循环执行总次数;

代码:

public int function(int n){
    int i=1,count=0;
    while(i<=n){
        for(int j=0;j<1;j++){
            count++;
        }
        i=i*2;
    } return count;
}

分析:假设while循环执行了k次,for循环每次执行i次,而i在while循环中的变化趋势为 1,2,3,4...2^k,在第k次执行完毕之后i=2^k,所以循环的总执行次数为:

1+2+...+2^(k-1) = 2^k-1

k=[logn] + 1    (见例1.1)

故    T(n) = Θ(2^k-1)=Θ(2^([logn]+1))=Θ(n).

二、分析最高频度的基本操作:略

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值