算法分析关键
使用数据结构及算法的目的在于节省存储资源消耗和保证代码执行效率。
算法的执行效率由代码执行的时间粗略估计,
通过实际的测试,可分析算法的的资源消耗以及执行时间,但必须满足测试数据集的完备和测试环境单一。
也可以分析实际代码执行流程,比如代码的循环结构或递归操作,代码的执行时间可以由代码行的总执行次
数估计。
T(n) = O (f(n))
f(n)表示每行代码执行次数总数跟数据规模的关系, O表示随数据规模的增长执行时间增长的变化趋势,即时间复杂度,f(n)可用代码中循环或递归结构的每行代码执行次数表示,然后简化相关系数和常量得到最终时间复杂度,
时间复杂度计算:
1.取决于循环执行次数最多的代码。
2.加法原则(多段循环结构,只取决于循环执行次数最多,最高阶的表达式 ,T(n)=T1(n)+T2(n)=max(O(f(n)), O(g(n))) =O(max(f(n), g(n))))
3乘法原则(循环嵌套的代码,取决于内外代码的复杂度相乘,T(n)=T1(n)*T2(n)=O(f(n))*O(g(n))=O(f(n)*g(n)))
时间复杂度的数量级(从低阶到高阶,越高意味着算法执行效率越低)
O(1),O(logN),O(N),O(NlogN),O(N^2),O(2^N),O(N!)
当存在两个数据规模(m,n)决定算法的执行时间时,加法原则调整为T1(m) + T2(n) = O(f(m) + g(n))。但是乘法法则继续有效:T1(m)*T2(n) = O(f(m) * f(n))。
空间复杂度定义类比时间复杂度,即表示算法的存储空间与数据规模之间的增长关系,常见的空间复杂度就是 O(1)、O(n)、O(n^2 )
评论