复杂度概述
- 一个程序或算法的时间效率,也成“时间复杂度”,有时简称“复杂度”。
- 复杂度常用大写字母O和小写字母n表示,比如O(n),O()等。n代表问题的规模。
- 时间复杂度是用算法运行过程中,某种时间固定的操作需要被执行的次数和n的关系来度量的。例如,在无序数列中查找某个数,复杂度是O(n)。
- 计算复杂度的时候,只统计执行次数最多的(n足够大时)那种固定操作的次数。比如某个算法需要执行加法次,除法n次,那么就记其复杂度是O()。
- 复杂度有“平均复杂度”和“最坏复杂度”两个概念。两者可能一致,也可能不一致。
- 如果复杂度是多个n的函数之和,则只关心随n的增长而增长的最快的那个函数,如:
- O(+)—> O()
- O(+)—> O()
- O(n!+)—> O(n!)
常见的复杂度
- 常熟复杂度O(1)
- 对数复杂度O(logn)
- 线性复杂度O(n)
- 多项式复杂度O()
- 指数复杂度O()
- 阶乘复杂度O(n!)
常见算法的复杂度举例
- 在无规序列中查找某个数,即顺序查找O(n)
- 平面上有n个点,要求出任意两点之间的距离O()
- 插入排序、选择排序、冒泡排序O()
- 快速排序O(n*logn)
- 二分查找O(logn)
参考自:中国大学慕课,程序设计与算法(一) C语言程序设计,北京大学,郭炜