中小学生算法启蒙 |数学与计算思维| 什么是算法?
我们经常谈计算机科学的伟大“思想”,但计算机科学家们会将许多重要思想形容为“算法”。那么思想和算法之间有什么区别?究竟什么是算法?这一问题最简单的答案是,算法是一张精确的处方,它按顺序详细列出了解决一个问题所需要的具体步骤。通俗地讲,算法就是做事的方法与步骤。
有一个关于算法的小故事,估计大家都有耳闻。
1785年,一个8岁的“熊孩子”在德国农村的一所小学里念一年级。数学老师是城里来的。他有一个偏见,总觉得农村孩子不如城里孩子聪明。不过,他对孩子们的学习,还是严格要求的。他最讨厌在课堂上不专心听讲、爱做小动作的学生,常常用鞭子敲打他们。
有一天,他出了一道算术题。他说:“你们算一算,1加2加3,一直加到100等于多少?谁算不出来,就不准回家吃饭。”说完,他就坐在椅子上,用目光巡视着趴在桌上演算的学生。不到一分钟的工夫,“熊孩子”站了起来,手里举着小石板,说:“老师,我算出来了……”没等小高斯说完,老师就不耐烦的说:“不对!重新再算!”
“熊孩子”很快地检查了一遍,高声说:“老师,没错!”说着走下座位,把小木板伸到老师面前。老师低头一看,只见上面端端正正的写着“5050",不禁大吃一惊。他简直不敢相信,这样复杂的数学题,一个8岁的孩子,用不到一分钟的时间就算出了正确的得数。要知道,他自己算了一个多小时,算了三遍才把这道题算对的。
他怀疑以前别人让“熊孩子”已算过这道题。就问“熊孩子”:“你是怎么算的?”,“熊孩子”回答说:“我不是按照1, 2, 3的次序一个一个往上加的。老师,你看,一头一尾的两个数的和都是一样的:1加100是101, 2加99是101, 3加98也是101.....一前一后的数相加,一共有50个101, 101乘50,得到5050。”
这个“熊孩子”就是后来著名的犹太数学家约翰·卡尔·弗里德里希·高斯,而他所采用的这种等差数列求和的方法,被称为高斯算法。
这是数学领域中算法的一个简单示例。在数学领域里,算法是用于解决某一类问题的公式和思想。在计算机科学领域,算法是指对特定问题求解步骤的一种描述,它不依赖于任何一种语言,既可以用自然语言、程序设计语言(C++、Python 等)描述,也可以用流程图、框图来表示。从宏观上来看,数学领域的算法和计算机领域的算法是彼此相通。
算法的应用领域
算法可以应用在很多不同的领域中,其应用场景更是多种多样,例如:
1.运算
有人或许会觉得,不就是数学运算吗?这还不简单?其实还真不简单。
例如求出两个数的最大公约数,要做到效率的极致,的确需要动一番脑筋。再如计算两个超大整数的和,按照正常方式来计算肯定会导致变量溢出。这又该如何求解呢?
2.查找
当你使用百度搜索某一个关键词,发起一次网络搜索查询时会发生什么?你有没有思考过信息是如何被查出来的呢?
3.排序
排序算法是实现诸多复杂程序的基石。例如,当浏览淘宝网站时,我们期望商品可以按销量从低到高进行排序。现实搜索引擎中的查询都有数百、数千,乃至数百万个“命中”,搜索引擎必须从大量“命中”里挑出最好的几个,以最有用的顺序显示它们——将最匹配的页面排在第一,然后是匹配度排名第二的页面,其后依此类推。排序算法有很多种,它们的性能和优缺点各不相同,这里面的学问可大着呢。