算法时间复杂度与空间复杂度分析
时间复杂度分析:
XXXXXXXW:O(N^3)1秒内可以处理大约10^2量级的数据
插入排序法:O(N^2)1秒内可以处理大约10^4量级的数据
选择排序法:O(N^2)1秒内可以处理大约10^4量级的数据
归并排序法:O(NlogN)1秒内可以处理大约10^7量级的数据
寻找数组中最大/最小值:O(N)1秒内可以处理大约10^8量级的数据
二分查找法:O(logN)1秒内可以处理大约10^10量级的数据
二分查找法:O(logN)需要执行的指令数:a*logN
选择排序法:O(N*N) 需要执行的指令数:b*N*N
归并排序法:O(NlogN)需要执行的指令数:c*NlogN
寻找数组中最大/最小值:O(N) 需要执行的指令数:d*N
(a,b,c,d常数项作用不大,具体的根据数据规模作相应的权衡)
*******************************************************************
注:时间复杂度根据最大的来算:N^2 > NlogN > N >1
*****************************************************************************************************
注意:字符串的字典序排序的复杂度
*******************************************************************
********************************************************************
********************************************************************
********************************************************************
********************************************************************
算法的复杂度测试:观察趋势,每次将数据规模提高两倍,看耗时
递归算法的复杂度分析
********************************************************************
下面这个求次幂的递归方法,如果按原始的方法是O(N),递归方法是O(logN)
********************************************************************
下面1+2+4+8= 15,递归方法是O(2^N) 指数级算法问题
********************************************************************
递归方法的归并排序(分治算法)
********************************************************************
均摊算法的复杂度分析
********************************************************************
应用:动态数组、动态栈、动态队列
Vector在开辟空间的过程中,每次开辟是现有的2倍
时间复杂度是:O(1)
********************************************************************
空间复杂度:
多开常数空间(不开):O(1)
多开一个辅助的数组:O(N)
多开一个辅助的二维数组:O(N^2)
递归调用是有空间代价的:递归的深度是多少空间复杂度就是多少!