复杂度计算

复杂度一般指时间复杂度、空间复杂度,分别表现在代码的耗时占用内存大小
时间复杂度:执行常数时间操作的次数,指最坏的情况下:
空间复杂度:占用的内存空间;
复杂度用big O表示又称为渐进符号,是用于描述函数渐进行为的数学符号,当代码中出现int[] arr = new int[N];时我们可以说它的空间复杂度为O(N)。不同于空间复杂度的线性阶时间复杂度的表示有多种
算法复杂度 - 图1

  1. // O(1)
  2. int i = 1;
  3. int j = 2;
  4. int k = i + j;
  5. // O(log n)
  6. int i = 1;
  7. while(i<n)
  8. {
  9. i = i * 2;
  10. }
  11. // O(n)
  12. int j = 1;
  13. for (int u = 0; u < n; u++) {
  14. j++;
  15. }
  16. // O(n log n)
  17. for(m=1; m<n; m++)
  18. {
  19. i = 1;
  20. while(i<n)
  21. {
  22. i = i * 2;
  23. }
  24. }
  25. // O(n^2)
  26. int j = 1;
  27. for(u=1; u<=n; u++){
  28. for(m=1; m<=n; m++){
  29. j++;
  30. }
  31. }
  32. // O(2^n) 递归实现斐波那契数列
  33. int Fibonacci(int number)
  34. {
  35. if (number <= 1) {
  36. return number;
  37. }
  38. return Fibonacci(number - 2) + Fibonacci(number - 1);
  39. }

O(n!)的经典问题旅行商问题复杂度为O((n-1)!/2)
image.pngimage.png

复杂度速查

英文原文 https://www.bigocheatsheet.com/
中文转载
https://liam.page/2016/06/20/big-O-cheat-sheet/
https://www.cnblogs.com/lazyegg/p/12572421.html
image.pngimage.png
image.png
image.png

image.png
image.png
image.png