作为一个已经2年经验的程序员,随着项目经验的逐渐积累,特别是技术栈深度和广度的逐渐扩展,现在越来越认识到算法基础 也是越来越重要,在某些时候更是会让你在技术栈深度扩展时过早的出现瓶颈(只知其一不知其二或者无法做到举一反三)。所以现在决定在算法领域开始自己的积累,也希望大家可以一起成长。
在算法的学习中,算法分析是基础的一部分,在设计算法的时候,效率是非常重要的因素之一。所以在设计算法前,快速、合理的对算法的效率进行分析是进行算法设计的必备基础技能之一。
在计算机领域中,在处理相同的数据问题时,衡量两个算法孰优孰劣无非也就两点:
1、算法执行需要的时间(这里我们称为时间复杂度)
2、算法执行需要的内存空间(空间复杂度)
那么怎么去快速和准确的对某个算法的时间复杂度和空间复杂度。难道真的要挨个语句和指令去计算时间和空间吗?其实不然。MIT算法导论中第二章讲述了,算法分析是对一个算法所需要的资源(时间、内存空间、带宽等)进行预测。但在程序实际运行中,实际所消耗的资源跟众多因素(操作系统、编译器、CPU等)相关。如何能在如此复杂的环境中快速准确的计算并比较各算法之间优劣势呢?这里需要在算法分析时,摒弃掉一些琐碎的东西。那主要摒弃哪些东西呢?
总所周知,一个程序执行所需要的总时间主要取决于以下三点:
1.执行每条语句所需要的时间<