什么是算法

6 阅读2分钟

什么是算法

很多人一听到"算法"就觉得很高深,好像只有搞 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)

你将学会:

  • 如何判断算法快慢
  • 为什么有些代码会很慢
  • 如何写出更高效的代码