随着国际大学生程序设计竞赛、蓝桥杯、团体程序设计天梯赛等算法竞赛在国内的发展,高校之间竞争日趋激烈,也随之形成了日趋成熟的竞赛训练体系。竞赛入门的新手在实践方面往往与算法设计与分析的学生面对相似的困难,将部分竞赛培养的经验应用于算法设计与分析教学实践中,平滑学习曲线、降低学习成本,能帮助学生更好地掌握算法理论,并完成理论到编程实践的过渡,更高效地实现新工科背景下应用型人才的培养目标。
1新工科背景下算法课程难点
1.1实践内容入门难
在前置课程如程序设计基础和数据结构中,数组、循环、线性表、树结构等实践内容的考查通常具有较为直观的概念。然而,在算法设计与分析的实践课程中,问题的考查会更多地涉及特定的模型与场景,需要学生进行问题建模、实现算法方案,以及处理具体问题的数据。课程的大多数实践题目需要学生适应算法思维模式,以及基于算法描述进行代码实现与整合的熟练度,没有竞赛背景的学生往往在这些方面的训练不足,在面对即使是入门级别的新算法题目时,往往也会感到无所适从。
在教学过程中,要寻求有效手段进一步降低实践内容的入门难度,优化前置课程向算法设计与分析的内容过度,最终实现培养目标。
1.2学生课前基础差距大
随着算法竞赛的普及,一部分学生在课前已经具备了良好的代码实现能力,他们在课程实践中能够游刃有余,其中一些主力竞赛选手甚至已经熟悉了课程的大部分内容。与此同时,仍有许多学生处于刚刚能够实现特定数据结构代码默写的水平,甚至还有一些学生的编程实现能力仍然不过关。
1.3更多的个性化疑难
挑战。
1.4综合能力的考查难
在成果导向教育(Outcome-basedEducation,OBE)理念和过程化考核的推动下,许多课程已经开展了更为丰富的考核模式,其中以项目实训最为典型。对于理论性强的算法设计与分析课程来说,项目场景的设计却是一项挑战。经典的应用模型通常已经在在线评测系统的题目中得到了实践,这使得项目性课程设计往往容易走向两个极端:一方面,如果项目过于复杂,大多数学生可能难以完成;另一方面,如果算法部分过于直接,学生在实践中可能会将更多的精力用在数据的前后处理上,而重要的算法部分则可能被直接套用,这就偏离了课程本身的重点。
如何进一步优化过程考核,设计更加有效的课程实训或大作业,让学生能够通过独立或协作形式完成具体的任务,真正触及算法理论的本质,是本课程面临的一项重要挑战。
2算法竞赛训练体系融入方案
首先,引入模板题可以帮助学生更好地理解和记忆算法代码的基本框架。其次,设置竞赛难度的附加题,以满足基础较好学生的学习需求。再次,采用竞赛生主导的小组竞争与合作的方式,通过小组内的互助和教师的集中指导,提高教学效果。最后,以设计算法题目作为大作业,让学生深入理解算法理论,提升实践能力。
2.1引入精炼概念的模板题
算法竞赛训练模式在每个专题入门时,通常先设计无应用背景的模型(如极简化题目)熟悉算法代码基本框架,如果代码结构像一个可以套用到其他算法问题的模板,通常被称为“裸题”或“模板题”,去掉了建模过程和复杂的数据处理逻辑后,代码将专注于算法的表述,更易于被学生理解和记忆。为解决实践内容入门难,改进学生从算法理论到编程实践的学习曲线,在实践课程中引入模板题。
以回溯章节为例,传统课程内容的第一个例题通常是8皇后或01背包问题,直接为学生讲述搜索树的概念,学生在开始实践时容易存在诸多困惑:要理解问题与回溯的关联、搜索树与代码的关系,以及前置章节已经用动态规划解决的01背包为什么还要用回溯去解决等。回溯的本质是解决组合优化问题,最常见的问题即在枚举全排列和枚举全子集两个场景下寻找最优解。在实践中,枚举排列和枚举子集这两种递归操作的代码结构非常典型且简洁,让学生通过这两项内容的模板题理解回溯本质和代码框架后,再加入实例逻辑去解决更多应用问题就会变得非常容易。
2.2设置竞赛难度的附加题
2.3竞赛生主导的小组竞争与合作
学生在算法设计与分析学习过程中的诸多个性化问题,通常在算法竞赛训练中也普遍存在。在竞赛训练体系中,通常有“老带新”的传统,即高年级的优秀竞赛生会经常帮助低年级的新手解决各类入门时遇到的问题,具备丰富的实践指导经验。基于团队导向学习(Team-basedLearning,TBL)教育理念[4],将班级分为若干学习小组进行分层管理,每个小组由一名具有竞赛背景的竞赛生作为组长,在学期内形成稳定的互助小组:①小组内的学生可以相互讨论、交流、协作,大多基础问题都能在组内得到很好且高效的解决;②教师可以收集小组内无法解决的难题以及更为普遍的共性问题,进行集中讲解与指导,使教学工作更具针对性;③小组之间每周以全组实践内容完成程度评比排名,实行分数奖励。通过这种方式,竞赛生作为组长可以为普通学生带来更多的算法竞赛实践技巧与经验,同时也能够锻炼团队协作能力,这是传统课程教学模式所不具备的优势,从而进一步提升学生整体的实践能力。
2.4以设计算法题目作为大作业
程序设计类课程近年来广泛采用的在线评测系统,其起源可以追溯到本世纪初在算法竞赛领域流行的平台。在这种系统中,学生提交的代码由评测机运行,并通过对比输出的正确性自动给出评判结果。目前,许多高校和平台已经积累了大量的课程题库,但题目设计的方法体系远不及算法竞赛领域成熟。
在算法竞赛中,出题工作涉及一系列复杂的过程,包括题目的难度划分、算法考点的分布、多种解法的复杂度分析、评测数据的体量等。这不仅要对一个应用问题提出正确的算法方案,还要在设计评测数据时考虑到次优解和蛮力解法的执行效率,确保非最优解无法在控制的时限和内存空间内顺利通过评测。这就要求对算法理论有更为全面且灵活地理解。以小组为单位、以课程内容为范围,参照算法竞赛出题体系设计一套评测系统习题,无疑是一种更有实践价值的学习方法。相比传统的课程项目实训方式,这种大作业更能让学生深入理解算法理论的核心内涵,将课程所学的知识融会贯通,从而真正做到掌握并灵活运用所学知识。
3教学实践
以深圳技术大学2023年春期计算机科学与技术专业为例,阐述整体方案的教学实践过程。该届共4个教学班,每个班40~60人。
3.1模板题设置
学期内共18周,每2周设置1次4课时的上机实验课,共计9次,使用在线评测系统由学生在线提交代码并实时返回执行结果。除前2次基础题及最后一次综合复习外,为分治、动态规划、贪心、回溯、线性规划、网络流等6次实验课(分别根据知识点)设置1~3道模板题,并提供带注释代码框架,帮助学生理解算法模型与代码实现的关系。学生能够较为容易地理解模板题所述要求和代码框架含义,通常在1课时内完成模板题的提交,然后开始解决章节内常规算法题。在模板题的参照下,大多学生可以相较往届更快地对后续题目进行建模并完成代码编写。
3.2附加题设置
每次实验设置一道不计分附加题,供竞赛生和学有余力的优秀学生解答。附加题以当次实验主题为考点,取自国际大学生程序设计竞赛亚洲区域赛银奖或其他算法竞赛同等以上难度题目。各班每次实验课通常有1~5名学生在4课时内完成附加题,5~10名学生在后续一周内完成。
3.3分组学习与竞争模式
年级内大约有1/10的学生较为深度地参加算法竞赛,加上各班日常学习中较为拔尖的学生,首先确定组长。然后由学生自由选择小组加入,每组8~10人,各组由组长组织自行建立线上讨论组。日常教学以及实验课题目讨论、程序调试等问题首先在各组组长的指导与帮助下组内讨论解决。
每次实验课结束一周后,统计各小组完成题目总数,1人完成1题计1分,期末以小组积分排名为依据将分数奖励体现在平时成绩中。以此形式进行小组竞争,鼓励各组组长起到助教作用,带动小组学习氛围,积极帮助组内成员解决疑难问题。
3.4出题大作业设计
在期末前3周,以小组为单位围绕课程内容分别出1套题目,包含8~13道题,通常为一场标准5小时程序设计竞赛的题量,并作1次10~15分钟的讲解报告。鼓励学生了解竞赛出题原则及技巧,分析问题的蛮力解法等次优解,提出次优解无法通过评测的数据设计方案;鼓励学生熟悉Testlib、Polygon等出题工具,在使用工具检验题目数据过程中加深对题目算法复杂度的理解。最后对题目逻辑清晰性、数据范围描述、原创度、数据质量、出题报告等维度进行打分。
在组长带领下,组员能够较快地适应出题流程,并在完成出题大作业的过程中巩固对程序运行机制及各算法原理的理解。
4实践效果
进步。
5结语
在新工科背景下,通过融入算法竞赛训练体系,有效地提升了学生在算法设计与分析课程中的理论学习和实践能力。基于TBL模式和OBE教育理念,通过引入模板题、设置竞赛难度的附加题、实施竞赛生主导的小组竞争与合作,以及参考竞赛出题模式设计题目作为大作业,学生的学习效果得到了显著提升,为未来的学习和工作打下坚实的基础。融入算法竞赛训练体系的课程教学实践,为算法设计与分析课程特别是实践内容的教学方法提供了有益的启示和借鉴。
参考文献:
[1]傅向华,张席,刘宏伟,等.面向新工科的应用型大学计算机基础课程教学改革[J].计算机教育,2022(2):124-128.
[2]王树梅.新工科背景下算法设计类课程的建设与实践[J].计算机教育,2022(11):151-155.
[3]陈艳,卢清秀,文晓棠.算法设计与分析课程混合式教学模式设计与实践[J].大学教育,2023(17):62-67.
[4]SiskJ.Team-basedlearning:Systematicresearchreview[J].JournalofNursingEducation,2011,50(12):665-669.
作者简介:郭云镝,男,深圳技术大学助理教授,研究方向为机器学习,guoyundi@sztu.edu.cn;傅向华(通信作者),男,深圳技术大学教授,研究方向为自然语言处理、机器学习等,fuxianghua@sztu.edu.cn。
引用格式:郭云镝,傅向华,李经宇.融入算法竞赛训练体系的算法设计与分析课程教学实践[J].计算机教育,2024(11):178-181,186.