Files
fzu-product/3.编程思维体系构建/3.2算法杂谈.md
2023-08-24 10:31:27 +08:00

3.9 KiB
Raw Blame History

3.2 算法杂谈

学计算机要先学算法吗?

也许有的同学在高中阶段接触过信息学奥赛,那么也许你已经对基础的算法知识已经有了一定的了解。

那么对于没有接触过算法的同学来说呢?也许你们听过 Niklaus Emil Wirth 的一句话:“程序=算法 + 数据结构。”可能有的同学这个时候就要说了:“你看算法多重要,你没有算法就没有程序!”但这句话中的算法并不是你们所理解的狭义的“算法”。

广义上来说,“算法”可以被理解为是一组解决特定问题的有序步骤,它在描述一个“流程”,诸如做菜的流程、排课表都可以被认为是一种算法。利用计算机逻辑解决问题才是算法的核心。

学习算法的基础是拥有最基本的计算机素养,你需要优先学习一些基本的计算机概念、编程语言、简单的数据结构(数组、链表等),这些基本知识是你能够灵活利用算法的基础。

学了算法就相当于学好了计算机吗?

学好了算法当然不等于学好了计算机科学。计算机科学是一个非常庞大的知识体系,包括更为底层的计算机组成原理、编译原理等,更为表层的 AI开发等是一门综合性学科。总的来说算法是计算机科学中较为重要的一部分远远不是全部。

学算法就要用《算法导论》一类的书吗?

我的答案是否定的。它更适合作为“工具书”(就像你英语的词典那样),而不是一本适合新生入门学习的书。可以使用《我的第一本算法书》一类的更为基础更为有趣的算法内容。相比于完全严谨的逻辑推导,初学者的诉求是在"看得见,摸得着的例子和环境下探索和吸收新概念". 像这样的大部头可以在之后进行阅读。

学算法一定要用 C 语言吗?不用 C 语言可以吗?

不一定要用 C 语言。但是 C 语言作为一种贴近底层面向过程语言,对日后学习其他的语言会有较大的帮助。你也可以先学习 Python、JAVA 等等。学校的课程仅仅是教授一些比较基础的知识,如果想要真正掌握一门语言,需要在学校课程的基础上更进一大大大步。

ACM 怎么说?

前情提要,请尽量不要以功利的心态去参加 ACM你想要的与你能得到的可能存在过大落差

ACM 是美国计算机协会Association for Computing Machinery的缩写原先是 ICPC国际大学生程序设计竞赛的赞助商2018 年后不再赞助),在国内与 ICPC 齐名的比赛还有 CCPC中国大学生程序设计竞赛

但常说的“ACM”一般泛指一切采用 ACM 赛制(给定一定数量的题目,采用罚时制,通过相同题目数量的选手依据罚时决定排名)的程序设计竞赛。

在我校,参加 ACM 社团姑且叫做社团并不代表能够参加有含金量的团体赛ICPC、CCPC 等)。你需要先参加由我校教练刘春英老师组织的各种比赛,有资格进入集训队后,才有机会代表学校参加比赛(当然不限名额的个人赛想参加就参加)。

进入集训队后采取末位淘汰制度(最后留下来的人在 20 人左右),最后留下来的人才有机会参加比赛。因此个人并不推荐 0 基础的同学对于 ACM 过于执着,有 0 基础的同学最后进入校队的例子,不过这通常意味着你一天至少得刷一道算法题。如果还是想尝试的同学,可以去洛谷 (www.luogu.com.cn)、Codeforces(www.codeforces.com)、Atcoder(atcoder.jp) 等平台上注册账号,练习题目,参加这些网站定期组织的一些比赛。

如果经过一段时间的练习能够在 Codefoceswww.codeforces.com)上达到 1400 以上的 Rating那么可以再观望观望参与 ACM。