算法(algorithm)

算法基础总览

算法基础总览

算法不是随意的一串步骤,而是一组能够被计算机执行、能够在有限资源内解决问题的明确指令。 学习算法,既要理解它“是什么”,也要理解它“好不好”、以及“怎样表达”。

算法是什么

在计算机科学中,算法是指一组计算机可运行的有限指令, 能够在有限的空间和时间内,通过计算、数据处理、逻辑推理等方式解决某种问题。

输入
明确步骤
计算过程
输出结果

换句话说,算法就是“解决问题的方法”,但这种方法不能模糊,必须足够清楚, 让计算机能够照着一步一步执行出来。

例如: 从一组学生成绩中找出最高分,这件事就可以设计成一个算法: 读入成绩 → 逐个比较 → 更新最大值 → 输出答案。

怎样衡量算法优劣

比较算法时,通常不会只看“能不能做出来”,更重要的是看它需要花多少时间、占多少空间。

时间复杂度

描述算法运行时,执行步骤随数据规模增长而变化的快慢。它反映“做这件事要花多久”。

空间复杂度

描述算法在运行过程中,额外占用存储空间随数据规模增长而变化的情况。它反映“要占多大地方”。

同样解决一个问题,不同算法的消耗可能差很多。下面用示意条形图展示“数据变大后,代价也会变化”。

简单查找
普通排序
低效方法

算法的五大特征

一个真正合格的算法,通常要同时满足下面五个条件。少了其中某一项,它就很难称为规范的算法。

1

有输入

算法可以有若干输入项,也可以没有输入,但输入的形式必须明确。

2

有输出

算法必须产生至少一个输出结果,否则就无法体现“解决了什么问题”。

3

确定性

同样的输入,应当得到确定的处理过程和结果,不能模糊不清、含糊不定。

4

有穷性

算法必须在有限步骤、有限时间、有限空间内结束,不能无限运行下去。

5

可实现

算法必须能够用计算机语言描述并执行,而不只是停留在抽象想法上。

算法如何描述

设计算法之后,还需要把它清楚地表达出来。常见的描述方式有三种,各自适合不同场景。

自然语言

最容易理解,适合入门和口头说明,但如果步骤多,容易出现歧义,不够严格。

流程图

用图形符号展示执行流程,结构直观,特别适合讲解判断、循环和整体过程。

伪代码

介于自然语言和程序代码之间,既保持清晰结构,又不受具体编程语言限制。

一句话记住算法

本质 算法是解决问题的一组明确、有限、可执行步骤。
评价 算法优劣常用时间复杂度和空间复杂度衡量。
特征 输入、输出、确定性、有穷性、可实现性,缺一不可。
表达 自然语言便于说明,流程图便于展示,伪代码便于实现。