算法设计与分析(简略版)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

中国地质大学研究生课程论文封面

课程名称算法设计与分析

教师姓名 XXXXXX 研究生姓名侉哥

研究生学号 1201666666 研究生专业 XXXXXXXXXXXXX 所在院系计算机学院

类别: A.博士 B.硕士√ C.进修生

日期: 2016.1.12

《算法设计与分析》课程报告

本学期,我选修了XXX教授的《算法分析与算法设计》这门课程。课堂上,戴老师条理清晰、深入浅出地为我们讲解了算法复杂度、分支算法、贪心算法、动态规划算法、基本检索与周游方法、回溯算法和分支-限界法等知识内容。此外,还为我们介绍了NP-难度和NP-完全的问题。

第一章导引与基本数据结构

老师首先引入编程实现两矩阵相乘和编程实现求证平行四边形两个例子,举例说明现阶段计算机算法可以解决的问题(计算问题)和不可以解决(几何证明)的问题。

接着老师指出算法是指计算的方法,而计算是基于规则的变换,物理角度可以理解为是基于规则的物理状态的变换,也可以理解为是基于规则的信息的变换。接着老师讲解了算法的三个重要特性:无二义性、能解性、有限性。当然算法的特性还包括输入和输出。

之后老师讲解了算法设计与分析的含义,讲了计算模型的假设和两个重要的量:问题的规模和频率计数。也就是空间复杂度和时间复杂度的分析方法,根据时间复杂度,算法一般可以分为多项式时间复杂度(P算法)和指数时间复杂度(NP算法)。

多项式时间内可以执行完成的算法是P算法,例如时间复杂度为:

O(1)

否则为NP算法,例如时间复杂度为:

O(2n)

第二章分治法

首先老师举例讲解了算法设计的三个基础技术:由难到易的校正技术、由粗到精的松弛技术、由大到小的分支技术。

之后讲解了分治策略的一般方法,分治法的核心思想是将一个大问题分成若干个小问题后分而治之,要求子问题与原问题具有相同的类型。为了让我们更好的了解分治法,老师在课堂上详细地讲解了分治法在归并分类中的应用,并且让我们自己推导归并分类的时间复杂度。此外,算法适合求解的问题还包括二分检索和斯特拉森矩阵乘法等。

最后讲解了分治法的作用,分支法是将问题大化小进行求解的一种方法,能有效降低算法时间复杂度。

第三章贪心方法

戴老师先介绍了约束条件、目标函数、可行解和最优解的含义,然后为我们讲解贪心算法,该算法可以描述为从给定的有n个元素的集合a1,a2,...,a n中找到一个子集,该子集在满足一定约束条件的情况下,能够达到最优的目标函数值。贪心算法的核心问题是选择能产生问题最优解的最优量度标准。

为了让我们更好的了解贪心算法和量度标准的选择,老师详细地讲解了部分背包问题。除背包问题外,带有限期的作业排序、最优归并模式、最小生成树和单源点最短路径等问题都可用贪心算法求解。

最后老师又讲解了几类优化问题:线性优化与非线性优化(梯度法和共轭方向法)、约束优化和无约束优化、确定性优化和随机性优化、动态优化和静态优化、单目标优化和多目

标优化。除此之外还有函数优化、参数优化和模型优化等。

第四章动态规划

利用动态规划求解问题时必须满足最优性原理和多阶段决策。老师在讲解具体应用时也多次强调动态规划的两个前提。对于动态规划,要正确建立问题的数学模型、设置形式化的符号。老师特别强调每一个符号都是动态的,不要静止地对待符号。以多段图问题和流水线调度问题为例详细的推导了其求解过程,充分说明了多阶段决策和最优性原理。当然还有每对结点之间的最短路径、最优二分检索树、0/1背包问题、货郎担问题以及矩阵相乘等很多问题都可以用动态规划的方法来求解。

第五章基本检索与周游方法

本章主要介绍了树和图的遍历算法,树的遍历算法包括先根遍历、中根遍历和后根遍历算法,图的遍历算法包括深度优先遍历和广度优先遍历算法。老师最后以围棋为例引出对策树,也可以称为博弈树,是指由于动态博弈参与者的行动有先后次序,因此可以依次将参与者的行动展开成一个树状图形。博弈树是扩展型的一种形象化表述。它能给出有限博弈的几乎所有信息。其基本构建材料包括结、枝和信息集。结包括决策结和终点结两类;决策结是参与人采取行动的时点,终点结是博弈行动路径的终点。枝是从一个决策结到它的直接后续结的连线(有时用箭头表述),每一个枝代表参与人的一个行动选择。博弈树上的所有决策结分割成不同的信息集。每一个信息集是决策集集合的一个子集,该子集包括所有满足下列条件的决策结:(1)每一个决策结都是同一参与人的决策结;(2)该参与人知道博弈进入该集合的某个决策结,但不知道自己究竟处于哪一个决策结。

第六、七章回溯法和分支-限界法

最后一节课老师将第六章和第七章合在一起进行讲解。

回溯法是寻找一组解的问题或者是求解满足约束条件的最优解的问题。应用回溯法的前提是建立问题的解空间树,然后根据深度优先搜索解空间树,找出问题的最优解。在回溯法中关键是要确定最优解的上下解,采用减枝策略尽可能少地检索树中的结点,尽快地找到最优解。

分支-限界法与回溯法存在着比较大的相似性,同样需要寻找限界函数和采用剪枝策略。不同的是分支限界法常以广度优先方式搜索问题的解空间树。

老师以0/1背包问题为例详细讲解了可回溯法和分支限界法,能够很好地比较两个算法的相同点和不同点。此外,8-皇后问题、子集和数问题、图的着色以及哈密顿环等很多组合优化问题都可以用回溯法来求解。

第八章NP-难度和NP-完全的问题

在以上算法讲解时,戴老师穿插地为我们讲解了货郎担判定问题和流水线调度问题。

课程学习感想

在本科时,曾选修《计算机算法基础》这门课。当时老师在课堂上为我们讲解了分治法、贪心算法和动态规划算法。并讲解了这些算法的应用,例如:背包问题、带有期限的作业排序等。老师详细地讲解了算法的伪代码,并安排实习让我们上机操作,虽然当时比较熟悉用所学算法解决老师所给出的问题,但是却很容易忘记。因为算法比较枯燥,死记硬背是记不住的,而且当时并不了解算法的应用前提,所以在遇到实际问题时不知道能否用所学的算法解决。学习的时间长了,加上未能将算法应用的实际问题中,所以容易忘记学习的算法。

戴老师授课与本科老师授课不同,本科教学感觉是侧重于算法设计与分析的“设计”,而本次课程学习感觉更侧重于算法设计与分析的“分析”,更好的去理解算法,从而跟好的设计算法。具体授课与本科授课有些许区别:

(一)、戴老师会把算法应用的前提告诉我们,这样在遇到实际问题时,通过分析问题的特征便可以判断用哪一个算法来解决问题;

(二)、戴老师在讲解算法时会给我们画出算法的执行过程,例如:戴老师讲解用动态规划建立最优二分检索树时,戴老师将算法一部后对应的二分检索树画出,这样有利于我们更好的理解算法原理和算法的执行课程,生动的图像更有利于我们对算法的记忆;

(三)、戴老师课堂上不仅教授我们一些算法,还教授我们解决问题的思想、方法和技巧,例如:规约的思想,就是一种问题可以转换为另外一种问题来求解,这在求解NP难问题上非常重要,对我们以后的研究生学习也十分重要。

通过学习《算法设计与分析》这门课程,我不仅掌握了一些经典算法的原理和应用方法,更重要的是从戴老师的授课中学习到了理解和应用算法的方法和技巧。

①了解算法求解问题的前提。戴老师的课堂上讲解的算法,若合理应用有助于问题的解决,否则适得其反。所以在应用算法前,我们必须了解算法求解问题的前提,例如应用分治法时要判断该问题分解成的子问题与该问题是否为同类型,应用动态规划时要判断该问题是否满足最优性原理和是否属于分阶段决策问题。只有满足算法应用前提后,算法才会发挥作用。

②建立数学模型。戴老师学识渊博,在数学方面的造诣让我敬仰,课堂上帮助我们回顾了许多关于将高等代数、线性代数和计算方法的知识点。同时,在对每一个算法讲解的时候戴老师都会为我们详细的介绍算法的数学模型。老师特别强调数学模型,在讲解背包问题、动态规划和二分检索树时,为了让我们更好的了解和解决问题,戴老师首先将客观事物抽象为物理模型,然后将物理模型转换为数学模型以便用计算机方法来求解问题。

③合理设置形式化符号。戴老师在讲解多段图、最优二分检索树等问题时特别强调合理的符号有助于问题的解决。要动态的对待问题中设置的符号,例如多段图中符号C ost(i,j),它并不是代表某一具体最小成本路径的成本,而是代表从结点i到j的最小成路径的成本,Cost(2,4)、Cost(3,6)都属于C ost(i,j)。

总之,学习完《算法设计与分析》课程后,我不仅掌握了一些经典的算法,也学会了利用算法解决问题的方法,我相信这在我以后的研究生学习生涯中有很大的帮助。课堂上,戴老师巧妙地将复杂的算法简易化,让我知道学习算法可以是简单而快乐的事情,这激发了我学习算法的兴趣,也让我体会到了算法的奥妙之处。

相关文档
最新文档