一、算法
-
算法是指解决问题的一种方法或一个过程。是若干指令的有穷序列。算法具有5个重要特性:
- 有穷性:算法必须在执行有穷步之后结束,且每一步都可以在有穷的时间内完成
- 确定性:算法的每条指令必须由确切的含义,无歧义的
- 可行性:算法中描述的操作都可以通过已经实现的基本运算执行有限次来实现
- 输入:一个算法有0个或多个输入
- 输出:一个算法有1个或多个输出
-
算法与程序的区别:
- 算法是解决问题的方法、步骤
- 程序是算法的具体代码实现
- 算法是程序设计的核心,算法的好坏直接决定了程序的效率
二、算法设计
- 常用的算法设计技术:
- 分治法
- 动态规划法
- 贪心法
- 回溯法
- 分支限界法
- .....
三、算法的表示
- 自然语言
- 流程图
- 程序设计语言
- 伪代码
四、算法复杂度分析
-
算法复杂度 = 算法所需要的计算机资源
- 算法的时间复杂度T(n):对CPU的使用时间
- 算法的空间复杂度S(n):对内存的临时占用空间
-
其中n是问题的规模(输入大小)
1.空间复杂度
- 空间复杂度(Space Complexity)是对一个算法在运行过程中临时占用存储空间大小的量度,记作S(n)=O(f(n))
2.时间复杂度
-
时间复杂度从小到大排序:
- 常数阶O(1)
- 对数阶O(log2n)
- 线性阶O(n)
- 线性对数阶O(nlogn)
- 平方阶O(n2)
- 立方阶O(n3)
-
最坏情况下的时间复杂性
-
最好情况下的时间复杂性
-
平均情况下的时间复杂性