跳到主要内容

算法简介

大家好,今天我们开始学习一个新专题 — 算法(Algorithm)。关于算法,我们日常开发中有很多应用,介绍算法的书籍也有很多,其中涉及到的知识点和信息量都很庞大,这个专题我们重点针对基于 Java 语言实现的算法设计和应用进行讲解,读者也可以自己将其扩展到其他语言的实现。本文我们主要先介绍一下算法是什么?为什么要学习算法?常用的算法有哪些?

1. 什么是算法(Algorithm)?

什么是算法呢?在维基百科中这样定义的:

在数学和计算机科学中,算法是一个有限的、定义明确的、可在计算机上实现的指令序列,通常是为了解决一类问题或进行计算。算法总是不含糊的,是作为执行计算、数据处理、自动推理等任务的规范。 — 维基百科

通俗一点来说,算法就是用来解决一类问题或者进行计算的,但是需要有一个明确的数学或者计算机科学定义,可以在计算指令上实现。

2. 为什么要学习算法?

前面说到算法是有明确的数学和计算机科学定义的,那我们为什么要学习算法了?

2.1 作为基础知识

算法其实是一种通用的基础知识,算法本身与任何计算机编程语言、操作系统等无关;算法是定义良好的通用的计算过程。比如我们在学习 Java 语言的时候,发现里面有很多关于数组(Array),集合(Set),哈希表(Map)等数据结构,这些数据结构的实现底层都涉及到了算法知识。学习算法知识有助于我们可以更好地理解编程语言的一些内部实现,帮助我们理解其中的函数设计思路及底层代码实现逻辑。

算法作为基础知识,学习算法就等于是学习数学、操作系统、数据库等大学基础课程一样,有助于我们培养良好的计算机基础理论知识,有助于自己更好的职业生涯发展。

2.2 解决实际问题

现实生活中的很多实际问题都可以归结到某种算法实现,比如我们经常用到的地图导航软件,不知道大家有没有思考过导航软件是如何为我们规划出出行路线规划的了?其实里面就会涉及到算法领域的一些图算法知识(这里不做过多介绍,在后续的章节里面会有详细说明)。

还有现在很多的抖音小视频 APP,大家都发现一不小心刷个抖音就过去了一个小时了,为什么推荐给你的小视频会对你如此有吸引力了?其实这是因为在抖音内部实现中有一套规则复杂的视频推荐算法,可以给每个用户推荐自身喜欢看的小视频。

总而言之,算法知识可以用来解决现实生活和开发场景中的各种问题。

2.3 求职者的必备基础知识

现在大家去一些稍微好一点大厂求职,无论你是做哪个开发岗位,如果说自己对算法知识一点都了解,估计肯定会被面试官戏弄一番了。其实,基础算法知识及对应的逻辑思维已经成为每个互联网公司招聘开发岗求职者的一个必备条件了。在 BAT 这种大厂里,算法知识可能就是技术面试中的一个极为重要的环节了。所以,学习一些算法知识,有助于我们在面试中脱颖而出。

3. 算法好坏的评价标准是什么?

当大家针对同一个问题都各自设计出自己的算法出来时,我们如何对算法的好坏做出评判呢?首先,算法必须是正确的,意思就是算法可以正确地解决问题。当满足这一前提条件之后,我们还需要哪些条件来判断算法的好坏呢?主要有以下两点:

  • 时间复杂度 :时间复杂度就是判断这个算法解决某个实际问题所需要花费的时间周期是多少,时间越短,说明算法设计得越好。
  • 空间复杂度:空间复杂度就是说这个算法在解决实际问题时计算机设备需要消耗多少内存空间,需要消耗的内存空间越少,说明算法设计得越好。

当比较算法的好坏时,我们需要在相同的实验环境下进行测试。同时,在日常的开发实践中,很多时候我们在设计算法时需要综合考虑算法的时间复杂度和空间复杂度,以便可以达到一个更好的平衡。

4. 学习基础

  1. 学习这门课程首先至少需要会一门编程语言,最好是 Java 语言,因为接下来的示例程序会选择用 Java 语言编写。
  2. 有一定的数学基础,可以理解一些数学定义。