一、复杂发
1.常见的时间复杂度分析方法
(1):循环次数
(2)均摊分析
(3)递归式----主定理
2.复杂度:
(1)O(1):基本运算、+、 -、 *、 /、 % 、寻址
(2)O(logn) :二分查找
(3)O(n^1/2):枚举约数
(4)O(n):线性查找
(5)O(n^2):朴素最近点对
(6)O(n^3):Floyd最短路径、普通矩阵乘法
(7)O(nlogn):归并排序,快速排序的期望复杂度,基于比较排序的算法下界
(8)O(2^n):枚举全部子集
(9)总结:优秀 O(1) < O(logn) < O(n1/2) < O(n) < O(nlogn)
可能可以优化 O(n2) < O(n3) < O(2n) < O(n!)
3.将1,2,3,4.........n序列进行排序,
二、均摊分析
1. (1)多个操作,一起算时间复杂度
(2)MULTIPOP的队列,可以一次性出队k个元素
每个元素只出入队列一次
动态数组尾部插入操作(vector)
一旦元素超过容量限制,则扩大一倍,再复制
2.eg最大子数组和
给定数组a[1…n],求最大子数组和,即找出1<=i<=j<=n,
使a[i]+a[i+1]+…+a[j]最大(arrayList)。vector底层的实现是数组,数组的大小是有效的,
当数组快要放满的时候,就开辟一个原数组两倍大的空间,将原数组复制到新的数组中去
(1)暴力求解,枚举