为什么要学习算法?
学算法并非为了工作中实现它,而是面对实际问题善于找到最优解。
人的知识越完备,经验越多,分析问题就越深入。
参考书目:《Hello algo》
基本概念
算法的定义
算法(algorithm)是一组指令或操作步骤,其特性包括:
- 明晰的输入和输出
- 可行性:有限步骤、有限时间和内存空间。
- 幂等性:同样的输入始终相同的输出。
数据结构定义
数据结构(data structure)是组织和存储数据的方式,包括内容、关系、操作,其设计目标为:
- 更小的空间
- 更快的操作
- 简洁的信息表示。
[!NOTE]
数据结构设计是一个权衡的过程,想要某方面提升,往往需要另一方面的损失。
数据结构与算法的联系

算法与数据结构结合才能高效解决实际问题,常说的算法实际上也包括了数据结构。
复杂度分析
算法的设计,分为两个步骤:
- 找到问题的解
- 寻找最优解
对于步骤一,毋庸置疑,算法需要正确的将满足条件的全部输入都能在规定时间内映射到输出空间。
对于步骤二,所谓最优,即空间效率和时间效率都处于较高水准,并且综合两个指标来看属于最优水平。
而有效评估算法效率,则需要复杂度分析。
复杂度分析的方法
复杂度分析主要有两种方法。
- 实际测试:直接用测试用例运行两个方法,监控记录运行时间和内存占比。
- 缺点:难以排除测试环境diff带来的干扰;完整测试依赖较多资源和时间。
- 理论估算:通过计算来估算算法效率,也称为渐进复杂度分析(asymptotic complexity analysis)。
对于渐进复杂度分析,它描述了随着输入数据规模增加,算法时间和空间的增长趋势,而非具体值。