快捷搜索:  汽车  科技

算法工程师需要学什么?什么是算法

算法工程师需要学什么?什么是算法10 5 = 15……6 4 = 10老师以为,“熊孩子”会按部就班地一步一步计算,就像下面这样。1 2 = 33 3 = 6

算法,对应的英文单词是algorithm,这是一个很古老的概念,最早来自数学领域。

有一个关于算法的小故事,估计大家都有耳闻。

在很久很久以前,曾经有一个顽皮又聪明的“熊孩子”,天天在课堂上调皮捣蛋。

终于有一天,老师忍无可忍,对“熊孩子”说:今天罚你算加法,算出1 2 3 4 5 6 7……一直加到10000的结果,算不完不许回家!

老师以为,“熊孩子”会按部就班地一步一步计算,就像下面这样。

1 2 = 3

3 3 = 6

6 4 = 10

10 5 = 15……

这还不得算到明天天亮?够这小子受的!老师心里幸灾乐祸地想着。

谁知仅仅几分钟后……

老师,我算完了!结果是50 005 000,对不对?

这、这、这……你小子怎么算得这么快?我读书多,你骗不了我的!

看着老师惊讶的表情,“熊孩子”微微一笑,讲出了他的计算方法。

首先把从1到10 000这10 000个数字两两分组相加,如下。

1 10 000 = 10 001

2 9999 = 10 001

3 9998 = 10 001

4 9997 = 10 001

……

一共有多少组这样结果相同的和呢?有10 000÷2即5000组。

所以1到10 000相加的总和可以这样来计算:(1 10 000)×10 000 ÷ 2 = 50 005 000

“熊孩子”就是后来著名的犹太数学家约翰·卡尔·弗里德里希·高斯,而他所采用的这种等差数列求和的方法,被称为高斯算法。

这是数学领域中算法的一个简单示例。在数学领域里,算法是用于解决某一类问题的公式和思想。

而这里要讲的算法,是计算机科学领域的算法,它的本质是一系列程序指令,用于解决特定的运算和逻辑问题。

从宏观上来看,数学领域的算法和计算机领域的算法有很多相通之处。算法有简单的,也有复杂的。

简单的算法,诸如给出一组整数,找出其中最大的数。

算法工程师需要学什么?什么是算法(1)

复杂的算法,诸如在多种物品里选择装入背包的物品,使背包里的物品总价值最大,或找出从一个城市到另一个城市的最短路线。

算法工程师需要学什么?什么是算法(2)

算法有高效的,也有拙劣的。

刚才所讲的从1加到10000的故事中,高斯所用的算法显然是更加高效的算法,它利用等差数列的规律,四两拨千斤,省时省力地求出了最终结果。

而老师心中所想的算法,按部就班地一个数一个数进行累加,则是一种低效、笨拙的算法。虽然这种算法也能得到最终结果,但是其计算过程要低效得多。

在计算机领域,我们同样会遇到各种高效和拙劣的算法。衡量算法好坏的重要标准有两个。

时间复杂度

空间复杂度

算法的应用领域多种多样。

算法可以应用在很多不同的领域中,其应用场景更是多种多样,例如下面这些。

1. 运算

有人或许会觉得,不就是数学运算吗?这还不简单?其实还真不简单。

例如求出两个数的最大公约数,要做到效率的极致,的确需要动一番脑筋。再如计算两个超大整数的和,按照正常方式来计算肯定会导致变量溢出。这又该如何求解呢?

算法工程师需要学什么?什么是算法(3)

2. 查找

当你使用谷歌、百度搜索某一个关键词,或在数据库中执行某一条SQL语句时,你有没有思考过数据和信息是如何被查出来的呢?

3. 排序

排序算法是实现诸多复杂程序的基石。例如,当浏览电商网站时,我们期望商品可以按价格从低到高进行排序;当浏览学生管理网站时,我们期望学生的资料可以按照学号的大小进行排序。

排序算法有很多种,它们的性能和优缺点各不相同

4. 最优决策

有些算法可以帮助我们找到最优的决策。

例如在游戏中,可以让AI角色找到迷宫的最佳路线,这涉及A星寻路算法。再如对于一个容量有限的背包来说,如何决策才可以使放入的物品总价值最高,这涉及动态规划算法。

猜您喜欢: