数据结构和算法课程上都有关于时间复杂度的分析,但是自己一直都是一知半解,似乎懂却又不能解释清楚。希望这篇博客作为自己记录成长的开端!
为什么要有时间复杂度以及空间复杂度
评价一个算法有几大标准,主要包括Correctness(正确性),Amount of work done(工作量),Amount of space used(使用空间),Simplicity(简单性),Optimality(最优性)
其中正确性涉及到数学证明;工作量表示整个算法要干多少活,与机器以及输入密切相关,通过基本操作的数目来衡量,此时与时间复杂度相关联;使用空间即空间复杂度,至于简单性和最优性则属于算法的优化部分。
时间复杂度
衡量一个算法好坏最直接的,最容易想到的也就是该算法的计算速度,所需的计算时间,然而计算时间与很多因素相关,选择影响最大,最关键的因素-问题的规模(问题的输入规模)来进行考虑,将特定算法处理规模为n的问题所需的时间记为T(n)。
即使输入规模相同,输入的顺序也会影响计算时间(可以联想排序算法不同输入情况)时间复杂度分为3种情况:最好情况Tbest,Tave,Tworst。简化问题,往往考虑Tworst,即最坏情况下的时间复杂度。并考虑大规模问题,注重时间复杂度随问题规模扩大的总体变化趋势(渐进分析)(类似数学中的极限),引入大O记号来表示T(n)的渐进上界。
<