题记
算法之于真正的程序员来说,其重要性无需多言。我们听过无数的声音“算法工作中几乎用不到,都是应付面试”,“面试造航母,工作拧螺丝”诸如此类,云云。
但是,我认为对于真正的程序员来说,算法如兵法,是必须攻克的“高地”。
一、算法
1.算法的5大特征
- 1.输入: 算法具有0个或多个输入
- 2.输出: 算法至少有1个或多个输出
- 3.有穷性: 算法在有限的步骤之后会自动结束而不会无限循环,并且每一个步骤可以在可接受的时间内完成
- 4.确定性:算法中的每一步都有确定的含义,不会出现二义性
- 5.可行性:算法的每一步都是可行的,也就是说每一步都能够执行有限的次数完成
2.算法的目的
- 更快(运行)
- 更省(空间)
3.衡量算法优劣的方式 – 时间、空间复杂度分析
- 1.事后统计法(真实的运行代码,统计、监控得到时间和内存占用):受硬件条件影响较大,受数据规模影响很大,单纯比较时间并无意义;
- 2.大 O 复杂度表示法 (不用具体的测试数据来测试,就可以粗略地估计算法的执行效率的方法)
我们假定计算机执行算法每一个基本操作的时间是固定的一个时间单位,那么有多少个基本操作就代表会花费多少时间单位。显然对于不同的机器环境而言,确切的单位时间是不同的,但是对于算法进行多少个基本操作(即花费多少时间单位)在规模数量级上却是相同