时间复杂度概念
在计算机科学中,时间复杂性,又称时间复杂度,算法的时间复杂度是一个函数,它定性描述该算法的运行时间。这是一个代表算法输入值的字符串的长度的函数。时间复杂度常用大O符号表述,不包括这个函数的低阶项和首项系数。使用这种方式时,时间复杂度可被称为是渐近的,亦即考察输入值大小趋近无穷时的情况。
代码说明
1 package com.test.springboot.starter.service; 2 3 /** 4 * 时间复杂度 5 * 算法一般使用T(n)简化的估算值来衡量代码的执行的速度 6 * 这段简化的估算值叫做时间复杂度 7 * <p> 8 * T(n): 某段代码的总执行次数 9 * n: 输入数据的大小或输入数据的数量 10 * <p> 11 * T(n) = 2 =》 O(1) 12 * T(n) = 3n + 3 =》 O(n) 13 * T(n) = 5n^3 + 666n^2 + 33 =》 O(n^3) 14 * <p> 15 * T(n)是不是常数 16 * - 是:时间复杂度为O(1) 17 * - 否:时间复杂度为O(保留T(n)的最高次项并去掉最高次项d的系数) 18 * 19 * 时间复杂度排序从快到慢: 20 * 常数时间 O(1) 21 * 对数时间 O(logn) 22 * 线性时间 O(n) 23 * 线性对数时间 O(nlogn) 24 * 二次时间 O(n^2) 25 * 三次时间 O(n^3) 26 * 指数时间 O(2^n) 27 */ 28 public class TimeO { 29 30 /** 31 * 调用一次 func1 方法 32 * T(n) = 2 =》 O(1) 33 * <p> 34 * T(n): 某段代码的总执行次数 35 * n: 输入数据的大小或输入数据的数量 36 * 37 * @return 38 */ 39 int func1() { 40 System.out.println("Hello World!"); 41 return 0; 42 } 43 44 /** 45 * 调用一次 func2 方法 46 * T(n) = 3n + 3 =》 O(n) 47 * <p> 48 * T(n): 某段代码的总执行次数 49 * n: 输入数据的大小或输入数据的数量 50 * 51 * @param n 52 * @return 53 */ 54 int func2(int n) { 55 for (int i = 0; i < n; n++) { 56 System.out.println("Hello World!"); 57 } 58 return 0; 59 } 60 61 62 //// 以下为其他时间复杂度示例 63 64 /** 65 * 调用一次 func3 方法 66 * T(n) = n^2 =》 O(n^2) 67 * 68 * @param n 69 */ 70 void func3(int n) { 71 for (int i = 0; i < n; n++) { 72 for (int j = 0; j < n; j++) { 73 System.out.println("Hello World!"); 74 } 75 } 76 } 77 78 79 /** 80 * 调用一次 func4 方法 81 * T(n) = n^2 + n =》 O(n^2) 82 * 83 * @param n 84 */ 85 void func4(int n) { 86 for (int i = 0; i < n; n++) { 87 for (int j = 0; j < n; j++) { 88 System.out.println("Hello World1"); 89 } 90 } 91 for (int i = 0; i < n; n++) { 92 System.out.println("Hello World2"); 93 } 94 } 95 96 /** 97 * 调用一次 func5 方法 98 * T(n) = n^2 =》 O(n^2) 99 * 100 * 以n的最大值作为时间复杂度的依据 101 * 102 * @param n 103 */ 104 void func5(int n) { 105 if (n > 100) { 106 for (int i = 0; i < n; n++) { 107 for (int j = 0; j < n; j++) { 108 System.out.println("Hello World1"); 109 } 110 } 111 } else { 112 for (int i = 0; i < n; n++) { 113 System.out.println("Hello World2"); 114 } 115 } 116 } 117 118 119 /** 120 * 调用一次 func6 方法 121 * T(n) = n + (n - 1) + (n - 2) + (n - 3) + ... + 2 + 1 122 * = n * (n + 1) / 2 123 * =》 O(n^2) 124 * 125 * @param n 126 */ 127 void func6(int n) { 128 for (int i = 0; i < n; n++) { 129 for (int j = 0; j < i; j++) { 130 System.out.println("Hello World!"); 131 } 132 } 133 } 134 135 }