分治算法求解棋盘覆盖问题互动教学过程

分治算法求解棋盘覆盖问题互动教学过程   摘要:针对算法设计与分析课程难度较大、对学生编程能力要求较高的现状,通过对棋盘覆盖问题的分治算法求解过程进行互动教学设计,引导学生进行问题理解、算法设计、算法实现。特别是在算法实现环节,一行一行地动态展示程序的编写过程,同时充分考虑学生现有的编程基础,采用程序填空的形式降低学生编程难度,有助于消除学生的畏难心理,有效提高了学生的学习兴趣,同时锻炼了学生的计算思维

关键词:棋盘覆盖;递归;分治;互动教学

中图分类号:TP301 文献标识码:A 文章编号:1009-3044(2016)35-0146-02

Interactive Teaching Procedure 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 analysis 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. Especially 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.

Key words: chess board; recursion; divide and conquer; interactive teaching

1 引言

?λ惴ǖ难芯恳丫?被公认为是计算机科学的基石,算法设计与分析课程也是我校软件工程专业的一门专业核心课程,学习算法的重要性毋庸置疑。但算法设计与分析课程具有难度大,对学生编程能力要求高的特点,不少学生望而却步。在教学过程中我们发现,虽然大部分学生能正确理解算法的思路,但是却不能以某种高级程序设计语言实现算法。针对学生这种“眼高手低”的现状,本文提出将“程序填空”这一程序设计类课程考试中常用的题型,应用到算法设计与分析课程日常教学中,通过实施互动教学降低课程难度、激发学生兴趣。我们以分治法求解棋盘覆盖问题为例,逐步引导学生完成从算法的思路解析到完整实现的全过程,聚焦从算法到程序的“最后一公里”

2 棋盘覆盖问题

2.1 问题描述

棋盘覆盖问题是许多国内教材[1-2]在阐述分治法时使用的一个经典案例,具体描述如下:

在一个个方格组成的棋盘中,若恰有一个方格与其它方格不同,则称该方格为一特殊方格,称该棋盘为一特殊棋盘。图1为k=2时的一个特殊棋盘,其中特殊方格的位置是(1,2),用阴影表示

在棋盘覆盖问题中,要用图2中4种不同形态的L型骨牌覆盖一个给定的特殊棋盘上除特殊方格以外的所有方格,且任何2个L型骨牌不得重叠覆盖

图棋盘覆盖问题的已知条件是在一个的棋盘上有一个特殊方格,因此算法的输入可以用来表示棋盘的大小,用(dr, dc)来表示特殊方格在棋盘中的位置。棋盘覆盖问题的输出结果是一个覆盖了L形骨牌的棋盘,如何表示三个方格被同一个L形骨牌覆盖称为关键。学生比较容易想到的方法是使用同一种颜色来填充被同一个L形骨牌覆盖的三个方格,这是一种形象化

计算机基础算法棋盘覆盖,分治算法求解棋盘覆盖问题互动教学过程.doc相关推荐

  1. 【数据结构与算法】【算法思想】分治算法

    贪心算法 回溯算法 分治算法 动态规划 MapReduce本质就是分治算法,是Google大数据处理的三驾马车之一,另外两个是GFS和Bigtable.它在倒排索引,PageRank计算,网页分析等搜 ...

  2. 【Matlab优化覆盖】遗传算法求解无线传感器覆盖优化问题【含源码 1320期】

    一.代码运行视频(哔哩哔哩) [Matlab优化覆盖]遗传算法求解无线传感器覆盖优化问题[含源码 1320期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]赵 ...

  3. 算法帖——用舞蹈链算法(Dancing Links)求解俄罗斯方块覆盖问题

    问题的提出:如下图,用13块俄罗斯方块覆盖8*8的正方形.如何用计算机求解? 解决这类问题的方法不一而足,然而核心思想都是穷举法,不同的方法仅仅是对穷举法进行了优化 用13块不同形状的俄罗斯方块(每个 ...

  4. 五大常用算法之一:分治算法

    分治算法 一.基本概念 在计算机科学中,分治法是一种很重要的算法.字面上的解释是"分而治之",就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题-- ...

  5. 程序员都会的五大算法之一(分治算法),恶补恶补恶补!!!

    前言 点击查看算法介绍 五大算法 分治算法 动态规划 贪心算法 回溯算法 分支限界算法 WX搜素"Java长征记"对这些算法也有详细介绍. 分治算法 一.算法概述 简单来说,分治算 ...

  6. 算法导论系列:分治算法

    说起分治法,大家一定也都听过秦始皇采用郡县制将国家分为三十六郡的故事,我们常说"山高皇帝远",意思就是山高路远,皇帝都管不了,实际上无论皇帝多远,山有多高,整个国家都属于朝廷统治, ...

  7. c语言分治算法之归并排序,分治算法之归并排序

    分治算法: 将一个规模为N的问题分解为K个规模较小的子问题,这些子问题互相独立且与原问题性质相同.求出子问题的解后进行合并,就可得到原问题的解. 一般步骤: 1.分解,将要解决的问题划分成若干规模较小 ...

  8. 快速排序 c++_算法浅谈——分治算法与归并、快速排序(附代码和动图演示)

    本文始发于个人公众号:TechFlow 在之前的文章当中,我们通过海盗分金币问题详细讲解了递归方法. 我们可以认为在递归的过程当中,我们通过函数自己调用自己,将大问题转化成了小问题,因此简化了编码以及 ...

  9. 排序中减治法算法伪代码_算法浅谈——分治算法与归并、快速排序(附代码和动图演示)...

    在之前的文章当中,我们通过海盗分金币问题详细讲解了递归方法. 我们可以认为在递归的过程当中,我们通过函数自己调用自己,将大问题转化成了小问题,因此简化了编码以及建模.今天这篇文章呢,就正式和大家聊一聊 ...

最新文章

  1. java接口 密钥签名作用_api接口签名加密请求(二)
  2. python编程函数_python编程中函数和参数你必须知道的
  3. 利用kickstart实现pxe自动安装linux
  4. VMware Virtual SAN存储设计规划
  5. 开发成本谁更高:Android PK iOS
  6. Nginx编译./configure翻译
  7. LINUX下载编译libfaac
  8. 以线虫为模型模拟的神经网络,让机器人无需训练即可自动避开障碍物
  9. 飞思卡尔单片机是用c语言写吗,飞思卡尔单片机需要注意的引脚说明
  10. html圆圈里面有歌词,html5+js带滚动歌词的音乐播放器(同时支持列表,json) | 小灰灰博客...
  11. 水电图纸——总配电箱——1
  12. xshell上传文件到Linux
  13. 麻省理工大学公开课学习笔记【1、算法分析】
  14. amcharts的使用介绍
  15. 教你炒股票29:转折的力度与级别
  16. 渐变背景(background)效果
  17. 充分必要条件与C语言,充分条件与必要条件知识点总结,高中数学充分条件与必要条件知识点总结...
  18. 在kubernetes集群用helm离线安装harbor
  19. 算法题(2)力扣第n位数字
  20. 模型选择准则之AIC和BIC

热门文章

  1. 印第安人的灵魂——敏捷回顾
  2. “比特币耶稣”罗杰·沃推特赠币,留下BCH钱包地址就有份
  3. 记录某项目中的踩坑与解决(持续更新)
  4. 2017乌鲁木齐区域赛I(带权并查集)
  5. bind9.8 视图和日志功能
  6. shell中数组基础语法
  7. websocket获取httpsession报NullPointerException解决办法
  8. 如何修改Admin用户名
  9. 昨晚今天的记忆 Need for SpeedCarbon Demo
  10. 并发编程(九)—— Java 并发队列 BlockingQueue 实现之 LinkedBlockingQueue 源码分析...