格拉斯哥大学 COMPSCI1021《实用算法》:学什么、怎么考、难在哪
格拉斯哥 COMPSCI1021《实用算法》是研究生学徒制(GA)专属的「结构+数学」双线课(20 SCOTCAT 学分):数据结构与复杂度一条腿,逻辑与归纳证明一条腿;笔试 60%+作业 25%+过程分 15%,12 月考期。
课程官网(学校官网):https://www.gla.ac.uk/coursecatalogue/course/?code=COMPSCI1021
COMPSCI1021 是一门什么课?
一句话:两条腿走路——结构腿(数组、链表、二叉树、哈希表怎么实现怎么用)与数学腿(谓词逻辑、集合论、关系代数、归纳证明、组合计数),两条腿在「复杂度分析与证明」处会合。
这是格拉斯哥大学(University of Glasgow)计算科学学院(School of Computing Science)的本科课程,课程代码 COMPSCI1021,英文名 Practical Algorithms,中文通译「实用算法」。官网标注:学分 20(苏格兰 SCOTCAT 口径,满模块体量);层级为 Level 2(SCQF level 8,本科二年级);双学期贯穿(Runs Throughout Semesters 1 and 2);学术学年 2026-27;不接收访问学生;无国际在线协作学习(COIL)、无终身课程标记。
官网 Short Description 写明:本课程仅面向研究生学徒制(Graduate Apprenticeship)学生;课程传授数据结构的广博知识,特别是操纵它们所涉及的数学基础;同时介绍计算中的基础数学概念,帮助学生更好理解高效编程,并为后续学年构建更复杂的数学概念打下基础。官网 Course Aims:介绍数据结构基础及其上的算法——学习编程中常见的数据结构与排序、查找、序列化的多种方法;同时引入算法复杂度与证明,帮助学生在创建自己的软件时能为设计决策做辩护。
(分析)「为设计决策做辩护」是这门课的职业锚点——职场里选数据结构、选算法都要说出理由(为什么这里用哈希表不用数组);数学腿不是装饰,是把「我觉得快」升级成「可证明快」的语言。
官网预期学习成果六条:1 用自选语言实现数组、链表、二叉树、哈希表等基本数据结构;2 把递归用作算法设计技术;3 分析并实现一系列算法(含查找与排序)并用适当记法表达复杂度;4 用谓词逻辑、集合论与关系代数写断言并用定律证明;5 理解归纳生成的结构与归纳证明;6 在解数学问题中运用组合学基本概念。(分析)1-3 是工程腿(实现、递归、复杂度)、4-6 是数学腿(逻辑、归纳、组合)——笔试两腿都考,作业主攻工程腿;工作场景让工程腿立刻有用,数学腿供长期弹药。
和国内《数据结构》+《离散数学》课程有什么不同?
和国内课程比,最大的差别是:国内「数据结构」与「离散数学」分两门课、以单一语言统一实现;本课把数据结构、算法复杂度与逻辑证明揉成一门「结构+数学」双线课,且允许自选语言实现——把「结构的本质」与「语言的细节」解耦。(分析)
- 面向:仅对 GA 在职学生开放(官网明写);国内数据结构是大二普修必修课。(分析)
- 语言:自选语言实现结构;国内以 C/Java 统一语言教学。(分析)
- 双线同权:工程与理论同权重;国内两门课分设,复杂度证明训练弱。(分析)
- 考核:笔试 60%+测验 10%+小测 5%+作业 25% 四件套,12 月考期贴合 GA「学即用」节奏;国内多为期末机考+笔试、平时占比小。(分析)
- 同门互补:与本校同为 GA 课程的 COMPSCI1019 互补——那门教职业素养,这门教技术底座。(分析)
考核怎么算?
官网 Assessment 栏写明:笔试 60%;学期中课堂测验 10%;课堂小测 5%;课程作业 25%。主考期在 12 月(Main Assessment In: December)。官网 Minimum Requirement for Award of Credits 栏:学分授予的最低要求——无例外(No exceptions)。补考与重修:官网未列。
这个结构意味着三件事:
第一,笔试占六成、两腿会师:(分析)数学腿与工程腿在笔试里合流(证明题+复杂度+实现分析);过程分四成主要喂工程腿——作业的 25% 是工程腿的主战场。
第二,过程分要当周挣:(分析)测验、小测与作业全在学期内发生,12 月考期对在职的 GA 学生是最硬的约束——过程分当周挣、笔试提前两月启动,两头都不能拖;「学分最低要求无例外」意味着没有任何弹性空间。
第三,补考重修未列,按无退路准备:(分析)官网没给补考口径,叠加「无例外」的学分门槛——把它当只有一次正式机会来规划,策略上只会更稳。过程分的四件套里,作业 25% 是可长时间打磨、测验与小测合计 15% 是当堂限时——两类准备方式完全不同:前者靠最小测试集防边界错误,后者靠平时刷题维持手感,别用同一种「考前突击」去对付。
先修要求是什么?
官网 Requirements of Entry 栏:无(None)。官网 Excluded Courses 栏:排除课程——无;不设 Co-requisites 栏,共修要求以课程规范文档为准。(分析)官方零门槛,真正的准入是 GA 项目身份(Short Description 明写仅面向 GA 学生);一门编程语言的基本功(函数、循环、集合)是隐性起点——工作中天天写码的 GA 学生通常已备;数学腿零起点教,但符号运算的耐心要自带。
学完能做什么?
官网预期学习成果六条(原文见第 1 节):实现基本数据结构、把递归用作设计技术、分析实现查找排序算法并表达复杂度、用逻辑集合关系代数写并证明断言、理解归纳结构与归纳证明、运用组合学概念解题。
能力上,你成为「选型有据」的工程师:选结构说得出权衡(哈希 vs 树 vs 数组)、估性能给得出记法、写代码附得上断言——这在代码评审与技术方案答辩里直接加分。(分析)去向衔接——GA 项目后续的算法与系统课程;企业里向高级工程师发展的理论底座。(分析)「能证明的设计决策」是工程师与码农的分水岭——这门课在大二就把分水岭的两种语言(代码与证明)都交到你手里;带着这套语言回到岗位,技术方案文档里多出的「复杂度论证」一节,就是这门课最直接的可见产出。
适合谁:GA 项目学生——项目内课程,别无分店(分析);工作中天天与代码打交道、想知其所以然的学生(分析);愿意补数学推理(证明、逻辑)的学生(分析);不适合非 GA 学生——官网明写仅对 GA 开放(分析);不适合抗拒数学证明的纯实操型——四成笔试分在证明与复杂度(分析)。
难点与常见挂因
这门课的难点在「复杂度从数循环到记法推理」与「形式证明的零跳步纪律」——工程腿靠细节活命,数学腿靠步骤分活命。(分析)
具体难在这些地方:
- 复杂度从「数循环」到「记法推理」。 ILO 3 要求「用适当记法表达复杂度」:大 O 记法背后的增长思维,难点在从直觉(「这个快」)到形式(「O(n log n) 且可证」);递归算法的复杂度推导是第一个陡坡——学生常停在会算循环、不会拆递归。→ 五种典型递归式各写「拆分方式→复杂度」卡,配题验证直到能独立推导;先问「子问题规模怎么缩、合并成本多少」,递归式就拆得动。这张卡的价值不止于考试:工作里评审「这段代码扛得住数据涨十倍吗」,用的就是同一套增长思维。
- 谓词逻辑的符号门槛。 用逻辑符号写断言并用定律证明是多数学生第一次正式接触形式逻辑:量词、蕴含、等价律——一步偷懒(跳过一个定律)证明就不完整;笔试按步骤给分,跳步即扣。→ 每个证明按「断言—依据定律—结论」三行式写,每行必引定律名;练十道零跳步,把「显然」从词汇表里删掉。
- 归纳证明的双重信任。 归纳生成的结构与归纳证明:基准情形+归纳步骤的严格结构,难点与递归同源(都是「信任子问题」的思维);基准写错或归纳假设用错是笔试里的经典扣分点。→ 动笔前先写两句(基准是什么、假设子问题已解);每个归纳证明自查「基准是否最小、假设是否恰好是待证命题的缩小版」。
- 数据结构的实现细节。 链表指针操作、树的遍历、哈希冲突处理:概念好懂、实现易错,难点在边界条件(空表、单节点、冲突链);作业的 25% 对这些细节毫不留情。→ 每种结构交前跑「最小测试集」(空/单元素/冲突/满树各一例);缺陷藏得深的结构(指针错误不立即报错)先跑测试再提交,出错率降半。测试集本身就是作业交付的一部分:审代码的人第一眼看的就是你有没有测边界——这也是「为设计决策做辩护」的第一课。
- 双学期与 12 月考期的错位。 考试在 12 月而课程持续到 S2,S1 内容构成考试主体;GA 学生在企业全周工作,复习窗口全靠挤出——不把 S1 主题在 11 月前盘清,12 月就是灾难。→ 10 月排复习表并与雇主沟通考试季减负(GA 合同通常有学习假条款);11 月完成首轮复习,12 月只做模拟与查漏。
常见挂科原因,每条都有早期信号:
- 复杂度题只数循环:递归复杂度题无从下手。早期信号是讲递归复杂度时概念懂题做不出。→ 五种递归式各写拆解卡并独立推导。
- 证明跳步:逻辑或归纳证明被扣步骤分。早期信号是练习答案被判证明不完整。→ 三行式每行必引定律名,练十道零跳步。
- 结构实现边界漏:作业在空表/冲突链/单节点上崩。早期信号是作业时对时错且复现不稳。→ 最小测试集五类结构全部执行。
- 递归只会展开模拟:逐层模拟导致写不出递归。早期信号是简单递归也要画展开图。→ 先写「基准+假设」两句再落代码,连练十题。
- 在职备考拖到 12 月:年底高压挤掉复习。早期信号是 11 月中还没完整过一遍 S1 主题。→ 10 月排复习表并动用学习假条款。
留学生特别提醒
这几条坎专门冲着中国学生的学习习惯来:离散数学术语的英语场、证明题的英文书写、GA 双线负载、自选语言实现的自由与陷阱、12 月在职备考,每个都直接影响四成过程分与六成笔试。
- 离散数学术语的英语场。 predicate、quantifier、induction、combinatorics 这套词中文译名不统一(谓词、量词、归纳、组合),国内离散数学中文授课——读教材术语映射慢,证明题英语表述卡壳。→ 做「英文术语—通行中译—符号」三列卡(约 40 词),练到读题直接符号化思考;三列卡按 S1 进度补齐,12 月复习时它就是数学腿的索引。
- 证明题的英文书写。 笔试证明要用英语写推理链,思路对但英语表述跳连、定律名写不出最常见。→ 为常用定律(分配律、德摩根等)背英文名;每个证明按「断言—依据定律—结论」三行式写,练十道成模板——第一次作业前就把模板立起来,考场现学来不及。
- GA 双线负载的时间挤压。 企业工作日全职+晚上与周末学习,一周不碰代码与数学,手感断崖。→ 每周定几个固定晚间时段(代码、数学轮换),雷打不动;以「中断不超过三天」为底线——断崖之后再爬坡的成本远高于每天维持。时段写进工作日历并与团队知情,比单靠自律可靠:GA 的学习假条款就是为这类安排存在的。
- 自选语言实现的自由与陷阱。 ILO 1 允许自选语言,自由度高但参照少:课程示例语言与自己选的语言细节不一致,调试踩坑。→ 选定一门自己最熟的语言并固定(别中途换);为每种结构先写伪码再翻译;语言差异记「语言差异卡」,考前以「每种结构不看范例写出可运行版本」为验收线。
- 12 月考期的在职备考。 考试季正值企业年底交付高峰,请假难、复习被项目挤占。→ 10 月即与雇主沟通考试季减负;11 月完成首轮复习;12 月只做模拟卷与错题——把年底的不可控提前变成可控。
怎么准备?
最划算的准备,是把「三列术语卡」「三行证明模板」「最小测试集」三件事提前做掉——它们分别守住数学腿读题、笔试步骤分与作业边界细节。
- 开课前固定实现语言。 最熟的那门——中途换语言的代价是全部结构重写。
- 三列术语卡按进度补。 英文、中译、符号三列——数学腿的读题速度从这里来。
- 三行式证明模板第一次作业前立起。 断言、定律、结论——步骤分的保险栓。
- 第一周做三件事。 把 12 月主考期与各过程分节点记进日历并倒排;与雇主确认考试季学习假条款;把六条学习成果抄在笔记首页当「验收清单」。
- 每种结构配最小测试集。 空、单元素、冲突、满树——作业 25% 的细节分靠它守住。
- 每周一道递归复杂度推导。 拆分方式到复杂度一步不跳——陡坡提前爬完。
- 10 月启动首轮复习。 S1 主题 11 月前盘清——双学期错位课的复习必须前置。
中英术语速查
- array / linked list —— 数组 / 链表:线性结构的两端代表。
- binary tree / traversal —— 二叉树 / 遍历:分层结构的实现与访问。
- hash table / collision —— 哈希表 / 冲突处理:散列结构与冲突链的应对。
- recursion —— 递归:算法设计技术,「基准+假设」是灵魂。
- Big-O notation —— 大 O 记法:复杂度的形式语言。
- predicate logic / quantifier —— 谓词逻辑 / 量词:形式断言的基本工具。
- set theory / relational algebra —— 集合论 / 关系代数:断言的数学底座。
- mathematical induction —— 数学归纳法:基准+归纳步骤的证明结构。
- inductively defined structure —— 归纳生成的结构:与递归同源的信任思维。
- combinatorics —— 组合数学:计数与数学解题的基本概念。
- serialization —— 序列化:大纲点名的算法应用场景之一。
- Graduate Apprenticeship(GA) —— 研究生学徒制:本课的唯一面向人群。
关于我们
鱼之跃做在读留学生的学业支持,服务分两块,界限很清楚:
辅导=老师授课:由 QS 前 200 院校的硕博老师把课程的知识点、推导链、作业要求讲透,按对口专业配课;覆盖同步辅导、论文辅导、考前辅导、预习。
护航=你的学业管家:排计划、理材料、理流程这些杂事都替你打点好,该提前准备的他先想到;你只管学,有事随时找,需要时都在。同地区的留学学姐,熟悉你所在学校的节奏。
学术问题上的申诉,我们做材料梳理与流程陪跑,不代写、不代考、不碰学术诚信边界,也不承诺任何成绩。
课程官网与核对说明
课程官网(学校官网):https://www.gla.ac.uk/coursecatalogue/course/?code=COMPSCI1021
本文涉及学校、课程代码、课程名称、学分(20 SCOTCAT)、层级(Level 2/SCQF 8)、双学期贯穿、开课单位(计算科学学院)、学年(2026-27)、访问学生(不接收)、仅面向研究生学徒制(GA)学生、课程目标(数据结构+复杂度与证明)、学习成果(六条)、考核构成(笔试 60%+课堂测验 10%+课堂小测 5%+课程作业 25%、主考期 12 月)、学分最低要求无例外(No exceptions)、入学要求(无)、排除课程(无)、共修栏不设、补考与重修(官网未列,如实标注)、书单(官网未列指定教材,仅 Reading List 链接)的事实,均来自上述学校官网课程目录页;核对时间为 2026-11-01。每周投入与学习量推导属学习投入口径,未采用。文中标注「(分析)」处及「适合谁、怎么准备」等属于基于课程结构的分析与学习建议,不代表学校官方要求。