由于环境影响,以及职业规划等,决定从0开始学习算法。最近找了本书《数据结构与算法》,想从头开始补充知识。此文用来记录学习历程。
概念
算法是解决一个问题而采取的方法和步骤,对解题方案的准确而完整的描述,是一系列解决问题的清洗指令。
算法的属性
- 确定性
- 可行性
- 有穷性
- 输入性
- 输出行
算法的三个层次
- 第一层 基本算法,如排序,查找和递归 典型课程《数据结构》
- 第二层 涉及算法的时间复杂度和空间复杂度,如分治法,贪心算法和动态规划法等。 典型课程《算法设计与分析》
- 第三层 涉及智能优化算法的学习,如遗传算法、蚁群算法和聚类算法等。 典型课程《工程最优化方法》 《模式识别》 《人工智能》等
方法
根据3个层次递进式学习,一般会经历阅读与分析程序、模仿编程、掌握常见的编程模块、简单编程和复杂编程等过程。
步骤
- 学习一门语言
- 熟悉基本算法 查找 排序等
- 掌握数据结构 尤其是树和图
- 刷题练习 练习网站 https://leetcode-cn.com/problemset/algorithms/ https://www.luogu.com.cn/training/mainpage https://vjudge.net/contest http://codeforces.com/contests http://acm.hdu.edu.cn/ http://bestcoder.hdu.edu.cn/ ##空间复杂度 临时占用存储空间大小的量度 s(n) =O( f(n) ) ##时间复杂度 算法中模块n基本操作重复执行的次数记作f(n), 算法的时间复杂度为T(n) = O( f(n) ) 算法的运行时间主要取决于
- 每一条语句执行所需要的时间
- 每一条语句执行的次数 常见的时间复杂度有:常数阶O(1)、对数阶O(logn)、线性阶O(n)、线性对数阶O(nlogn)、平方阶O(n2 )、立方阶O(n3)等 ##提供算法效率的方法
- 降低程序复杂度 环形复杂度计算方法1、边数-点数+2 2、判断节点数+1
- 选用高效的算法 ##算法的表示方法
- 流程图
- N-S 图
- 伪语言