从这里开始-算法的时间复杂度介绍
1. 简介
在计算机科学中,算法的时间复杂度将算法运行所需的时间量化为表示输入的字符串长度的函数。
2. 大O符号
算法的时间复杂度通常用大O符号表示,其中不包括系数和低阶项。当以这种方式表示时,时间复杂度被称为渐近描述,即当输入大小趋于无穷大时。
例如,如果一个算法对所有大小为n的输入所需要的时间最多为5n3 + 3n,则渐近时间复杂度为O(n3)。稍后再详细介绍。
再举几个例子:
1 = O(n)
n = O(n2)
log(n) = O(n)
2 n + 1 = O(n)
3.O(1)常数时间:
不管输入大小如何,如果一个算法需要相同的时间,我们就说它在常数时间内运行。
例子:
数组:访问任意元素
固定大小的堆栈:push和pop方法
固定大小的队列:入队列和出队列方法
4. O(n)线性时间
如果一个算法的时间执行与输入大小成正比,即时间随着输入大小的增加而线性增长,则该算法被称为在线性时间内运行。
考虑下面的例子。下面我线性搜索一个元素,它的时间复杂度是O(n)。
int find = 66;
var numbers = new int[] { 33, 435, 36, 37, 43, 45, 66, 656, 2232 };
for (int i = 0; i < numbers.Length - 1; i++)
{
if(find == numbers[i])
{
return;
}
}
更多的例子:
数组:线性搜索,遍历,查找最小值等
ArrayList:包含方法
Queue:包含方法
5. O(log n)对数时间:
如果一个算法的执行时间与输入大小的对数成正比,则该算法在对数时间内运行。
示例:二分搜索
回想一下“二十个问题”游戏——任务是在一段时间内猜测一个隐藏数字的值。每次你猜的时候,都会被告知你猜的是太高还是太低。二十题游戏暗示了一种策略,使用你的猜测数字来减半间隔大小。这是一个被称为二分搜索的一般问题解决方法的例子。
6. O(n2)二次时间
如果一个算法的执行时间与输入大小的平方成正比,我们就说它在二次时间内运行。
例子:
冒泡排序
选择排序
插入排序
7. 一些有用的链接
大0误解
算法复杂度的确定
大O小抄