算法王国,香农物语 | 现场宣讲前奏

算法概念及作用

算法是什么,可以吃吗?(美味しい~)

算法从字面上解释,就是用于计算的方法,通过这种方法可以达到预期的计算结果。算法也可以理解为一套解体步骤,由基本运算和规定顺序构成。就像高中做数学题时,一道题有多种不同的解法,这其实就是不同的算法。而处于计算机领域,它便由一系列的 指令(代码) 构成。

程序 = 数据结构 + 算法

算法的作用体现在 效率 上。在若干种正确方法中挑选出 空间效率 高亦或者是 时间效率 高的算法可以大大优化计算机的计算过程,从而节省资源。一个好的算法带来的效率差距可能比硬件和软件方面的差距还要大。

随着计算机硬件的发展,现在我们更多关注的是算法的 时间效率 。因而我们需要去预估一个算法所花费的时间去评判这个算法的优劣,一般来说,对于求解同一个问题,用时越小的算法越优秀。

一般来说,我们可以用 流程图 表示一个算法的流程

一个算法应具有 明确性有限性有效性输入输出 五个重要特征。换句话说,一个算法需要有确切的定义,有限的、有效的可执行步骤,且辅之以相应的输入输出。

具体算法

排序问题 是编程中经典的问题之一,基础的排序问题就是给定一串数字,根据升序(由小到大)或降序(由大到小)排序。

下面以求解排序问题的 冒泡排序 算法为例。冒泡排序简单来说就是将一串数字两两进行比较,经每一轮的若干次两两比较将最大(如果想排降序就是最小)的数字如冒泡一般 排到后面

(输入N个待排序的数,其中的第i个数可用a[i]表示)
定义一个i,i的值从N到2递减,对于每个i:
         定义一个j,j的值从1到i-1递增,对于每个j:
                  如果a[j]>a[j+1]:
                          将a[j]和a[j+1]的值交换

冒泡排序伪代码

冒泡排序流程图

冒泡排序过程动图

然而,冒泡排序仅仅只是众多求解排序问题的算法中的一个,时间效率并不是最高的。在这里先不用看懂下图所示的各种概念,只需要简单知道O(x)中的x量级越大,所用时间越多,如O(n²)所用时间大于O(n),时间复杂度高,因而时间效率低

算法比赛

说这么多,就是想以冒泡排序为例,讲讲算法对于编程求解问题的重要性。对于学习计算机专业的同学们,在大学期间会遇到各种大大小小的算法比赛,如ACM-ICPC(ACM International Collegiate Programming Contest)、蓝桥杯、天梯赛。无论你以后就业还是考研,算法比赛的佳绩都是证明自身资历很好的凭证(还能加不少分/doge)。

image005 image006 image007

当然,算法水平仅仅只是于专业水平的一部分,并不是全部,不适合走算法竞赛道路的同学也同样可以很优秀。

算法书籍

对于小白来说,想要窥探神秘而有趣的算法王国,可以从一些入门级的算法书籍入手。一本好书能够让初学者在学习算法的路上事半功倍,畅享算法给你带来的乐趣。以下算法书都是在入门阶段不错的选择哦!

如果你发现自己适合走算法竞赛的道路,只要不断地看书、训练与交流,你也能成为大神/doge。

OJ(Online Judge)

编程是一门实践科学,在算法学习中,只看书而不动手只能是知其然而不知其所以然。因此平时也要通过不断的训练来提高自己的算法水平,在互联网上,有一些被称为 Online Judge 的系统,简称 OJ,它们能够提供大量算法题,用户可以提交解题代码,OJ 将会返回评测结果,以显示提交的代码是否成功解出这道题目。

软协搭建有 SCNUOJ 作为校内比赛平台,而国内比较著名的 OJ 有:洛谷、HDU OJ、POJ、Virtual Judge、牛客网、计蒜客,而国外著名的 OJ 有 Codeforces、TopCoder、HackRank、AtCoder、CodeChef 等。

香农先修班

香农先(xiu)修(xian)班是软院中一个研究算法的组织,旨在提高软院算法水平,为后续的ACM/蓝桥杯/天梯赛储备人才。

香农先修班会给低年级组定期进行讲课交流算法,讲课内容相对于学院课本要超前不少。

参加香农先修班可以提高自己的算法水平,提高竞赛实力编程实力

目前香农先修班分为高年级组(已归为集训队)和低年级组。

总而言之,这是一个以算法会友的神秘王国,里面不仅有精通算法的师兄能与你交流沟通,也能亲临身经百战的大神们的分享会。香农班是一个年轻且充满活力的集体,软院的辉煌从来都不是属于过去的,精彩的未来由热爱程序设计以及热衷算法的各位创造!

快来加入我们吧/doge

3赞

欢迎来修仙啊~~

粤 ICP 备 2020080455 号