时间复杂度
基本概念
- 什么是大O:大O是用来表示上界的,用它当做算法最坏的情况的运行时间上限,即对任意数据输入的运行时间的上限
- O(n^2)的算法为什么有时候比O(n)的算法更优?
在决定使用算法时,不是时间复杂度越低越好,因为简化后的时间复杂度忽略了常数项,需要考虑数据规模,如果数据规模很小,有时候O(n^2)甚至比O(n)要好(在有常数项的时候)
如:O(5n^2) 和O(100n) 在n<20之前,O(5n ^2)比O(100n)要快 - 如何简化复杂的时间复杂度表达式,原理是什么?
数据量足够大的时候,常数项起不来决定性作用,保留最高项,去掉数量级较小的n - O(logn)中的log是以什么为底?
统一说logn,忽略底数,因为底数可以提取出来
以2为底n的对数 = 以2为底10的对数 * 以10为底n的对数
常数项忽略,所以忽略底数
比较
O(1)常数阶 < O(logn)对数阶 < O(n)线性阶 < O(n^2)平方阶 < O(n^3)(立方阶) < O(2^n) (指数阶)
不同时间复杂度,在1s内处理能处理的数量级
递归的时间复杂度
递归的时间复杂度 = 递归的次数 * 每次递归中操作的次数
求x的n次方
最直观的写法,for循环
此时的时间复杂度为O(n)
int fun(int x,int n) {
int result = 1;