分治算法求解棋盘覆盖问题互动教学过程_第1页
分治算法求解棋盘覆盖问题互动教学过程_第2页
分治算法求解棋盘覆盖问题互动教学过程_第3页
分治算法求解棋盘覆盖问题互动教学过程_第4页
分治算法求解棋盘覆盖问题互动教学过程_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、分治算法求解棋盘覆盖问题互动教学过程 摘要:针对算法设计与分析课程难度较大、对学生编程能力要求较高的现状,通过对棋盘覆盖问题的分治算法求解过程进行互动教学设计,引导学生进行问题理解、算法设计、算法实现。特别是在算法实现环节,一行一行地动态展示程序的编写过程,同时充分考虑学生现有的编程基础,采用程序填空的形式降低学生编程难度,有助于消除学生的畏难心理,有效提高了学生的学习兴趣,同时锻炼了学生的计算思维 关键词:棋盘覆盖;递归;分治;互动教学 中图分类号:TP301 文献标识码:A 文章编号:1009-3044(2016)35-0146-02 Interactive Teaching Proced

2、ure of the “Divide and Conquer” Algorithm with the Problem of “Chess Board” LV Lan-lan, LI Ming (Department of Software Engineering, College of Electronic and Information Engineering, Hunan University of Science and Engineering, Yongzhou 425100, China) Abstract:The course of algorithm design and ana

3、lysis is difficult to those students with poor programming ability. This paper describes the interactive teaching design of the “divide and conquer” algorithm with the problem of “chess board”, which includes directing students to understand the problem, design and implement the algorithm. Especiall

4、y during the phase of algorithm implementation, we show the procedure of programming to students line by line. At the same time, we use “program completion” to make programming easy for students. It is help to eliminate students fear, inspire their interest and train their computational thinking. Ke

5、y words: chess board; recursion; divide and conquer; interactive teaching 1 引言 惴难芯恳丫被公认为是计算机科学的基石,算法设计与分析课程也是我校软件工程专业的一门专业核心课程,学习算法的重要性毋庸置疑。但算法设计与分析课程具有难度大,对学生编程能力要求高的特点,不少学生望而却步。在教学过程中我们发现,虽然大部分学生能正确理解算法的思路,但是却不能以某种高级程序设计语言实现算法。针对学生这种“眼高手低”的现状,本文提出将“程序填空”这一程序设计类课程考试中常用的题型,应用到算法设计与分析课程日常教学中,通过实施互动教学

6、降低课程难度、激发学生兴趣。我们以分治法求解棋盘覆盖问题为例,逐步引导学生完成从算法的思路解析到完整实现的全过程,聚焦从算法到程序的“最后一公里” 2 棋盘覆盖问题 2.1 问题描述 棋盘覆盖问题是许多国内教材1-2在阐述分治法时使用的一个经典案例,具体描述如下: 在一个个方格组成的棋盘中,若恰有一个方格与其它方格不同,则称该方格为一特殊方格,称该棋盘为一特殊棋盘。图1为k=2时的一个特殊棋盘,其中特殊方格的位置是(1,2),用阴影表示 在棋盘覆盖问题中,要用图2中4种不同形态的L型骨牌覆盖一个给定的特殊棋盘上除特殊方格以外的所有方格,且任何2个L型骨牌不得重叠覆盖 图棋盘覆盖问题的已知条件是

7、在一个的棋盘上有一个特殊方格,因此算法的输入可以用来表示棋盘的大小,用(dr, dc)来表示特殊方格在棋盘中的位置。棋盘覆盖问题的输出结果是一个覆盖了L形骨牌的棋盘,如何表示三个方格被同一个L形骨牌覆盖称为关键。学生比较容易想到的方法是使用同一种颜色来填充被同一个L形骨牌覆盖的三个方格,这是一种形象化的思维方式。为了将数据抽象成程序设计语言方便处理的形式,可以从颜色在计算机中的存储形式(整数)出发,引导学生直接使用整数来填充表示被同一个L形骨牌覆盖的三个方格。这样就完成了棋盘覆盖问题中输入/输出数据的抽象,并且可以得到函数的原型:void ChessBoard(int size, int dr

8、, int dc, int *board) 3.3.2 C+实现 根据3.3.1中的数据抽象结果得到函数原型后,进行算法实现时,还有2个待解决的关键问题。第一,如何确定递归函数ChessBoard的停止条件。大部分学生认为是最简单的情况是当的时候,即:的棋盘中有一个特殊方格,此时剩余的3个方格刚好可以用一个L形骨牌来覆盖。但事实上更简单的情况是当的时候,即:的棋盘中有一个特殊方格,此时根本无需任何覆盖。因此可以通过提问的方式启发学生思考当的时候是不是最简单的情况。第二,在函数原型void ChessBoard(int size, int dr, int dc, int *board)中,仅有s

9、ize这个参数并不能确定当前正在处理的是哪个子棋盘。虽然教材上给出的函数原型是void ChessBoard(int size, int tr, int tc, int dr, int dc, int *board),使用了每个子棋盘的左上角方格的位置(tr, tc)来标识当前所处理的子棋盘。但是要想到这一点其实并不容易,这是算法实现时的一个难点。 目前,针对该难点我们在教学中采用的处理步骤是:(1)根据函数原型void ChessBoard(int size, int x, int y, int *board)实现算法,经测试程序运行结果不正确。(2)通过输出每一个L形骨牌覆盖后的棋盘,指导

10、学生使用单步执行的调试方式查找出错原因。然后,根据出错原因在函数ChessBoard的参数表中增加标识子棋盘位置的参数tr和tc。(3)使用更新后的函数原型void ChessBoard(int size, int tr, int tc, int dr, int dc, int *board)重新实现算法,经测试程序运行结果正确。上述教学步骤的执行难点在于要求学生具有较强的程序调试能力和程序分析能力,但是相对教材中直接给出更新后的函数原型及源代码,上述处理步骤方法对学生来说过渡更自然、更符合学生的从易到难的认知规律 在第(1)、(3)步中实现算法时,在教学中我们采用了“程序填空”这一程序设计类

11、课程期末考试试卷中常见的题型,来提供尽可能多的提示信息帮助学生完成从算法伪码到C+程序的过程,消除部分基础较差学生的畏难心理。下面仅给出当特殊方格位于右下角子棋盘时的“程序填空”范例也能降低编程难度,有助于消除学生的畏难心理,让学生获得学习的成就感,有效提高了学生的学习兴趣,同时锻炼了学生的计算思维 5 结论 分治算法采用“分而治之”的策略,将问题分解为规模较小的子问题,这些子问题互相独立且与原问题形式相同。分治策略递归地求解这些子问题,然后将各子问题的解合并得到原问题的解。其中的难点在于递归求解子问题,递归函数原型的设计成为关键,学生学习存在一定的困难。以棋盘覆盖这一较为形象的问题作为实例进行分析,对分治算法求解该问题的教学过程进行互动设

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论