经过设计好的测试程序和数据,利用计算机计时器对不一样算法编制的程序的运行时间进行比较,从而肯定算法效率的高低。该方法具备很大缺陷,不予采纳。php
1.必须依据算法事先编制好程序,花费时间和人力算法
2.时间的比较依赖计算机硬件和软件等环境因素,有时会掩盖算法自己的优劣。函数
3.算法的测试数据设计困难,而且程序的运行时间每每还与测试数据的规模有很大关系,效率高的算法在小的测试数据面前每每得不到体现。学习
在计算机程序编制前,依据统计方法对算法进行估算。测试
通过分析,咱们发现,一个用高级程序语言编写的程序在计算机上运行时所消耗的时间取决于下列因素:设计
1.算法采用的策略、方法。code
2.编译产生的代码质量。编译
3.问题的输入规模。效率
4.机器执行指令的速度。软件
抛开这些与计算机硬件、软件有关的因素,一个程序的运行时间,依赖于算法的好坏和问题的输入规模。所谓问题输入规模是指输入量的多少。
下面用两种求和算法进行举例。 第一种
int i, sum = 0,n = 100; /* 执行1次 */ for (i = 1; i <= n; i++) /* 执行了n+1次 */ { sum = sum + i; /* 执行n次 */ } printf("%d", sum); /* 执行1次 */
第二种
int sum = 0,n = 100; /* 执行一次 */ sum = (1 + n) * n / 2; /* 执行一次 */ printf("%d", sum); /* 执行一次 */
int i, j, x = 0, sum = 0, n = 100; /* 执行一次 */ for (i = 1; i <= n; i++) { for (j = 1; j <= n; j++) { x++; /* 执行n×n次 */ sum = sum + x; } } printf("%d", sum); /* 执行一次 */
这个例子中,i从1到100,每次都要让j循环100次,而当中的x++和sum=sum+x;其实就是1+2+3+...+10000,也就是100^2次,因此这个算法当中,循环部分的代码总体须要执行n^2次。
测定运行时间最可靠的方法就是计算对运行时间有消耗的基本操做的执行次数。运行时间与这个计数成正比。
一样问题的输入规模是n,求和算法的第一种,求1+2+...+n须要一段代码运行n次。那么这个问题的输入规模使得操做数量是f(n)=n,显然运行100次的同一段代码规模是运算10次的10倍。而第二种,不管n为多少,运行次数都为1,即f(n)=1;第三种,运算100次是运算10次的1000倍。由于它是f(n)=n^2。
分析一个算法的运行时间时,重要的是把基本操做的数量与输入规模关联起来,即基本操做的数量必须表示成输入规模的函数。
随着n值的愈来愈大,它们在时间效率上的差别也就愈来愈大。
互联网工程师(id:phpstcn),咱们一块儿学习,一块儿进步