在开发的时候,我们如何评价一个算法的好坏,如何描述一个算法的效率?一个比较通俗的表达方式是程序执行的快还是慢,但这只是一个比较宽泛的描述。怎样才能直观、科学地描述呢?可能有同学会说,用它的运行时间就可以很好的很直观的描述它。但是,对于不同的语言、不同的编译器、不同的CPU,程序的处理时间是不同的。我们不能单独用运行时间来描述一个算法的执行效率。另外,当处理的数据量增加时,算法的基本操作的重复执行次数也会增加,不同的算法增长速度不同。数学确实是一个很好的工具。为了描述算法运行时间的增长,我们可以使用不同的数学公式对其进行分析。在计算机科学中,我们有一个专门的术语来表征算法的效率,也就是今天要和大家一起学习的大O表示法。大O并不是指算法运行多长时间,而是指算法运行时间的增长率,即算法运行时间以不同的速度增长,也叫渐近时间复杂度。我们可以用下面的表达式来表达:通常有下面的表达式来描述时间复杂度:O(1):常数时间O(n):线性时间O(logn):对数时间O(n^2):二次时间O(2^n):指数时间O(n!):阶乘时间每个时间复杂度都不同。让我们仔细看看这些时间复杂度。大O复杂度O(1)O(1)表示常数时间复杂度。当给定大小为n的输入时,无论n取什么值,算法最终执行的时间都是常数。例如:intfunc(intn){n++;returnn*2;}在上面的程序中,无论输入的n的值如何变化,程序执行时间始终是一个常数。让我们简化处理。如果函数中每条语句的执行时间都是1,那么执行时间的数学表达式:无论n多大,最终执行时间都是一个固定值2。虽然运行时间是2,但是我们也用这里用O(1)来表示,其中1表示常数。O(n)O(n)表示线性时间复杂度,算法的执行时间随输入n的大小线性变化。intfunc(intn){intsum=0;for(inti=0;i
