从ACM/ICPC看计算机算法设计教学改革

2013-04-02 04:00李俊芳
赤峰学院学报·自然科学版 2013年16期
关键词:程序设计竞赛计算机

李俊芳

(集宁师范学院 计算机系,内蒙古 乌兰察布 012000)

互联网时代,对信息的关注与把握日益渗透在人们的日常生活中,人们越来越发现自己无法脱离这种信息化的生活方式,人们的生活依赖于信息的收集、处理以及传送.

很多时候,我们需要将自己所接收的信息进一步处理、分析,获取信息并对它进行加工处理,使之成为有用信息并发布出去的过程,称为信息处理.信息处理的过程主要包括信息的获取、储存、加工、发布和表示.人脑其实就相当一台计算机通过记忆力来储存信息,通过四维来管理和处理信息,但是毕竟人脑的功能是有限的,处理数据能力也赶不上计算机,所以人们开始希望能够通过计算机来管理信息,通过一个管理软件来帮助人们来完成工作.

另外,计算机软件的在近几年得到了非常大的发展,特别是在经济全球化的出现之后,自从新世纪以来,信息技术在企业中得到了越来越广泛的应用,无论是在企业的经营与生产中,还是在企业内部管理以及对产品的设计与制造,企业信息化转变极大地提高了企业的竞争力,很多企业也逐渐认识到计算机在企业中的作用,并且对企业的帮助等等,很多企业也逐渐增加了it部,以便对企业里的计算机软件和硬件来进行支撑工作,企业也注意到信息化的发展和处理信息的重要性,目前,很多企业已经认同了通过应用软件来实现对企业的管理.我们知道,企业信息化主要包含了广泛利用信息技术,让企业在生产与管理等方面,用以通过这些方法来实现信息化,这是一个十分广泛的概念.

企业的信息化不仅运用于内部,企业与企业之间的合作也离不开信息技术.例如企业与其他合作对象互相交流数据,企业与客户之间的业务往来,这些均是企业信息化发展的一部分.以上我们通过办公软件来揭示计算机软件对人们生活和工作的影响,而软件是通过算法研究开发的,这么说来计算机是跟这时代一同进步的,而计算机算法设计也不断推陈出新,要想计算机的应用得到充分发展,计算计算法的研究和教学是非常重要的.

1 从ACM/ICPC的历史意义和发展历程

1.1 什么是ACM/ICPC

要想研究从ACM/ICPC看计算机算法设计教学改革,首先什么是ACM/ICPC?下面我们首先了解ACM.ACM国际大学生程序设计竞赛 (英文全称:ACM International Collegiate Programming Contest(ACM-ICPC或ICPC)主办方为美国计算机协会(ACM),是国际大学生程序设计竞赛的标志,这是一项旨在展示大学生团队精神、创新能力以及在压力下编写程序、分析和解决问题能力的年度竞赛.

1.2 ACM/ICPC的发展历程

ACM国际大学生程序设计竞赛由IBM公司赞助,已经经过了超过30年的发展,目前已经发展成为最具影响力的大学生计算机竞赛.ACM国际大学生程序设计竞赛首届举行在1970年,在美国德克萨斯大学,首届赛事的主办方是the Alpha Chapter of the UPE Computer Science Honor Society.这种方式是一种全新的培养计算机编程人才的方式,这种比赛不仅刺激学生们对新技术的求知欲望和学习欲望,还能培养对于一个软件的更深的理解,不仅仅是停留在只要程序运行出所要达到的结果就行了,而是对于程序而言仅仅执行出来结果只是最浅层次的要求,而最有造诣的是如何设计这样的程序,要时间复杂度和空间复杂度做到最小,除了可以锻炼上述一些技能以外,我认为最重要的是锻炼了学生们的团队精神和团队的执行力,如何领导一个团队,如何做一个称职的leader,如何做一好一个开发者,总之要想完成比赛,必须分工明确,齐心协力才能够达成.因此,美国以及加拿大各大学很快便开始积极响应赛事.尤其是在1977年,首次总决赛在ACM计算机科学会议期间举办,这也促使了竞赛演变发展成为多国参与的国际性比赛,并且一年便有一届举办.相比最初的几届,参赛队伍不再只有美国及加拿大的大学,竞赛逐渐发展成为一项世界范围内的竞赛.2002年美国夏威夷的第26届、2005年上海的第29届和2010在哈尔滨的第34届的全球总决赛上,来自中国大陆的上海交通大学代表队则在三夺冠军,浙江大学参赛队在美国当地时间2011年5月30下午2时结束的第35届ACM国际大学生程序设计竞赛全球总决赛荣获全球总冠军,成为除上海交通大学之外唯一获得ACM国际大学生程序设计竞赛全球总决赛冠军的亚洲高校,目前,这也是来自亚洲的参赛大学取得的最佳成绩.如今,最初的北美大学一枝独秀的局势不再,已经演变成亚欧对抗局面的竞争格局.

1.3 ACM/ICPC的算法比赛流程

ACM/ICPC比赛方式是以团队的型式,以学校为单位,每个学校有一个队组成,一个队有三名学生,比赛要求是非常严格的,这个队的比赛队员必须是这个学校的,而且还是在校就读学生,不能毕业的或者其他学校的学生,编写程序是这样的,试题的规则是例如:C、D个小组如果都必须在规定时间内完成两道程序题,而且要运行处结果,在编写程序过程中既要保证程序的编写质量又要保证程序的编写速度,如果D队在C队没有完成之前把两道题都完成的话,那么D队获胜!反之C队获得胜利.

2 计算机算法设计教学改革

2.1 计算机算法的重要性

要想研究算法,就得知道什么是算法?算法可以简单理解成解决问题的方法.在计算机科学中,算法是很重要的概念.它指明了问题的处理、求解过程,是对给定问题解决方案的准确而完整的描述.其实,我们做任何事情都有相应的算法.例如,电视机的操作说明,就是使用电视机的算法;航模的安装步骤示意图,就是制作航模的算法.把算法交给计算机执行是一件很复杂的事情,其中最大的障碍就是人类自己的交流不畅和人机之间的语言不通.为了更好地合作,人们需要把算法正确、清晰、简洁地表达出来.自然语言(汉语、英语等)、流程图、程序设计语言等都可以用来描述算法.简单讲述把算法交给计算机执行的一般步骤.人们通常用自然语言、流程图、程序设计语言来描述算法.

2.2 根据ACM/ICPC要求来了解语言

ACM/ICPC比赛主要是用C、C++、Pascal或Java这几种语言参赛,首先是c语言,一个程序开发者必须要学习C语言,这是为什么呢?因为C语言是所有语言的基础,另外C语言是一种轻量级的,很有表达力的语法,能很好的展现冯·诺曼机器的能力.冯·诺曼机器架构就是你每天都用的计算机的架构的标准:一个CPU、内存、硬盘、一条总线.多核计算机并没有带来本质上的变化.冯?诺曼机是一个很方便,很便宜,上世纪五十年代的实现图灵机的技术,图灵机是执行计算的最知名的抽象模型.然后是C++,跟c比,在设计大型系统上面有著很大优势,OO的思想便于建模,很方便设计.执行效率也不见得低c++的优势在哪里跟Java比,效率要高很多 (众所周知,java程序很费资源)c++的优势在学好C++,以后去任何公司都是可以的,不过现在中国使用C还是最多的c++的优势在哪里做外包的话,都用到数据库应用程序开发(各种管理系统)使用c++或者java c++的优势在哪里通信(qq,迅雷,华为,中信),都是C++,这个领域是C++的强项c++的优势在哪里手机,JAVA随著GOOGLE的平台,将有很大前途,但是NOKIA使用的平台,还是C/C++用于开发c++的优势在哪里汽车、冰箱……都是嵌入式系统,使用C和汇编居多c++的优势在哪里服务器端后台编程,还是C++的天下.Pascal语言还是一种自编译的语言,这就使它的可靠性大大提高了.在Pascal的各个版本中,尤以Turbo Pascal的功能最为强大.Pascal具有简洁的语法,结构化的程序结构.它是结构化编程语言,于70年代在ALGOL基础上研制出来的.它具有丰富的数据类型并提供了数据类型定义设施,其控制结构体现了结构程序设计原则.它最初是为系统地教授程序设计而设计的,特点是简明化和结构化,适合教学科学计算与系统软件的研制.如今,在许多学校的计算机语言课上,学的都是Pascal语言,用的都是Turbo Pascal.至今,Pascal还是国际信息学奥林匹克竞赛中最受欢迎的编程语言之一.Pascal是最早出现的结构化编程语言,具有丰富的数据类型和简洁灵活的操作语句,适于描述数值和非数值的问题.另外在数学领域,pascal异常很强大.java不用多说是非常强大的语言,java不同于前三种语言,java语言是面向对象语言,那么什么是面向对象语言呢?通俗的说:“如果有一辆汽车,你不需要学会制造汽车,也就是说你不用懂得汽车的构造,只要会驾驶会使用它,就可以开着它上路,来为你服务”.也就是说程序开发者如果想实现一个功能,程序开发者只要是调用公共类里的方法,不需要知道这些方法是怎么编写的,只要使用它即可.所以随着时代的发展,编程语言也逐渐变得容易,程序的复用性越来越高.

2.3 计算机算法设计教学改革

随着计算机热,各大院校都开始开设软件工程专业,为了是让更多的栋梁之才学习计算机编程,从事软件开发行业,软降工程是计算机科学与技术系的一门专业课程,通过本课程的学习使学生掌握软件工程的基本概念、基本原理、实用的开发方法和技术;了解软件工程各领域的发展动向;如何用工程化的方法开发软件项目,以及在开发过程中应遵循的流程、准则、标准和规范.在领域培养高级软件开发人员和系统分析员打下坚实的基础.通过软件工程课程的教学,应使学生系统掌握软件工程的基本概念,软件设计中的过程抽象,软件设计中的控制结构,软件设计中的数据类型,软件设计过程,软件开发和维护模型,抽象和信息隐藏,结构化设计和过程设计,软件设计的实现策略和语言,面向对象的分析设计方法,面向对象建立模型,软件测试、软件管理等.通过软件工程课程的教学,应注意培养学生以下能力:进行抽象思维和逻辑推理的理性思维能力;综合运用软件工程的知识和方法进行分析和解决问题的能力;会应用一些方法(Jackson、McCabe、Coad、Booch、OMT) 进行基本问题描述,如应用Jackson方法进行对算法进行结构化分析、OMT进行面向对象程序分析等;较强的自主学习能力,提高学生学习软件工程的积极性,激发学习兴趣,增强学习的信心;主动探索和独立思考的能力,提高学生的创新意识.通过软件工程课程教学,应注重培养学生以下素质:深入理解软件工程基本概念和基本方法,掌握用软件工程的知识解决实际问题的方法与手段,对各种问题能以多角度探寻解决问题的道路的素养;主动将软件工程原理应用到具体的实践中去的素养;善于对现实世界中现象和过程进行合理的简化和量化,建立数学模型的素养;能用准确、简明、规范的语言表达软件工程思想的素养;能够在软件项目开发中寻找新的方法与思路,并不断地丰富软件项目开发的技术与方法的素养.

3 结论

以上我们通过ACM/ICPC方面来分析软件算法的教学设计,也了解了很多编程语言的特性优势以及劣势,另外我也了解随着社会的发展,计算机的发展,计算机和计算机网络逐渐成为我们日常生活的必需品.计算机给我们带来工作管理上革命性质的变化,计算机网络则是把这种变化发挥到极致的技术.软件编程则是改变了我们的工作和生活的方式.

〔1〕June jam rich Parsons,Dan O ja.计算机文化.北京:机械工业出版社,2001.

〔2〕山东省教育厅组编.计算机文化基础.东营:中国石油大学出版社,2006.

〔3〕Silberschatz,杨冬青,唐世渭,等.数据库系统概论.北京:机械工业出版社,2000.

猜你喜欢
程序设计竞赛计算机
2020丝绸之路数学竞赛
计算机操作系统
基于Visual Studio Code的C语言程序设计实践教学探索
基于计算机自然语言处理的机器翻译技术应用与简介
从细节入手,谈PLC程序设计技巧
信息系统审计中计算机审计的应用
我看竞赛
创新思维竞赛(3)
高职高专院校C语言程序设计教学改革探索
PLC梯形图程序设计技巧及应用