算法分析与设计复习

一、概述

算法基本概念

算法是一系列解决问题的清晰指令,也就是说,对于符合一定规范的输入,算法能够在有限时间内获得所要求的输出。

算法是解决问题的一种方法或过程,它是由若干条指令组成的有穷序列。

当设计与实现算法是一种工程行为时,我们需要在资源有限的情况下,在互斥的目标之间做权衡,设计者的时间也是这样一种资源。

算法的特征

输入:有零或多个外部量作为算法的输入。

输出:算法产生至少一个量作为输出。

确定性:组成算法的每条指令清晰、无歧义。

有效性:算法中执行的任何计算步骤都是可以被分解 为基本的可执行的操作步。

有限性:算法中每条指令的执行次数有限,执行每条 指令的时间也有限。

二、算法算法效率的度量

算法效率的度量

算法效率的高低体现在运行该算法所需要耗费资源的多少,对于计算机来讲,最重要的资源是时间和空间,因此,算法效率又可分为时间效率空间效率

函数的渐进的界

算法复杂性分析

算法复杂性分析基本步骤:

(1)确定表示输入规模的参数

(2)找出算法的基本操作

(3)检查基本操作的执行次数是否只依赖于输入规模。这决定是否需要考虑最差、平均以及最优情况下的复杂性。

(4)对于非递归算法,建立算法基本操作执行次数的求和表达式;对于递归算法,建立算法基本操作执行次数的递推关系及其初始条件。

(5)利用求和公式和法则建立一个操作次数的闭合公式, 或者求解递推关系式,确定增长的阶。

递归算法的复杂性分析

 

三、蛮力法

四、分治法

基本步骤

划分:既然是分治,当然需要把规模为n的原问题划分为k个规模较小的子问题,并尽量使这k个子问题的规模大致相同。

求解子问题:各子问题的解法与原问题的解法通常是相同的,可以用递归的方法求解各个子问题,有时递归处理也可以用循环来实现。

合并:把各个子问题的解合并起来,合并的代价因情况不同有很大差异,分治算法的有效性很大程度上依赖于合并的实现。

复杂度分析

递推方程:

迭代法求得:

五、动态规划

基本思想

动态规划是一种使多阶段决策过程最优的通用方法。

动态规划算法与分治法类似,其思想把求解的问题分成许多阶段多个子问题,然后按顺序求解各子问题。最后一个阶段或子问题的解就是初始问题的解。

动态规划基本思想是保留已解决的子问题的解,在需要时再查找已求得的解,就可以避免大量重复计算,进而提升算法效率。

基本步骤

(1)找出最优解的性质,并刻画其结构特征。

(2)递推地定义最优值。

(3)以自底向上的方式计算出最优值。

(4)根据计算最优值时得到的信息,构造最优解。

要素 :最优子结构、重叠子问题 、 备忘录(表格)

矩阵连乘问题

 实例:

凸多边形最优三角剖分(类似矩阵连乘)

 递归方程:

最长公共子序列(LCS)

 实例:

 

电路布线问题

图像压缩问题

最大子段和问题

投资问题

0-1背包

 递推方程:

0-N背包

 递推方程:

 

最优二叉搜索树

流水作业调度

序列匹配

六、贪心算法

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值