时间复杂度在关心些什么
如果接触过算法,那么对于算法的时间复杂度分析一定不陌生,因为时间复杂度是算法优劣的一个重要评价标准。
对于一个算法,我们不光关心它在某个规模输入的情况下耗时多少,我们更关心的是,当输入规模疯狂增长的时候,算法耗时增加多少,是按线性形式增加的?指数增加的?对数形式增加的?比如当你的算法接收的输入规模从k个数变到nk个数时,你的耗时是增加了n倍(线性速度增加)?还是增加了n2倍(平方的速度)?还是增加了log(n)倍(对数形式增加)。
时间复杂度是一个函数,它描述了算法的运行时间,并且给出了运行时间与输入规模之间的关系。
时间复杂度的分析记号:O(), Ω(), Θ(),o(), w()
对于时间复杂度的分析,我们都是使用渐进分析,这种分析方法关注地核心就是算法耗时会如何随着输入规模增长?我们使用三种记号来说明这个问题。
我们使用字母n来表示输入的规模
1. O()
符号O()表示了一种上界的感觉,也是我们常说的大O表示法,O()在这三种符号中用得最多,因为涉及到时间复杂度分析,我们经常会考虑最坏情况,因为在代码的实际运用中,首先最坏情况发生的可能性还不小,其次我们需要衡量最坏情况发生的结果我们是否能接受。
它的定义也用到了极限的思想,因为渐进分析,就包含有当n趋于无穷的意思。如果学过数学分析,了解ε