算法复杂度的计算方法

时间复杂度:简单的说就是语句的执行次数
规则:
1.用常数1来取代运行时间中所有加法常数。 加法的复杂度就为O(1)
2.修改后的运行次数函数中,只保留最高阶项
3.如果最高阶项存在且不是1,则去除与这个项相乘的常数。

  int sum = 0,n = 100; //执行一次  
  sum = (1+n)*n/2; //执行一次  
  System.out.println (sum); //执行一次 

复杂度为O(1)

  int sum = 0,n = 100; //执行一次  
  sum = (1+n)*n/2; //执行一次  
  sum = (1+n)*n/2; //执行一次  
  sum = (1+n)*n/2; //执行一次  
  sum = (1+n)*n/2; //执行一次  
  sum = (1+n)*n/2; //执行一次  
  System.out.println (sum); //执行一次 

复杂度为O(1)

for(int i=0;i

复杂度为O(n)

int number=1;
while(number

随着number每次乘以2后,都会越来越接近n,当number不小于n时就会退出循环。假设循环的次数为X,则由2^x=n得出x=log₂n,因此得出这个算法的时间复杂度为O(logn)。复杂度为O(logn)

  for(int i=0;i

内循环中int j=i,而不是int j=0,通过计算得到总次数为n²/2+n/2,因为取最高次的,所以复杂度为O(n²)

for i in t:
	for j in N:
		//复杂度为O(1)的算法
	for p in K:
		//复杂度为O(1)的算法

复杂度为O(tNK)。

参考:https://blog.csdn.net/itachi85/article/details/54882603
空间复杂度:度量一个算法在运行过程中临时占用存储空间大小。
计算方法:
①忽略常数,用O(1)表示
②递归算法的空间复杂度=递归深度N*每次递归所要的辅助空间
③对于单线程来说,递归有运行时堆栈,求的是递归最深的那一次压栈所耗费的空间的个数,因为递归最深的那一次所耗费的空间足以容纳它所有递归过程。
创建变量的个数,(1)程序中只创建了常数个变量,空间复杂度就是O(1)
(2)程序中循环体中创建一个变量,就是O(n).
例如

for i in range(n):
	k=5
	...
	return ...

这个复杂度就为O(n).

你可能感兴趣的:(算法复杂度的计算方法)