目录:
我们的一个算法如何来判断它的好坏,我们一般有两种方法:
第一种:事后统计法
这种方式就是在算法开始执行以前记录开始时间,然后算法执行结束以后记录结束时间,用结束时间-开始时间就是这个算法运行花费的时间。
但是这种方法会受到计算机硬件、软件的影响,比如同一个算法,在不同配置不同环境的电脑上运行效果是不一样的。
第二种:事前统计法
这种方式就是通过时间复杂度来判断一个算法的好坏,而时间复杂度呢就是用特殊的符号特殊的规则来记录这个算法耗时的大致情况。
一个算法中语句执行次数称之为时间频度或者时间频度,记作T(n)。
来举例1+2+3+...+n:
1 public static int sum1(int n) { 2 int total = 0; 3 for (int i = 1; i <= n; i++) { 4 total += i; 5 } 6 return total; 7 } 8 9 public static int sum2(int n) { 10 return (1 + n) * (n / 2); 11 }
当我们n为100的时候,
sum1要循环一百次,加上上面的一句代码,那么sum1的时间频度就为:T(n)=n+1
sum2只需要执行一句代码,那么sum2的时间频度就为:T(n)=1
然后我们的平时在计算事件时间频度的时候,是可以忽略某些项的,就比如上方的sum1,n为100那么时间频度就为101,n为200,时间频度就为201,那么这个时候这个1可有可无,所以就可以被忽略。
下面列举常见的忽略各种项的情况:
1、忽略常数项:
看这俩图,可以得出结论如下结论:
1、2n+20和2*n这两个之间,随着n变大,结果几乎没有被20所影响,所以20可以忽略,注:(在算式中普通的数字叫做常数项)
2、3n+10和3n这两个之间,随着n变大,也几乎没有被10所影响,所以10可以被忽略。
2、忽略低次项
得出结论:
1、2n²+3n+10和2n²这两个,随着n变大,结果几乎没有被3n+10影响,所以3n+10可以被忽略。
2、n²+5n+20和n²之间,随着n变大,5n+20也是几乎没影响,所以可以忽略
3、忽略系数
得出结论:
1、3n²+2n和5n²+7n这两个,随着n变大,²的影响越来越小,所以²可以被忽略。
原文:https://www.cnblogs.com/daihang2366/p/12882198.html