1_4复杂度

二分查找法O(logn) 所需执行指令数(a*logn)
寻找数组中的最大最小值O(n)

二分查找法O(logn) 所需执行指令数(a*logn)
寻找数组中的最大最小值O(n) 所需执行指令数(b*n)
归并排序法O(nlogn) 所需执行指令数(c*nlogn)
选择排序法O(n^2) 所需执行指令数(d*n^2)

问题:有一个字符串数组,将数组中的每一个字符串按照字母序排序,之后再讲整个字符串数组按照字典序排序,整个操作的时间复杂多是多少?

假设 最长的字符串长度是s,数组中有n个字符串
对每个字符串排序:O(slogs)
将数组中的每一个字符串按照字母序排序:O(nslog(s))
将整个字符串数组按照字典顺序排序:O(s
nlog(n))
整体复杂度:
O(n * slog(s)+s * nlog(n)) = O(n*s(log(s)+log(n)))

插入排序 最差是O(n2) 最好O(n) 平均O(n2)
快速排序 最差O(n2) 最好O(nlogn) 平均O(nlogn)

如果想在1s内解决问题:
O(n2)的算法可以处理大约10^4级别的数据
O(n)的算法可以处理大约10^8级别的数据
O(nlogn)的算法可以处理大约10^7级别的数据

空间复杂度
多开一个辅助的数组 O( n)
多开一个辅助的二维数组O(n2)
多开一个常数空间O(1)

复杂度分析:
双重循环不一定都是O(n2)

复杂度实验:
实验观察趋势:
每次将数据规模扩大十倍,观察时间,来判断该算法的时间复杂度
1_4复杂度_第1张图片
将相邻数据规模进行除法,可以判断算法大约是O(n^2)的时间复杂度

O(log(n))级别的算法,在数据特别大的时候,基本不会增加额外的耗时。
增大数据规模,时间增加的并不是很多

O(nlogn)也不错,但是如果是O(n2)就完全不能接受

不是有递归的算法就是nlogn

递归中进行一次递归调用的复杂度分析
如果递归函数中,只进行一次递归调用,递归深度为depth
在每个递归函数中,时间复杂度为T,
则总体的时间复杂度为O(T*depth)

均摊复杂度分析

你可能感兴趣的:(力扣)