欢迎来到专业的新思文库网平台! 工作计划 工作总结 心得体会 事迹材料 述职报告 疫情防控 思想汇报 党课下载
当前位置:首页 > 范文大全 > 教案设计 > 正文

算法设计与分析课程教学研究

时间:2022-12-14 15:45:06 来源:网友投稿

zoޛ)j首学习的必要性,针对计算机专业算法课程教学中存在的问题,分析其产生的原因,提出从教学内容的选择与组织。教学方法、算法设计实践、考核方式等方面探讨算法教学改革方案,并列举具体的措施与建议。

关键词:算法设计与分析;教学问题;教学改革;五步讲授法;措施与建议

1、背景

算法设计与分析是一门理论性与实践性相结合的课程,是计算机科学与计算机应用专业的核心课程。该课程的宗旨是在分析解决问题的过程中培养学生的抽象思维和缜密概括能力,并提高学生的软件开发设计能力。在学习算法课程之前,学生已经基本掌握了程序设计和数据结构知识,能熟练运用计算机语言进行程序设计,并具备一定的编程经验。然而,学生如何利用已有的基础知识,针对不同领域的实际问题进行深入分析,能够提出解决问题的思路,从而设计出有效的算法,是算法课程需要实现的教学目标。

在教学实践中发现,算法教学中存在一些典型问题。比如,学生缺乏学习算法的自觉性和积极性,学生对算法教学的某些内容比较厌烦,教学方法过于简单陈旧等。这些问题的存在严重影响了算法教学的效果与质量,为此,笔者通过调查研究和学生访谈形式探讨了可能造成这些问题的原因。

(1)教师和学生对算法地位认识不清;

(2)教学内容选择与组织不合理,理论内容偏多;

(3)教学缺乏科学合理的方法;

(4)算法实践缺乏方法论的指导;

(5)算法考核方式不合理,偏重于结果考核而缺乏对算法学习过程的评价。

2、学习算法的必要性

算法是计算机科学中最具方法论性质的核心概念,被誉为计算机学科的灵魂。对于计算机专业学生而言,无论从理论还是实践角度,学习算法都是必需的。从实践的角度来说,算法学习可以帮助学生了解计算领域中不同问题的标准算法,使学生具备设计新算法和分析其效率的能力;从理论的角度来看,算法研究被公认为计算机科学的基石。David Harel在“Algorithmies:the Spiritof Computing”中这样描述算法:算法是计算机科学研究的重要分支,更是支撑计算机科学大厦的核心和基石。可以说,没有算法就没有计算机程序,也就没有今天蓬勃发展的信息技术。

此外,算法的训练可以提高学生分析和解决问题的能力。计算机专业学生接受良好的算法训练后应该知道怎样处理算法,包括构造算法、操作算法、理解算法以及分析算法,这些技能的获得将有助于提高学生的手动编程能力。算法作为一种受用一生的通用智能工具,也必定有助于提高学生学习和理解其他学科知识的能力,因为将知识形式化为算法,将使得学生对知识的理解变得更加深刻。因此,对于计算机专业学生来说,算法是需要高度重视并且努力学好的核心课程之一。

在计算机课程体系中,算法是一门承前启后的核心课程,如图l所示。算法的先修课程包括离散数学、程序设计、计算方法、数据结构等课程,后续课程包括编译原理、操作系统、软件工程、数据挖掘等课程。算法课程的学习质量如何将会直接影响到后续课程的学习效果。从本质上讲,算法是一门通用的、形式化的智能工具,而专业课程知识仅是一些专业领域知识,学生只有充分掌握了算法设计技能,再学习并精通一些专业知识,才能成为特定领域的专家。从课程关系来看,算法处于整个计算机课程体系的核心地位,因此计算机专业学生必须重视算法课程的学习。

3、教学内容的选择与组织

算法面对的教学对象主要是计算机专业学生。虽然这些学生已经具有一定的基础知识和编程能力,但是大部分学生所具备的知识储备和综合素质远没有达到算法课程的要求,因此,合理地选择与组织教学内容对提高教学效果会起到非常关键的作用。教学内容的内涵是什么,这是一个“仁者见仁,智者见智”的命题。狭义上讲,教学内容是包含于教材之中,向学生展示的课堂内容。从广义上讲,它是教学过程中与师生发生交互作用、服务手教学目的、动态生成的素材及信息。为了提高教学效果和质量,教师必须认真选择并科学规划教学内容,使得内容结构合理、系统性强,从而更加符合认知规律,有利于学生理解和掌握知识。例如,我们经过多年的教学实践,已经初步形成了一些颇具特色的教学内容,它由算法基础知识、算法设计策略和算法分析技术3部分构成。算法基础知识包括算法的概念、基本要素、问题求解步骤等。算法设计策略主要包括迭代法、蛮力法、分治法、贪婪法和动态规划。算法分析技术主要包括算法分析的评价体系、算法的时间复杂性和空间复杂性。

在教学实施过程中,教师要讲清楚算法的基本概念与思想方法,理论联系实际,用实际项目激发学生学习算法的兴趣。因此,我们认为教学内容的讲解要遵循以下原则。

(1)要讲透算法的基本概念与思想。算法的基本概念与思想包括两种含义。广义上,算法的内涵包括算法定义与基本要素、算法求解问题的思路、算法分析技术等。狭义上,算法的内涵是指具体的某种算法,包括算法的基本思想和方法、算法的时空复杂性分析、特定的应用场景等。例如,介绍算法三要素(操作、控制结构和数据结构)时要明确地解释每种要素所涉及的内涵。学生对算法三要素的深刻理解和掌握,有利于他们从本质上了解和掌握算法的内涵与构造,消除他们对算法“高、深、难”的认识误区,从而激发学生学习算法的积极性。

(2)讲授算法要结合具体的应用场景。算法讲授时要结合实际的应用场景,以激发学生的学习兴趣,使学生将被动学习变为主动学习,便于学生理解算法的基本方法,领会和掌握算法的思想精髓。算法中最重要的5种设计策略(迭代法、蛮力法、分治法、贪婪法和动态规划)仍然是讲授的重点,但要结合学生感兴趣的实例进行讲解。例如,在讲授用分治法设计排序算法时,可以结合Google搜索引擎中PageRank算法思想来讲解,使学生从现实生活中感受分治排序算法的魅力。

(3)以竞赛与科研训练为依托,强化学以致用的能力,通过学生对程序设计竞赛的认同来增强其学习兴趣。例如,在课堂教学中,教师可以选用一些ACM/ICPC(国际大学生程序设计竞赛)题目实例来阐述算法的基本思想和方法。在布置作业时,可以鼓励能力强的学生编程实现ACM/ICPC题库中的挑战性题目,而一般能力的学生可以选做ACM/ICPC题库中的简单题目。另外,教师可以让能力强的学生阅读用传统算法解决不同领域问题的最新科研论文,让学生明白传统算法依然在不同领域中有着广泛的应用。同时,教师可以适当地引导学生参与科研项目,初步培养学生的研究型思维,为他们终身学习奠定良好的方法论基础。

4、教学方法

教学方法是教师和学生为了实现共同的教学目标,完成共同的教学任务,在教学过程中运用的方式与手段的总称。在教学过程中,教师应该始终贯穿“以问题为中心,以求解为目标”的指导思想来阐述算法设计过程。一般来说,问题求解是从问题分析到算法设计,再到算法分析的逻辑思维过程。第一步是“问题分析”。针对问题的现实领域,认真分析并确认问题的逻辑结构和基本功能,进而建立数学模型,.这是从具体到抽象的过程。第二步是“算法设计”。根据求解问题域的特点和数学模型,选择合适的数据结构,进行算法设计和实现,这是从抽象到具体的过程。第三步“算法分析”是对算法的时空复杂度等性质的评价与总结。在讲授算法实例时,建议教师采用“五步讲授法”,即问题分析、数学建模、算法设计、算法说明与算法分析。实践表明,“五步讲授法”有助于学生理解算法的基本方法,掌握算法的思想精髓,从而提高学生分析和解决问题的能力。

在传统的教学过程中,教师采用以授课为主的教学方式,强调“灌输知识”。这是一种单向填鸭式的传授方法,使得教师与学生之间缺少必要的交流和互动。为了提高学生的学习效果和质量,充分发挥学生的学习潜能,我们认为在课程教学中适当采用启发式和研究式的教学方法是非常必要的。

(1)以实际应用场景为中心的启发式教学。教师应该以算法应用场景为驱动,采用启发诱导的办法传授算法基本知识,促使学生更有针对性地学习,从而提高学生的算法设计和分析技能。

(2)以问题为中心的研究式教学。研究式教学以解决科学问题为中心,关注学生的独立活动,着眼于培养学生的创新思维能力。学校教育不仅仅要让学生学习知识,更重要的是要掌握有效的学习方法。由于研究式教学的载体与核心是科学问题,因此教师需要选择一些科研项目,然后按照教学目标精心设计一些难度适宜、具有探索性的科学问题。同时,教师在使用这种教学模式时要客观看待学生能力上的差异,做到因材施教、区分对待。

5、算法设计实践

算法设计实践的目的是帮助学生消化和巩固课堂知识,并加强应用算法解决实际问题的能力。算法设计是综合运用算法解决实际问题的智力活动,是算法相关知识在实际问题领域的直接应用,其结果就是解决实际问题的算法实例,即问题求解的算法。问题求解过程一般包括问题分析、数学建模、算法设计、代码编写、算法分析等步骤。教师在教学过程中应始终贯穿这条主线,做到重点突出、统筹兼顾。在算法方法方面,教师应给学生传授“循环不变式”(Loop Invariant)作为算法设计与分析的有力工具。“循环不变式”的熟练掌握有助于学生从逻辑上保证算法设计的正确性。“循环不变式”就是指某些语句在循环的每一次迭代中都成立。例如,在循环“int j=9;for(int i=0;i<10;i++)j--”中每次迭代都有“i+j=9”成立。用循环不变式设计算法将使问题变得明朗,有利于形式化精确设计算法。在设计算法时若使用循环不变式,算法设计者可以强迫自己仔细思考算法的逻辑,从而确保算法设计正确。

循环不变式是一个程序推理的形式化工具,是算法设计和分析的有力工具,从逻辑上分为3部分:初始化(循环前)、保持(循环中)、终止(循环后)。与此对应,它具有如下性质。

(1)初始化:在循环的第1轮迭代开始之前它应该是正确的。

(2)保持:若在循环的某一次迭代开始之前它是正确的,则下一次迭代开始之前它也应该保持正确。

(3)终止:当循环结束时,正确的循环结果表明了算法的正确性。

因此,算法设计与分析时要关注不变式(条件)及其变化在上述3个阶段的真伪。

在算法设计实验内容上,考虑到学生动手能力上的差异,需要设置不同类型的实验。第一,基础验证型实验。针对教材中的基础算法,教师应该选择性地要求学生编程验证。例如,对于MiniSpanTree问题可以选用Kruskal和Prim算法分别编程实现,比较不同拓扑规模下算法的执行时间。第二,改进型实验。对于一些解决传统问题中的算法,鼓励学生尝试对算法进行优化设计,编写高效率的改进算法。第三,综合型实验。这类实验既要求学生综合运用所学算法的基本思想与方法,又要求研究分析问题,提出新算法的设计思路。

6、考核方式

目前算法课程的考核方式主要由期末考试与实验考试两部分组成,这种考核方式使得学生过分关注考试结果,而缺乏课堂讨论以及项目成员间互动学习等过程考核。我们认为教师除了期末考试以外,还应该增加平时考核和过程考核。为了激发学生的学习欲望与兴趣,教师在教学活动中,对学生的积极表现和友好互动应该给予“加分”激励。同时,教师要重视学生学习的过程考核,过程考核成绩由教师和项目成员对学生的评价成绩加权而成。最终,算法课程总成绩由平时考核、过程考核与期末考核3部分构成。平时考核占15%,包括课堂表现、问题回答、‘与老师的交流互动、额外加分等;过程考核占35%,包括作业完成质量、项目参与度、项目完成质量等;期末考核占50%,包括理论考试和上机实验考试。这种复合型考核方式注重对学生平时学习以及过程表现(包括课堂表现和项目参与等)的考核,不仅降低了期末考试的巨大压力,而且避免“临时抱佛脚”的集中式应试,使学生注重过程学习,从而提高学习的效果和质量。

7、结语

在教学方法上,笔者提出了强化学生的问题分析与数学建模能力;在算法设计与分析方面,探讨了利用“Loop Invariant(循环不变式)”工具来提高学生设计与分析算法的能力。通过在课堂教学中反复强化问题分析、数学建模以及“LoopInvariant”的重要性,达到将算法思维能力最终转化成学生的认识论和方法论。通过与学生座谈并结合实际考核结果可以发现,与之前相比,学生对算法课程的内容和学习方法有了更深刻认识,他们具备了较强的计算思维能力以及分析解决问题的能力。这表明我们提出的教学改革方法在算法课程教学中已经取得了预期的良好效果。

推荐访问:教学研究 算法 课程 分析 设计