01 开篇词:你知道什么是算法吗?

img

你好,我是悦创。

每章一句:勤能补拙是良训,一分辛劳一分才。——华罗庚

1. 算法的定义

对于算法的解释,全世界的定义是不唯一的。我们给出的算法的定义是:一系列用来解决单个或多个问题,或有执行计算功能的命令的集合。再结合上输入与输出,算法就是将输入转换为输出的一系列计算步骤的集合。

听起来很拗口,对不对?

没关系,我们可以把一个算法比作是一个菜谱。如图1-1所示,原材料就是输入,做出来的成品即为输出,而算法,就是做菜过程中的复杂步骤。

图片描述

图1-1

再换一种方式看算法,算法的本质其实是数学的理论与推导。在还没有发明求和公式之前,如何求出 1+2+3+4+5+…+n ? 逐个数求和虽能算出答案,但过于繁杂。但反观求和公式,无论n取多大的值,计算的步骤和繁琐程度基本不会增加。这就是算法存在的意义。人类在解决复杂问题时所采用的一系列特定的方法,即为算法。

2. 算法与程序的区别

明白了什么是算法,再来看算法和程序的区别。通常来说,程序指一组计算机能识别和执行,并有一定功能的指令。

后者的定义似乎和算法很相似,但算法和程序之间最大的区别在于程序是以计算机能够理解的各式各样的编程语言编写而成的,而算法是可以通过编程语言、图绘、口述等人能够理解的方式来描述的,不一定局限于编程语言的诠释,如图1-2 所示。

图片描述

图1-2

刚才曾提过,算法是一种以数学为本质的计算方法。然而作为方法,则必有正确(可行)、不正确(不可行)和高效、低效之分。

若一个算法对于每一个恰当的输入都以正确的输出终止程序,则可以称这算法是正确的,并正确地解决了给定的问题。若算法以不正确的输出而终止程序,或根本无法终止程序,则这个算法是不正确的。

但显而易见,不是所有的算法都可以通过输入和输出被正确和不正确而简单地分为两大类。譬如人们要预测未来特定事件发生概率,而这种问题无法用结果来检验解决方法是正确与否。因此,算法的正确性的检验也可以回溯到其本质,就是数学的检验,也就是说用数学来证明算法的正确性或可行性。

对于算法至关重要的不只有其正确性,还有它的效率。人类至今的发展,提高最迅速的可以说是计算的效率了。从原始人的结绳计数,到现在的超级计算机太湖之光,计算能力的提升不是区区几个数量级能说明清楚的。

但很不幸,当今计算机的运算速度不是无限快,存储器也不是免费的,如果是,那还研究算法干什么呢?所以如何高效地利用好有限的时间和空间就是算法存在的意义。有趣的是,求解相同问题而设计的不同算法在效率方面通常有着显著的差异,而这些算法效率上的差异要比在硬件或者软件效率上的差异大得多。

回到 1+2+3+4+5+…+n 这个求和问题中。一定程度上说,逐个数相加也可以被看作一种解决求和问题的算法,一种简单,低效的算法。相反,求和公式则是一种较复杂的,高效的算法。但如何来评判一个算法是否高效?时间复杂度和空间复杂度就是很好的丈量工具。时间复杂度和空间复杂度将会在后面的章节中介绍。

3. 算法的应用

算法的应用无处不在,小到普通的排序问题,大到最近举世瞩目的神经网络和深度学习,都很容易寻觅到算法的影子。列举几个赫赫有名的例子:

3.1 机器学习:

神经网络和深度学习可谓当今最热门的算法,而如今这两个算法的应用范围有目共睹——从图像识别到Alpha Go,再到语音识别和机器翻译,人工智能一次又一次地刷新人们对信息学的认识。深度学习的主旨在于强调神经网络模型的深度。其在神经网络模型的基础上减少了参数的繁杂度,更加逼近人脑工作的机制。最著名的例子便是卷积神经网络 (CNN),其极大地加强了计算机的图像识别功能。

3.2 搜索引擎和网络爬虫:

搜索引擎的核心机制其实就是网络爬虫。为了高效地为客户提供搜索结果,搜索引擎往往会先收集互联网中成千上万的网页,并根据网页中的关键字建立数据索引库。搜索引擎和网络爬虫收集网页的过程都会以基础的BFS(广度优先搜索),DFS(深度优先搜索)为核心思想,并针对要抓取的网页附加更有针对性的复杂算法,如网页过滤算法等。随着搜索技术越来越成熟,其算法的复杂程度也逐渐提高,但溯其本源仍是简单的搜索算法。刚刚提到的广度优先搜索、深度优先搜索等算法都会在后面章节中详细讲解,希望读者们能够认真学习掌握。

4. 小结

本章详细介绍了算法的本质、意义和应用。算法是编程的核心,就像一台计算机的CPU,算法的好坏决定了一个系统的效率高低。同时也是谷歌、阿里等大厂主要考察的内容。修炼好算法这门“内功”,再辅以新技术这些“招式”,才能独霸“武林”。

AI悦创·创造不同!
AI悦创 » 01 开篇词:你知道什么是算法吗?

Leave a Reply