信奥竞赛

系列

程序的灵魂|写在算法的开篇

算法

从今天起,我们的编程学习步入了一个崭新的篇章 — 算法:

初级算法系列|Chueleobs

我们用这篇简短的引文,探讨一下这个既简单又复杂的话题:到底什么是算法。

说它简单,因为无论在中文或英文里,算法 algorithm就是计算的方法,运算的法则这样的含义。

但如果就这样解释,估计听的人还是一头雾水:这等于啥都没说啊?

于是,我们从日常生活中寻找几个大家都常见的片段,由此引出算法在计算机科学中的含义。

Once Upon an Algorithm | Martin Erwig

生活中的小故事

小明(小明:为什么总是我?)在实验小学度过了六年的学习生活。

从四年级开始学习 C++ 的他,对编程产生了极大的兴趣,在上一次的全国信息学竞赛中,已经取得了普及组三等奖的成绩。

即将步入新学校的他,心中已暗下决心,要继续学好编程,汲取更深入的计算机科学知识,也希望能在信息学竞赛中取得更好的成绩。

凭借小学阶段的优秀表现,小明升入了本市著名的重点中学 — 师大附中。

这所学校距离小明的家直线距离大概一公里左右,但是跨过了多个街区,道路有很多条,还有一些穿越小区的小路。

步行上学的小明,在开学之初就在考虑一个问题:怎样才能找到一条最近的路,以最快的时间到达学校?

小明的妈妈韩梅梅是一个八零后,每天完成了工作和家务后,喜欢拿着手机刷抖音。

前段时间她经常搜索一些和菜谱有关的内容。

最近她发现,每次打开抖音首页,根本不需要搜索,映入眼帘的就已经是各种各样的美味佳肴,怎么回事?虽然觉得很奇怪,但还是开心的刷起来...

小明的爸爸,没错,他就是李雷。最近他也在不停的思考一个问题。

家里书房的地板年久失修,踩上去有嘎吱嘎吱的响声,他打算彻底的解决一下,把书房全部换上地砖。

但八月底出生的他希望有一种方形的地砖能够完美的铺满书房长方形的地面,不希望出现切割的情况。

问题是,这种方形的地砖最大是多少才能满足他的需要?

一家三口,每个人心中都有一个小问号,怎样才能消灭这些小问号?

懂点算法就可以做到!

Grokking Algorithms | Aditya Bhargava

来自算法的威力

小明学过一点简单的算法,这个问题难不倒他。

首先他搜集了所有能到达学校的路线,发现一共有 8 条。

小明打开手机地图 APP,排除了明显过长的 3 条,还剩下 5 条地图上没有标识的小路,于是,他在开学之初的一周内就解决了这个问题。

怎么做到的?

每天走一条新的路线,数着一共有多少步,一周五天正好穷举了所有的路线,最短的那条路就浮出了水面。

小明的妈妈一直不解,为什么抖音比李雷都了解她,直到她参加了一次公司内部的技术分享:「从推荐算法到字节跳动」。

李雷思索的问题,小明从新认识的信息学老师那里讨到了答案,是一个名字很古董的算法 — 欧几里得算法。

Algorithms | Robert Sedgewick

什么是算法

看完这几段生活中常见的场景,我们是时候聊一聊什么是算法了。

算法是什么?算法就是解决问题的方法。

计算机算法是什么?计算机算法就是架构在计算机科学与现实问题中的桥梁。

算法,是隐藏在现代生活纷繁表面下的规则,来自于人们对问题的思索。

算法,是用系统的方法解决问题的一种策略机制,在计算机中表现为一系列清晰的指令。

广义的算法远远早于计算机的诞生,两千年前的中国古代数学名著「九章算术」就是一部算法的大成之作。

算法,并不神秘。

Introduction to Algorithms | Thomas H. Cormen

算法的特性

具体到计算机算法,著名计算机科学家,图灵奖获得者高德纳在他的著作「计算机程序设计艺术」中,对算法的特征进行了归纳:

  1. 输入 Input:一个算法必须有零个或以上输入量。
  2. 输出 Output:一个算法应有一个或以上输出量。
  3. 明确性 Definiteness:算法的描述必须无歧义。
  4. 有限性 Finiteness:算法必须在有限步骤内完成。
  5. 有效性 Effectiveness:算法中描述的操作都可以通过已实现的基本运算执行有限次来实现。

The Art of Computer Programming | Donald Ervin Knuth

初级算法系列

趣乐博思「算法系列」课程划分三个阶段,专项针对于信息学竞赛算法试题进行编排。

第一阶段「初级算法系列」的目标是在理解并掌握这部分算法并能够进行灵活运用的前提下,能够达到全国青少年信息学奥林匹克联赛普及组复赛前 50% 的成绩。

竞赛不是目的,竞赛是一种激励,算法并不枯燥,算法化解生活中的难题。

敲起键盘,让指令跃动起来,在算法的王国里打怪升级,据说,这比游戏好玩的多~

敬请关注「初级算法系列」后续精彩内容。

Knowledge is Power