大学生程序设计竞赛研究与实践

时间:2022-10-27 07:45:27

大学生程序设计竞赛研究与实践

摘要:阐述了大学生程序设计竞赛背景和竞赛形式,结合高职学生实际情况,通过竞赛活动加强计算机学科教学、学生能力的培养和素质的提高,推动计算机技能应用性创新人才培养。

关键词:ACM竞赛;实践教学;创新型人才培养

中图分类号:TP311文献标识码:A文章编号:1007-9599 (2011) 24-0000-02

Research and Practice of Students Programming Contest

Gao Hebei

(Wenzhou Vocational&Technical College,Wenzhou325035,China)

Abstract:The background and form of the Collegiate Programming Contest is elaborated in this bined with the actual situation of vocational students,the contest strengthens computer science teaching,improves ability and quality of students and promotes the application of creative talent in computer skills.

Keywords:ACM contest;Practice teaching;Creative Talents

一、引言

ACM国际大学生程序设计竞赛(ACM International Collegiate Programming Contest,简称ACM/ICPC)是由ACM组织的年度性竞赛,它始于1970年,是全球大学生展示编程能力、解决问题能力和团队合作能力的平台。1977年举办了首届总决赛,随后每年举办一次国际大学生程序设计竞赛。被誉为计算机界的奥林匹克竞赛。2011年5月30第35届全球总决赛在美国佛罗里达州的奥兰多举办,共有来自30多个国家和地区的105支队伍300余名参赛者是从全世界88个国家的2070个大学的8305个队伍中脱颖而出,最终晋级世界总决赛。浙江大学荣获全球总冠军,美国的密歇根大学Ann Arbor分校获得第二,清华大学获第三。

二、大学生程序设计的竞赛形式

大学生程序设计竞赛又可以分为国际赛和国内赛(为描述方便统一简称为ACM竞赛)。国际赛包括分区预赛和世界总决赛两个阶段进行,ACM竞赛委员会将全球划分为北美、拉丁美洲、亚洲、欧洲、非洲、中东和南太平洋六个区域,每个区域设若干赛区,前一年的9-12月份举办分区预赛。各赛区预赛的第一名自动获得参加世界总决赛的资格,其他取得较好名次的学校也有可能获得邀请参加世界总决赛,但每个学校只可以出线一支队。世界总决赛一般安排在次年的3-4月举行,近几年的规模也扩大到100支队伍。国内赛中又包括全国赛和省赛,全国赛主要是以学校承办的邀请赛为主,省赛一般由各省大学生科技竞赛委员会主办,浙江省大学生程序设计竞赛从2004年开始已经历8届,2011年有300多支队伍近1000人参赛。本专科学生同堂参赛,分开划分等级,高职学生也参与了这个ACM竞赛平台,约占参赛总人数的三分之一。

ACM对参赛队的要求非常高,需要队员具有扎实的基本功以及良好的分析问题能力和很强的实践编程能力。ACM比赛是不多于三人组队参加,竞赛由队员自己完成,同队队员可以相互讨论。竞赛时间为5个小时,参赛队必须准时进入统一竞赛场地。竞赛中至少命题6题,至多命题12题。系统支持人员可以回答或解释系统错误信息等系统相关的问题。

在竞赛网页上提交的每一次执行程序都会被判正确或错误,判决结果即时显示在网页。竞赛成绩首先以解题数量进行排名,如果多支队伍解题数量相同,则根据解题总时间短的优先胜出,每错误提交一次要增加惩罚时间。正确解题数最多且总用时最少的队伍为冠军。

三、大学生程序设计竞赛的教学方法

ACM竞赛涉及知识面广,要求学生具有扎实的程序设计基础,能够应用数据结构、算法设计与分析和人工智能等相关计算机理论,要求队员具有较高的数学修养,掌握数学、和计算机等方面的知识,并能加以熟练应用。

(一)培养对象。ACM竞赛教学目的性比较强,主要培养大学生程序设计的解决问题能力。本项比赛涉及的知识面宽、内容多而且难度也比较大,往往学生在普通高中阶段一般都没有计算机编程基础,进入大学低年级就要掌握好程序设计基础课程,课外为其开设ACM竞赛相关辅导课程。尤其对高职院校来说,低年级的学生一般基础都比较薄弱,往往只学了程序设计基础和部分数学课程,ACM竞赛注重理论结合实践,要求参赛者具有较强的编程能力和扎实的理论知识。期望把一名普通大学生培养为ACM省赛及以上选手至少需要一年时间,因此建议在一年级的下学期就有必要对他们进行选拔和培养,尤其是学完数据结构课程之后就对他们进行集训。参加ACM培训的学生知道需要掌握哪些方面的知识,以及加强哪些方面的锻炼。最后即使未能参加省级以上ACM竞赛,也能在ACM学习、辅导和集训的过程中扩展知识面,为将来工作提供一个广阔的发展空间。

(二)实践内容及形式。ACM竞赛辅导是为培养ACM竞赛选手,同时也是开阔广大学生知识面而开展的一个实践项目,所涉及的内容比较多,未能面面俱到,因此培训内容以及深度选择尤为重要。温州职业技术学院从2007年组队参加省赛并获得三等奖,当时我们主要是加强队员的计算机专业知识如编程和数据结构方面,部分简单数学问题及相应的算法实现。通过前几年的摸索和实践,我们选择数据结构、搜索、动态规划、组合数学等专题,实现以点带面的目的,激发学生去学习更多的知识,从而促进学生自主学习,提高算法设计与分析的素质和能力。最近几年连续获省赛二等奖。

教学内容方面,首先,是编程基础,比赛可以使用C或C++作为编程语言。其次学习数据结构知识,掌握栈、队列、树和图等内容,掌握1-2种查找和排序的方法。高校往往把C语言作为程序设计基础教学,然后推荐标准模版库(STL)的使用。

计算机专业知识方面还要具备搜索、动态规划等内容。搜索算法在很多场合都要用到,着重分析了深度优先和广度优先及其性质,还需要掌握剪枝优化的方法。另一类常用算法是递推、递归、贪心法和动态规划,需要加强这方面题目的练习。

其次,数学知识方面选择离散数学中的图论和组合数学。图论结合数据结构和算法的基本思想,如连通性判断、BFS和DFS、最小生成树、最短路径等等,但这方面的题目不太容易解题。

最后,设置了若干专题和比赛经验介绍。教学内容比较多且比较杂,刚开始以教师授课为主,同时引导学生课外深入探讨,逐渐过渡到采用课堂讨论为主的教学模式,确定讨论主题,学生自己训练,教师加以引导,提高学生程序设计解决问题的能力。

四、大学生程序设计竞赛的意义及实践

ACM竞赛涉及学科知识面广,对学生多方面能力的培养有着积极的意义,可以提高学生自主学习能力、创新能力,也有利于团队精神的培养,并且对于教学改革有积极的推动作用。

(一)ACM的意义。要求队员不仅具有程序设计的基础、算法的设计能力和扎实的数学基础,而且能够对题目以及所要解决的问题产生正确认识和理解,包括分析清楚事物属性、行为及其彼此之间的关系,构造出解决问题的算法、以及优化算法和具体实现。因此,还要求队员具有熟练的编程技能,把对问题及其求解方法的理解并描述清楚,最终产生一个计算机能够理解和执行的程序实现。

ACM是三人共用一台电脑,有益于培养集体合作精神。同时,要求队员具有良好的心理素质、做到落后时不急不躁,领先时不盲目乐观。有益于快速的临场应变能力培养,队员能够独立思考问题、挖掘规律、勇于质疑、拓展思路,创造性地把知识运用于求解不同的问题。有益于提升学生的综合素质,既考查学生的知识面,又考查学生的非智力因素,它是一项综合而全面的素质比赛。

ACM对学风和校风建设具有重大影响。程序设计竞赛主要考的是数据结构、算法和数学模型,这些知识是本科阶段主要的专业基础课程,所以程序设计竞赛一定程度上可以反映出一个学校的教学水平,也能客观地反映学生的综合素质。ACM竞赛考察了学生的英语水平,竞赛题目全部使用英文,在竞赛的学习和集训过程中提高了学生的英文阅读能力和英语的学习兴趣。ACM竞赛对学生的促进是多方面的,对于ACM队员来说取得成绩固然欣喜,即使未能在竞赛中获奖,甚至未能参加高级别的比赛,也已在ACM的辅导和集训过程中感受了这种竞赛氛围,激发了学生兴趣,从“要我学”到“我要学”的转变,同时还带动了周围的学生,为学校营造一个良好的学风。学校也可以增加ACM开放实验室项目,和组织多层次的校赛、院赛、各种联赛等比赛,以赛促学,加强学校的学风和校风建设的同时也给学生提供一个充分展示自己才华的舞台。

我院为国家示范性高职院校、全国职业教育先进单位、全国高职高专人才培养工作水平评估优秀学校。当前我院以培养高素质、高技能应用性人才为本,突出“实践性”,以教学为中心的应用性创新人才培养基地的目标发展。全面发挥高校人才培养、科技开发和社会服务的三大职能,即体现“高教性”现。我院计算机专业学生培养,立足温州放眼浙江以及整个长江三角洲,成为地区型软件产业蓝领人才库,ACM竞赛为学院增加了一种多层次、系统化的创新实践教学体系。

(二)实践之路。对于我们高职院校来说,新生一般没有程序设计基础,有关ACM竞赛所需要的知识基础很薄弱,而ACM题目一般难度较大,强调算法的高效性,每一个题目必须在最短的时间内以最佳的方式解决,要求队员具有一定的理论知识和实践能力,确保编程速度和正确性;然而,实践能力和解决问题的洞察力相对于理论和技术而言更难培养。

我们通过作ACM竞赛专题报告、相关教师课堂宣传等形式,使大一的学生了解ACM竞赛活动,包括竞赛意义、规则、知识点分布在大学中相应开设的课程、竞赛活动辅导形式等,以及我们灵活的队员选拔机制。我们把队员分为预备队员、集训队员和正式队员,每年的下半年招募一批新队员进行相关基础辅导,这些队员称为预备队员,没有人数限制,通过毛遂自荐、老队员推荐的形式产生。我们对预备队员主要以讲座、入门级的练习和讨论的形式。为此我们设置了ACM专用实验室,以实验室开放项目的形式培养学生。在预备队员中会有些学生脱颖而出,晋级到集训队员,进行专题集训和研讨,每周至少组织一次活动,在寒暑假也会适当安排时间集训;另外在每年的4月都会举行校ACM竞赛,校赛中的获奖者也可获取集训队员的资格。根据集训期间的表现、做题数目、集训赛总成绩以及团队合作能力等因素综合考虑,集训后确定9-12名正式队员参加省大学生程序设计大赛。

ACM竞赛培训辅导的重要环节就是在针对选拔出的集训队员进行培养,需要一个比较完善的培训体系,对于高职学生来说,我们可以借鉴国内在国际ACM竞赛中取得较好成绩的高校,但是不能照搬,因为高职院校学生基础知识比较薄弱,对于本科院校很多比赛用到的知识需要到高年级才开设课程,而我们高职院校却没有开设这些课程。针对这一情况我们开设实验室开放项目,让队员明白ACM需要哪些方面的知识,帮助他们进行有选择地自主学习;另外还通过请专门领域的专家开设讲座,包括往届已取得优异成绩的学生进行交流活动,充实他们的理论基础和实践经验,提高他们分析问题的能力。同时还要给集训队员提供良好的集训环境,形成团结、合作且充满竞争的集训氛围。建立以老带新的策略,形成了老队员帮助新队员的传帮带。还可以考虑建立网络集训平台,更加方便交流。同样兄弟院校也有许多类似的网络平台,鼓励队员同外界进行交流,促进大家的共同提高。

五、小结

程序设计竞赛主要考的这些知识恰恰就是计算机专业基础课程,是院校之间的计算机教学水平、学生学习与解决问题的能力的一种综合较量。一般参加竞赛指导教师队伍年轻活力、精力充沛、积极向上,积极进行教学改革和探索技能训练方法,能够有效地培养程序设计应用技能型人才。这也是一个长期的工程,经过不断积累和努力,对高职院校学生程序设计和解决问题能力的有效提高具有十分重大的意义。

参考文献:

[1]郭嵩山,王磊,张子臻.ACM ICPC与创新型IT人才的培养[J].实验室研究与探索,2007,26(12):181-185

[2]孙大烈,车万翔.ACM竞赛与学生综合实践能力培养[J].计算机教育,2009,19:12-14

[3]袁国武,赵杨,赵征鹏,杨泽榆.依托程序设计竞赛,提高计算机专业学生培养质量[J].计算机教育,2009,15:104-106

[4]司华友,赵芸,罗显贵.基于C语言的程序设计能力培养探析[J].计算机时代,2008,3:68-69

[5]王磊.ACM-ICPC竞赛中的团队合作[J].计算机教育,2006,3:73

[6]王晓勇,俞松坤.以学科竞赛引领创新人才培养[J].中国大学教学,2007,12:59-60

[基金项目]温州职业技术学院教改项目资助(WZYJG0939)

[作者简介]高和蓓(1979-),女,浙江温州人,硕士,讲师,主要从事计算机应用专业教学与研究工作。

上一篇:万兆以太网在数字电视上的应用 下一篇:浅谈项目化教学在中职PHOTOSHOP教学中的应用