您的位置:首页 > 其它

计算时间复杂度与空间复杂度

2019-02-23 12:26 120 查看

如何衡量一个算法的好坏?   复杂度:空间复杂度  +  时间复杂度

事后统计法:就是在算法的程序运行结束后,根据实际运行结果衡量算法好坏

事前估计法:就是在程序运行之前,先按照程序代码,来预估算法的好坏

时间复杂度:用基本指令的运行次数而不是运行时间代表时间复杂度,同一个程序在不同配置的机器下的运行时间不一定相同

 

时间复杂度:基本语句的执行次数 ,一个关于问题规模N的数学表达式  并不一定要计算精确的执行次数,而是使用 O的渐进表示法,会忽略掉较小的执行次数,表示出一个大概的执行次数

  • 用常数1表示所有的加法常数 O(1)

  • 只保留最高阶项,

  • 如果最高阶项存在且不为1,则去除他的系数,即是大O结果。

  • 如O(F(N))=O(3N^2+2N+10)   -->  3N^2+2N   -->  3N^2   -->   O(N^2)

  • 主要看最差情况:(底线)任意输入规模最大运行次数

    数据结构中如果没有明确说明, Lg N指的是log2 ^N 而不是log10^N

 

空间复杂度:临时占用空间的大小,要看在空间中定义的变量的多少  看有没有开辟辅助空间

  • 辅助空间使用的越多,说明空间复杂度越高

递归:时间复杂度:递归深度   空间复杂度:递归深度*每次递归创调用的变量数

[code]//以斐波那契数列数列为例
long long Fib(int first,int second,int N)

{

    return (N<3)?1:Fib(N-1)+Fib(N-1);

}

    降低时间复杂度的方法

//伪递归

long long Fib(int first,int second,int N)

{

    if(N<3)

        return 1;

    if(N==3)

        return first+second;

    

    return Fib(second,first+second,N-1)

}

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: