1.基础介绍
1.数据结构
一组数据的存储,组织结构
2.算法
操作数据的一组方法
2.复杂度分析
2.1.时间复杂度
| 多项式量阶复杂度 | 非多项式量阶复杂度 |
|---|---|
| 常量阶 O(1) | 指数阶 O(2^n) |
| 对数阶 O(logn) | 阶乘阶 O(n!) |
| 线性阶 O(n) | |
| 线性对数阶 O(nlogn) | |
| 平方阶 O(n^2) 立方阶O(n^3) k次阶。。。 |
非多项式量阶的问题为非确定多项式问题,即NP问题
- O(1) 即代码的执行时间与n无关,执行此处往往是一个确定值,算法中不存在循环和递归时往往为n
- O(logn) O(nlogn)
while (i <= n){
i = i *2
}
2^0 * 2^1 * … 2^x = n
x = log2n
统一用logn
一段logn的代码再重复n次,即为nlogn
- O(m+n) O(m*n) 无法评估m和n哪个大,都不能省略
2.2 空间复杂度
表示算法的存储空间与数据规模之间的增长关系
常见的的有:
O(1) O(n) O(n^2)
2.3 均摊时间负责度
平均时间复杂度为加权的一个平均值,即数学期望
均摊时间复杂度:
如数组满之后进行一个整体的扩容,因为要把数组内的n个数据全部移到一个新的连续内存空间,要进行n次操作,消耗时间为o(n),新的内存大小为2n。
而当对接下来的n-1个数据进行操作时,都只需要1的时间,如果把移动的那n时间,平均分摊到之后的n-1次插入操作上,那么分摊下来的时间复杂度仍然是o(1)。
一般情况下,均摊时间复杂度 = 最佳时间复杂度。
579

被折叠的 条评论
为什么被折叠?



