目录
算法设计与分析讲义1
(来源于hw-dong的算法设计与分析课程)
算法的定义
算法是解决一类问题或某个计算的过程(方法),算法包含有限步可行的明确的操作。
算法的性能分析
时间复杂度
max = a[1]; #1次
for i = 2 to n: #n-1次复制,一次比较(i>n?),共n次
if a[i] > max: #n-1次
max=a[i] #<n-1次
return max #共计<3n-1次
空间复杂度
算法的重要性
计算机科学的核心,每个计算机科学的分支都以算法为核心,如:
- 操作系统中的进程调度
- 编译原理中的词法分析
- 计算机网络中的路由算法,搜索引擎算法
- 机器学习中的神经网络,随机森林,支持向量机,智能算法
- 密码学的密码算法,数论算法
- 计算机生物学:动态规划
- 计算机图形学:计算几何,光照渲染,流体仿真,动画
算法的作用
- 大数据处理要求计算速度,计算速度取决于硬件和算法
- 深度学习/AI:人脸识别,自动驾驶等
- 电子商务平台:推荐算法
- 自媒体:信息推送,如Youtube视频推送
- 创造计算机中更快的数学的计算方法:如,大整数乘法等
算法的设计
如何设计有效的、正确的、高效的算法?
- 算法设计包括技术(设计模式,本课程所主要介绍的)与艺术(创造性思维,如高斯解决1至100的加法的方法)
算法设计的策略(也是本课程的学习目录)
- 穷举法/蛮力法(迭代法,回溯法):列举所有可能情况。 暴力求最大值,八皇后,背包问题(Knapsach Problem)
- 贪婪法/贪心法:选择当前局部最优的策略。 Dijsktra最短路径算法,Prim, 找零钱
- 分治法:将问题转化为若干个更简单的小问题(divide),逐一解决之(conquer),最终解决原问题(combine)。斐波那契数列(递归),大整数相乘,归并排序,汉诺塔
- 动态规划:避免重复子问题的重复计算(以空间换时间)。
算法的表示
- 自然语言
- 伪代码
- 编程语言