什么是算法
很多人一听到"算法"就觉得很高深,好像只有搞 AI 或者做科研的人才需要。
其实 算法每天都在我们身边。
例如做饭:
1. 买菜
2. 洗菜
3. 切菜
4. 炒菜
5. 装盘
这其实就是一套 解决问题的步骤。
而这正是算法的本质。
算法的定义
算法(Algorithm)就是解决某个问题的一系列明确步骤。
简单理解:
输入 → 按步骤处理 → 输出结果
例如:
问题:
计算 1 + 2 + 3 + ... + n
输入:
n
输出:
总和
算法的五个特征
一个完整的算法通常具有以下五个特征。
1 输入(Input)
算法必须有输入。
例如:
计算 1 到 n 的和
输入就是:
n
2 输出(Output)
算法必须产生结果。
例如:
1 + 2 + ... + n 的结果
3 有穷性(Finiteness)
算法必须在 有限步骤内结束。
例如:
while(true) {}
这种死循环就 不是算法。
4 确定性(Definiteness)
每一步操作必须 明确且可执行。
例如:
把水烧开
这是明确的。
但如果写:
等一会
这就不明确。
5 可行性(Effectiveness)
算法的每一步必须 能够被执行。
例如:
用 CPU 计算
而不是:
用魔法计算
一个简单算法示例
问题:
计算 1 + 2 + 3 + ... + n
方法一:循环
思路:
1 + 2 + 3 + ... + n
逐个累加
Swift 实现:
func sum(_ n: Int) -> Int {
var result = 0
for i in 1...n {
result += i
}
return result
}
执行示例:
n = 5
1 + 2 + 3 + 4 + 5
= 15
特点:
需要循环 n 次
方法二:数学公式
数学家早就发现了规律:
1 + 2 + ... + n = n * (n + 1) / 2
Swift 实现:
func sum(_ n: Int) -> Int {
return n * (n + 1) / 2
}
例如:
n = 5
5 * 6 / 2 = 15
为什么要学习算法
同一个问题:
可以有不同算法
但效率可能差别巨大。
例如:
算法A:计算100万次
算法B:计算1次
如果是在:
- 搜索引擎
- 大数据
- 游戏
- 高并发系统
差距会非常明显。
所以算法的核心就是:
用更快、更省资源的方式解决问题
算法与程序的区别
很多初学者会混淆 程序 和 算法。
简单理解:
概念 含义
算法 解决问题的方法 程序 算法的代码实现
例如:
排序
是一种算法。
而:
Swift / Java / Python 的排序代码
只是算法的实现。
日常开发中的算法
其实很多开发场景都在使用算法,例如:
搜索
数组查找
排序
商品价格排序
缓存
LRU算法
推荐系统
推荐算法
所以算法并不是脱离实际的知识。
下一课
下一课我们会讲 算法世界最重要的概念:
时间复杂度(Time Complexity)
你将学会:
- 如何判断算法快慢
- 为什么有些代码会很慢
- 如何写出更高效的代码