简析大O表示法

一、说明

在进行算法分析时,语句总的执行次数 T( n ) 是关于问题规模 n 的函数,进而分析 T(n) 随n的变化情况并确定 T( n ) 的数量级。算法的时间复杂度记作:T( n ) = O( f ( n ))。 它表示随问题规模 n 的增大,算法执行时间的增长率和 f ( n ) 的增长率相同,称作算法的渐近时间复杂度,简称为时间复杂度,其中 f ( n ) 是 n 的某个函数。 这样用大写 O() 来体现算法时间复杂度的记法,我们称之为大 O 记法。

二、推导方法

  1. 用常数1取代运行时间中的所有加法常数。
  2. 在修改后的运行次数函数中,只保留最高阶项。
  3. 如果最高阶项存在且不是1,则去除与这个项相乘的常数。

三、实例

public void function ( int count) {
	for( int i = 0; i < count; i++ {
		System.out.print(i);
	}
}

public static void main(String[] args) {
	int a = 1;
	int b = 2
	int n = 3;
	function(n);
	for ( int i = 0; i < count; i++ {
		function(i);
	}

	for ( int i = 0; i < n; i++ ) {
		for ( j = i; j < n; j++) {
			System.out.print(j);
		}
	}
}

以上代码的执行次数为:
f(n) = 3 + n + n2 + n(n + 1) / 2 = 3/2 * n2 + 3/2n + 3
最终的时间复杂度是O(n2)。

根据大O推导方法,第1步就是把3改为1。在保留最高阶时发现最高阶为n2,所以这个算法的时间复杂度为O(n2)。

你可能感兴趣的:(数据结构&算法)