学习方法|趣学算法DAY1

2023-11-18 19:33:26 浏览数 (2)

前言

前一篇主要介绍了为啥学习算法,算法工程师的招聘要求,以及如何学习算法、面试算法以及面试前如何刷题等。这一篇我们开始真正的算法之旅。

什么是算法?

要想了解算法,首先得知道什么是程序。

0和1的世界0和1的世界

在广泛的意义上面来讲,程序是指事物发展的既有次序和脉络以及方式、方法。从计算机编码语言上来讲,程序是数字计算机的编码指令的次序。而在广泛意义上的方式方法,则可以专业性的称之为算法。那么具体怎么描述算法呢?借用百度百科的一段话,“算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制”。这样一来,是不是同我们所描述的有次序的脉络以及方式方法所吻合?

著名的瑞士计算机科学家尼古拉斯·沃斯(Niklaus Wirth)在计算机领域有一句名言:“算法 数据结构=程序”(Algorithm Data Structures=Programs)。数据结构是程序的骨架,而算法则是程序血肉,是灵魂。

算法的特点

如何判断一段计算机指令或程序是否是一个算法,我们可以从下面几个特点来判断:

  • 有穷性:可以穷举,有终点或者结束点
  • 确切性:每一个步骤都有明确的定义
  • 输入性:有条件(包含0到∞个参数)
  • 输出项:有结果,有结论,没有输出则没有意义
  • 可行性:可以分解为最基础的单元来进行步骤的操作,每个步骤都有时间周期

算法复杂度

在没有学习计算机技术之前,我们应该对复杂度并不是很陌生,因为这是统计学的一个概念,我们接触最多的莫过于样本复杂度这个概念,这些都是在统计抽样、概率选取、概率评价等等一系列从高中就开始接触,到大学深入了解的知识。那么算法复杂度又是什么呢?

算法复杂度是指算法在编写成可执行程序后,运行时所需要的资源,资源包括时间资源和内存资源。当了解这个之后,我们可以深入理解下,什么是时间复杂度、空间复杂度和复杂度分析等一些更深层次的概念。实际应用中,通常使用时问复杂度渐近上界 O(f (0)来表示时间复杂度。

  • 时间复杂度:从算法开始运行到算法执行结束所需要的时间
  • 空间复杂度:执行算法所需空间大小,运行过程中占用多少存储空间

具体到示例可以参考陈老师在书中的案例。首先给我们讲述了一个故事——一盘棋的麦子,然后引出来“爆炸增量函数”。常见的时间复杂度有以下几类:

➊常数:

0 人点赞