算法复杂度
算法的复杂度分为时间复杂度、空间复杂度,但一般我们只讨论的是时间复杂度,使用O()进行表示。
计算代码的时间复杂度通过以下步骤完成:
- 用常数1取代运行时间所有的加法常数
- 修改后的运行次数函数中,只保留最高项
- 如果最高阶项目存在且不是1,去除与这个项相乘的常数,得到最终结果
总结一下就是:我们需要清楚的知道,到底在程序的哪一个环节出现了复杂度的增加,复杂度增加的决定性因素出现在哪里?
一般地,算法复杂度有
- 常数阶(循环次数与问题无关代码)
- 线性阶(循环n次)
- 对数阶(例如while循环)
- nlogn阶(循环了n次的while循环)
- 平方阶(例如for循环嵌套)
- 指数阶/阶乘阶(应尽力避免的情况)
算法的空间复杂度,是指使用空间上的开销对时间进行换取,一般这并不是重点。