2019~2020第二学期 算法分析与设计 课程总结

本课程涵盖算法分析与设计的理论与实践,包括算法设计策略如枚举、贪心、递归和动态规划,重点介绍了算法的时间复杂度分析和数据结构选择对算法的影响。Dijkstra单源最短路径算法的实现被特别提及。
摘要由CSDN通过智能技术生成

本学期的算法分析与设计课程分为理论课和实验课两个部分。理论部分,通过学习各种算法分析方法,对常见的问题进行算法的设计与求解;实验部分,通过上级实验,对各种常见问题的算法进行实现。通过本课程的学习,对常见的算法分析与设计的方法有了更加深刻的理解。
学习算法,首要的问题是:什么是算法?通俗的讲,就是一步步正确解决问题的方法和策略。本课程的学习,就是学习这些方法和策略,以达到求解未知问题目的。算法求解问题的步骤具有输入、输出、确定性、有穷性的性质。对于待求解的问题,需要要输入输出和严格的描述。问题的描述针对该问题的所有实例,是通用的描述,而计算机每次求解只是针对一个实例求解。如果一个算法能应用于问题的任意实例,并保证得到正确解答,称这个算法解答了该问题。
问题的求解过程主要分为腋下几个步骤:

  1. 提出问题,问题具有输入输出和严格的描述。
  2. 分析问题,用数学描述问题,运用数学工具,建立数学模型。
  3. 运用算法设计思想解决问题。
  4. 选择数据结构设计算法,设计出求解问繁体的步骤,是问题求解的核心。
  5. 证明正确性。证明算法在有穷步内终止并且对于一切合法的输入都能得到满足要求的结果。
  6. 分析算法。分析算法的复杂性。
  7. 实现算法
  8. 调试程序。
    同一个问题,选择不同的模型,不同的数据结构,会具有不同的算法。如何选择一个好的算法,需要对算法进行分析。衡量一个算法的好坏,需要看算法使用资源的多少,而计算机中的资源,最主要的是时间和空间资源,算法分析,主要是进行算法时间复杂度的分析,时间复杂度就是算法运行的时间,衡量算法的效率。
    算法复杂度由大O记号表示,它与问题的规模n有关,记为O(n)。其分为几个数量级:常数量级,对数量级¬¬,线性量级,多项式量级,指数量级和阶乘量级。对于算法复杂度的学习是由排序问题的算法引入的,不同的排序算法和时间复杂度如下图所示:
    在这里插入图片描述
    算法设计技术也称策略,是求解问题的有效策略,是算法解题的一般性方法。常用的设计策略有:枚举、递归、贪心、分治、动态规划。
    枚举法又叫暴力求解法,是基于问题描述和定义,简单直接地解决问题的方法。从问题所有可能的解集中一一枚举各元素。用题目中给定的约束条件判断是否符合条件,查找特殊属性(目标函数最优)的元素。
    算法步骤:
  9. 构造问题的所有可能解(解空间,找出解的表示形式)。
  10. 逐个评价解,选出满足约束条件的元素
  11. 逐个评价解,选出满足约束条件的元素
    贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,它所做出的仅仅是在某种意义上的局部最优解。
    贪心算法没有固定的算法框架,算法设计的关键是贪心策略的选择。必须注意的是,贪心算法不是对所有问题都能得到整体最优解,选择的贪心策略必须具备无后效性(即某个状态以后的过程不会影响以前的状态,只与当前状态有关。)
    递归算法,是直接或间接调用自身的算法。使用递归杉树实现。
    递归函数的要素是边界条件和递归方程,这也是递归设计的要点。
    递归一般用于解决三类问题:
  12. 数据的定义是按递归定义的。
  13. 问题解法按递归实现的。
  14. 数据结构按递归定义的。
    动态规划算法与分治法类似,其基本思想也
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值