1、算法设计与分析、说明(一) 课程性质计算机科学是一种创造性思维活动,其教育必须面向设计。计算机算法设计与分析正是一门面向设计,且处于计算机学科核心地位的教育课程。设计一个高效的程序不仅需要编程小技巧,更需要合理的数据组织和清晰高效的算法,这正是计算机科学领域里数据结构与算法设计所研究的主要内容。(二) 教学目的通过对本课程的学习与研究,使学生掌握算法设计的主要方法,培养对算法的计算复杂性正确分析的能力,为独立设计算法和对算法复杂性分析奠定坚实的理论基础,对学生将来从事计算机系统结构、系统软件和应用软件的研究与开发提供一个广泛扎实的计算机算法知识基础。(三) 教学内容算法及算法复杂性基本概念,算
2、法描述,有效算法最常用的设计策略递归和分治法,动态规划法的设计要点与适用性,贪心算法,回溯法和分支限界法,许多难解问题的高效算法概率算法,以及NP完全理论和NP难问题的近似解法。传统算法实例分析,算法领域研究热点介绍。(四) 教学时数课堂教学36学时,实验部分36学时,总计36+36/2=54学时(五) 教学方式讲授+上机实验+课题设计对每一教学内容,首先介绍一种算法设计策略的基本思想,然后从解决计算机科学和应用中的实际问题入手,由简到繁地描述几个经典的精巧算法。同时对每个算法所需的时间和空间进行分析,使学生既能学到一些常用的精巧算法,又能通过对算法设计策略的反复应用,牢固掌握这些算法设计的基
3、本策略,以期收到融会贯通之效。在为各种算法设计策略选择用于展示其设计思想与技巧的具体应用问题时,有意义重复选择某些经典问题,使学生能深刻地体会到一个问题可以用多种设计策略求解。同时通过对解同一问题的不同算法的比较,使学生更容易体会到每一种具体算法的设计要点。随着内容的逐步展开,学生也将进一步感受到综合应用多种设计策略可以更有效地解决问题。、本文(一)课堂教学部分第一章算法概述教学要点:算法的基本概念,算法的计算复杂性教学时数:建议2学时教学内容:第一节算法与程序(0.5学时)掌握算法的概念及特性理解算法与程序的区别了解算法的描述方法第二节算法复杂性分析(1.5学时)掌握算法复杂性分析的概念熟练
4、掌握算法时间复杂性和空间复杂性的表示方法及O的定义了解,和O的定义考核要求:识记相关概念,领会复杂性分析方法第二章递归与分治策略教学要点:递归概念,分治策略,递归算法设计教学时数:建议5学时教学内容:第一节递归概念(1学时)熟练掌握递归概念说明递归算法的工作原理第二节分治法的基本思想(0.5学时)熟练掌握分治法的基本思想和一般原则理解分治算法设计模式掌握分治算法的复杂性分析方法第三节基与分治策略的递归算法设计(3.5学时)熟练应用分治法设计递归算法:1 .大整数乘法(0.5学时)2 .Strassen矩阵乘法(0.5学时)3 .棋盘覆盖(0.5学时)4.归并排序(0.5学时)5 .快速排序(0
5、.5学时)了解分治法所能解决的一些典型问题应用递归算法复杂性分析的一般方法分析各种具体算法的复杂性考核要求:领会递归与分治的基本概念应用分治策略解决实际问题并设计递归算法递归算法的复杂性分析第三章动态规划教学要点:动态规划算法的设计思想、适用性以及算法的设计要点。教学时数:建议6学时。教学内容:第一节动态规划算法的基本思想(2.5学时)掌握动态规划算法的基本思想理解动态规划算法和分治法的异同熟练掌握用动态规划算法求解问题的步骤第二节动态规划算法的基本要素(1.5学时)熟练掌握用动态规划算法求解问题的两个重要性质,即:最优子结构性质和子问题重叠性质理解自顶向下备忘录方法的基本思想第三节动态规划算
6、法设计(2学时)熟练应用动态规划思想解决具体应用问题1 .最长公共子序列(1学时)2 .最大子段和(1学时)了解动态规划算法所能解决的一些典型问题掌握动态规划算法的复杂性分析方法考核要求:领会动态规划算法的思想、算法设计步骤及基本要素掌握用动态规划思想解决实际问题并设计动态规划算法动态规划算法复杂性分析第四章贪心算法教学要点:贪心算法思想、基本要素及贪心算法设计教学时数:建议3学时教学内容:第一节贪心算法的基本思想(1学时)理解贪心算法的基本思想理解局部最优和整体最优的概念第二节贪心算法的基本要素(1学时)熟练掌握用贪心算法求解问题的两个重要性质。即:贪心选择性质和最优子结构性质了解贪心选择性
7、质和最优子结构性质的证明方法理解贪心算法和动态规划算法的差异第三节贪心算法设计(1学时)熟练应用贪心算法解决具体应用问题了解贪心算法可能解决的一些典型问题掌握贪心算法的复杂性分析方法考核要求:领会贪心酸法的思想及基本要素应用贪心算法思想解决实际问题并设计贪心算法贪心算法复杂性分析第五章回溯法教学要点:回溯放的基本思想及算法框架,递归回溯,迭代回溯,回溯算法设计教学时数:建议4学时教学内容:第一节回溯法的算法框架(2学时)理解问题的解空间掌握回溯法的基本思想熟练掌握回溯法解题的步骤理解递归回溯和迭代回溯了解子集树与排列树的概念第二节回溯算法设计(2学时)熟练应用回溯算法解决具体应用问题转载问题了
8、解回溯法解决的一些典型问题掌握回溯算法复杂性分析方法考核要求:领会回溯法的基本思想识记用回溯算法解题的步骤,子集树,排列树应用回溯法解决实际问题并设计回溯算法回溯算法复杂性分析第六章分支界限法教学要点:分支界限法基本思想,分支界限法与回溯法的异同,分支界限算法设计教学时数:建议3学时教学内容:第一节分支界限法的基本思想(1.5学时)掌握分支界限法的基本思想理解分支界限法与回溯法的异同理解分支界限法的搜索策略熟练应用剪枝函数来加速搜索第二节分支界限法算法设计(1.5学时)熟练应用分支界限法解决具体应用问题单源最短路径设计和应用剪枝函数了解分支界限法解决的一些典型问题熟练应用队列式分支界限法和优先
9、队列式分支界限法考核要求:领会分支界限法的基本思想应用分支界限法设计算法识记分支界限法与回溯法的异同第七章概率算法教学要点:数据概率算法,蒙特卡罗算法,拉斯维加斯算法,舍伍德算法,各类算法的优缺点教学时数:建议5学时教学内容:第一节概率算法的描述(1学时)理解概率算法的基本思想和基本特征掌握概率算法的分类区别各种概率算法了解概率算法的复杂度第二节数据概率算法(1学时)理解数据概率算法的内涵掌握数据概率算法的设计了解数据概率算法求解的一些典型问题第三节舍伍德(Sherwood)算法(1学时)理解舍伍德算法的基本思想了解舍伍德算法的复杂度掌握舍伍德算法求解的一些典型问题第四节拉斯维加斯(LasVe
10、gas)算法(1学时)理解拉斯维加斯算法的基本思想和基本特征了解拉斯维加斯算法的复杂性掌握拉斯维加斯算法的设计了解拉斯维加斯算法求解的一些经典问题第五节蒙特卡罗(MouteCarlo)理解蒙特卡罗算法的基本思想应用蒙特卡罗算法解决实际应用问题了解蒙特卡罗算法求解的一些经典问题考核要求:领会各类概率算法的基本思想掌握各类概率算法的设计识记各类概率算法的优缺点第八章NP完全性的理论教学要点:P类与NP类问题,NP完全问题,典型的NP完全问题教学时数:建议5学时教学内容:第一节计算模型(1.5学时)理解三个重要的计算模型,即:随机存取和RAM,随机存取存储程序机RASP,图灵机第二节P类与NP类问题
11、(1学时)理解“易”解和“难”解问题的概念掌握非确定图灵机(DNTM)模型及其时间复杂度理解P类与NP类语言理解多项式时间验证的概念理解COOK定理的内涵及其重要性第三节典型的NP完全问题(1学时)理解一些典型的NP完全问题了解典型的NP完全问题的证明考核要求:领会三个重点的计算模型领会P类与NP类问题,NP完全问题的概念设计RAM和RASP程序识记一些典型的NP完全问题第九章近似算法教学要点:NP完全问题有数近似算法的设计与分析方法教学时数:建议2学时教学内容:第一节近似算法(1学时)理解近似算法的思想的应用范围理解近似算法的性能第二节近似算法设计(1学时)掌握近似算法的设计与分析方法了解近
12、似算法求解的一些典型问题考核要求:领会近似算法的设计与分析方法(二)实验部分1基本要求(1)熟练操作有关C+/JAVA编程环境(2)运用理论部分介绍的各类算法设计思想在相关环境下设计,编写,调试和运行求解实际问题的程序2项目总表序号实验项目名称学时项目类别项目类型1熟悉C+或JAVA编程的环境2基础必做2排列问题2设计必做3棋盘覆盖问题2设计必做4用栈模拟递归,消去算法Quicksort中的递归2综合必做5Sarassen矩阵乘法2设计选做6矩阵连乘问题(动态和备忘录)2设计必做7图象压缩2设计必做8找硬币(递归算法,动态规划算法,贪心算法)4综合必做9活动安排问题2设计必做10哈夫曼编码2设
13、计必做11多机调度问题2设计选做序号实验项目名称学时项目类别项目类型12多会场多活动安排问题2综合选做13装载问题2设计必做14批处理作业调度问题2设计选做15图的M着色问题2设计必做16运动员最佳配对问题2设计选做17布线问题2设计必做18装载问题2设计必做19最大团问题2设计选做20用随机投点法计算值2设计必做21线性时间选择(Sherwood算法)2设计必做22n后问题(LasVegas算法)2设计必做23矩阵互逆问题(MonteCarlo算法)2设计必做注:必做项目数17个,选做项目数6个。3实验内容及其基本要求见实验教学大纲4考核要求熟练应用C+或JAVA编程环境综合分析各类应用问题并设计相应算法编写、调试、运行程序,以求解相应问题各实验项目实验报告三、参考书目1 王哓东编著,计算机算法设计与分析,电子工业出版社,2001年11月第一版2 陈增武编著,算法设计与分析,浙江大学出版社,1994年8月第一版3 SaraBaase.ComputerAlgorithms:IntroductiontoDesignandAnalysis.Secondedition.Addison-Wesley,1988本课程使用教具和现代教育技术的指导性意见微型计算机,C+编程环境,JAVA编程环境7