news 2026/4/23 11:02:18

算法是什么

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
算法是什么

1. 从“做事步骤”到“计算过程”

这一节先回答一个最基本的问题:什么叫算法

算法是一种定义良好的计算过程。它接收一个或一组输入,经过有限个明确步骤,在有限时间内产生一个或一组输出。也可以说,算法就是把输入转换成输出的一套清楚规则。

这里有三个关键词:

  • 输入:问题给定的数据
  • 过程:一系列明确、可执行的步骤
  • 输出:满足要求的结果

所以,算法不是“模糊的思路”,而是能够真正执行的求解过程

2. 算法是在解决“计算问题”

算法总是对应某个计算问题

一个计算问题,先要说明:

  • 输入是什么
  • 输出应该满足什么条件

算法则负责给出一套具体方法,使得每个合法输入都能算出对应的结果。

例 1:排序问题

输入:

⟨a1,a2,…,an⟩ \langle a_1, a_2, \dots, a_n \ranglea1,a2,,an

输出:

输入序列的一个重排,并且满足从小到大有序。

例如输入:

⟨31,41,59,26,41,58⟩ \langle 31, 41, 59, 26, 41, 58 \rangle31,41,59,26,41,58

输出应为:

⟨26,31,41,41,58,59⟩ \langle 26, 31, 41, 41, 58, 59 \rangle26,31,41,41,58,59

这个例子说明了一点:

算法不是为了“写程序”而存在,而是为了把一个问题的输入输出关系真正实现出来。

3. 正确算法是什么意思

一个正确算法,必须满足两个条件:

(1) 能停下来

算法不能无限循环,必须在有限时间内结束。

(2) 结果是对的

结束还不够,输出还必须真的是这个问题的正确答案。

所以,判断一个算法,至少要问两个问题:

  • 它会不会停机?
  • 它算出来的是不是对的?

因此,正确算法可以理解为:

对每个合法输入,都能在有限时间内停止,并输出正确结果的算法。

4. 一个问题通常不只有一种算法

排序是最好的说明。

同样是排序,可以有很多不同做法。真正选择哪一种,要看很多条件:

  • 数据量大不大
  • 数据是不是已经部分有序
  • 元素取值有没有特殊限制
  • 机器结构是什么
  • 数据放在内存里还是磁盘里

这说明:

算法不是“有没有办法做”,而是“用什么方式做更合适”。

也正因为这样,后面才会学习复杂度分析。因为不同算法虽然都能解决问题,但效率可能差得非常大。

5. 算法不只出现在教材例子里

算法的应用范围非常广。比如:

  • 生物信息:DNA 序列分析
  • 互联网:路由选择、搜索
  • 电子商务:公钥密码、数字签名
  • 资源分配:把有限资源用在最合适的位置

还可以看到一些具体问题:

最短路径

给定地图或网络,怎样从一个点走到另一个点,并且总路程最短。

拓扑排序

如果一个零件依赖另一个零件,应该按照什么顺序安排,才能保证前置部分先完成。

聚类

根据相似性把对象分组,例如辅助判断肿瘤更可能属于哪一类。

压缩

怎样用更短的编码表示信息,减少存储空间。

这些例子想说明一件事:

算法不是脱离现实的“数学游戏”,而是很多系统真正工作的底层逻辑。

6. 数据结构为什么会在这里出现

这一节还专门提到数据结构

数据结构是组织和存储数据的方法。
学习算法时,不能把它和数据结构分开,因为很多算法之所以快,不只是步骤设计得好,还因为数据放得对。

例如:

  • 查找时,数组、链表、树的效率不同
  • 插入、删除时,不同结构成本也不同

所以可以先有一个直觉:

算法解决“怎么做”,数据结构解决“数据怎么放”。
两者通常是一起决定效率的。

7. 不是所有问题都有高效算法

有些问题,我们知道高效算法,比如最短路径。

但也有些问题,目前没有已知的高效精确算法。典型例子就是旅行商问题

这类问题提醒我们:

  • 有时候可以求精确解
  • 有时候只能求近似解
  • 有时候重点不是“最优”,而是“足够好且算得快”

所以算法学习从一开始就不是“万能解法大全”,而是在理解:

  • 哪些问题容易
  • 哪些问题难
  • 难问题该怎么处理

8. 配图

9. 小结

  • 算法是定义良好的计算过程:输入经过明确步骤,在有限时间内变成输出。
  • 算法总是对应某个计算问题,问题先规定输入输出关系,算法再给出具体做法。
  • 一个正确算法必须同时满足:能停机,且结果正确。
  • 同一个问题通常有多种算法,区别不只在能不能做出来,更在效率和适用条件。
  • 算法广泛存在于排序、搜索、路由、加密、优化等现实场景中。
  • 数据结构和算法密切相关,前者影响数据组织方式,后者影响求解步骤。
  • 并不是所有问题都有高效精确算法,算法学习也包含对“难问题”的认识。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 22:37:17

如何快速免费获取Axure RP中文语言包?5分钟解决界面语言障碍

如何快速免费获取Axure RP中文语言包?5分钟解决界面语言障碍 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 如果您正…

作者头像 李华
网站建设 2026/4/18 2:00:02

**Pytest实战进阶:用插件化设计重构测试架构,让自动化测试更优雅高效**在现代软件开发中,**单元测试与集成测试**早已不是可有

Pytest实战进阶:用插件化设计重构测试架构,让自动化测试更优雅高效 在现代软件开发中,单元测试与集成测试早已不是可有可无的环节,而是构建高质量代码的核心保障。而 Pytest 作为 Python 生态中最主流的测试框架之一,凭…

作者头像 李华
网站建设 2026/4/18 9:04:24

UNIT-00:Berserk Interface 深入浅出讲解 Python 核心语法

UNIT-00:Berserk Interface 深入浅出讲解 Python 核心语法 你是不是觉得学编程很难,尤其是看那些厚厚的教材,满篇都是看不懂的术语?或者在网上找教程,东一榔头西一棒子,学了半天还是不知道怎么动手写代码&…

作者头像 李华
网站建设 2026/4/18 9:02:39

从零手写感知机到MindSpore实战:我的鸢尾花分类作业踩坑全记录

从零手写感知机到MindSpore实战:我的鸢尾花分类作业踩坑全记录 第一次接触机器学习作业时,看着"鸢尾花分类"这个看似简单的题目,我完全没料到后面会经历这么多波折。从手写感知机时对梯度下降的困惑,到使用MindSpore框架…

作者头像 李华