常考算法的时间复杂度
- 数据元素是数据的基本单位,通常作为一个整体进行考虑和处理。一个数据元素可由若干数据项组成,数据项是构成数据元素的不可分割的最小单位。例如,学生记录就是一一个数据元素,它由学号,姓名,性别等数据项组成,多个数据元素的集合称为数据对象,加上集合上的操作构成数据类型。
- 算法的特性:有穷性,确定性,可行性,输入,输出
- 数据结构三要素:逻辑结构,物理结构,数据运算
- 可以用抽象数据类型定义一个完整的数据结构
- 与存储结构有关的术语:循环队列(只能顺序存储),哈希表(只能散列存储),单链表(只能链式存储),无关的术语如:栈(可顺序存储也可链式存储)
- 属于逻辑结构的是有序表(与物理结构无关)
- 数据的逻辑结构一定独立于物理结构,但物理结构不独立于逻辑结构
- 链式存储节点间的存储单元地址不连续,但节点内的存储单元地址一定连续
- 算法的定义是问题求解步骤的描述
- 某算法的时间复杂度是O( n 2 n^2 n2),表明该算法的执行时间与 n 2 n^2 n2成正比,说明算法的时间复杂度T(n)满足 T ( n ) ≤ c n 2 T(n)\leq cn^2 T(n)≤cn2,即 T ( n ) = O ( n 2 ) T(n)=O(n^2) T(n)=O(n2),时间复杂度T(n)是问题规模n的函数,其问题规模仍然是n而不是n^2
- 算法原地工作的含义是指开辟额外的辅助空间为常数级
- n是一个规模,而不是具体的数值,所以时间复杂度的大小是一定的
O ( 1 ) < O ( l o g 2 n ) < O ( n 1 / 2 ) < O ( n ) < O ( n l o g 2 n ) < O ( n 2 ) < O ( n 3 ) < O ( n ! ) < O ( n n ) O(1)<O(log_2n)<O(n^{1/2})<O(n)<O(nlog_2n)<O(n^2)<O(n^3)<O(n!)<O(n^n) O(1)<O(log2n)<O(n1/2)<O(n)<O(nlog2n)<O(n2)<O(n3)<O(n!)<O(nn)
11. T ( n ) = { 1 n = 1 2 T ( n / 2 ) + n n > 1 T(n)=\left\{ \begin{array}{rcl} 1 & {n = 1}\\ 2T(n/2)+n & {n > 1} \end{array} \right. T(n)={12T(n/2)+nn=1n>1
设n是2的整数次幂,求时间复杂度
- 斐波拉契算法的时间复杂度
递归:O(n^2)
迭代:O(n)