我们一般用“大o符号符号”来表示时间复杂度:t(n) = o(f(n)) n是影响复杂度变化的因子,f(n)是复杂度特定的算法。
常数阶 o(1)、线性阶 o(n)、对数阶 o(logn)、线性对数阶 o(nlogn)、平方阶 o(n)、三次阶 o(n)k 幂、o(n)、k、指数阶 (2 n)。
int a = 1;int b = 2;int c = 3;
for(i = 1; i <= n; i++)
int i = 1;while(i < n)
可以看到,每次循环时,i 都乘以 2,因此循环总数为 log2n,因此此 ** 的时间复杂度为 o(logn)。
for(m = 1; m < n; m++)
线性对数阶o(nlogn)其实很容易理解,如果时间复杂度是o(logn)的**循环n次,那么它的时间复杂度就是n*o(logn),也就是o(nlogn)。
for(x = 1; i <= n; x++)
如果再次嵌套 o(n) 的 **,则它的时间复杂度为 o(n)。
创建的变量数。
int i = 1;int j = 2;++i;j++;int m = i + j;
int m = new int[n]for(i = 1; i <= n; +i)
在这一段中,第一行 new 一个数组出来了,这个数据的大小是 n,虽然后面有一个循环,但是没有分配新的空间,因此,这个 ** 的空间复杂度主要取决于第一行,即 s(n) = o(n)。
int binarysearch(int arr,int len, int num) else if (num < arr[mid]) else }return -1;}
在二分搜索的情况下,原始搜索内容每次都是二分搜索,因此时间复杂度为 o(logn)。
由于变量值创建一次,因此空间复杂度为 o(1)。
int binarysearchrecursion(int arr[5], int lef, int rig,int aim) else if (arr[mid] 每次进行递归时都会创建一个变量,因此空间复杂度为 o(log2 n)。
int feibonacciinteration(int a,int b,int num) return c; }
时间复杂度 o(n)。
空间复杂度为o(1)。
int feibonaccirecursion(int num)
时间复杂度为 o(2 n)。
空间复杂度为 o(n)。