算法设计与分析——期末复习

算法

算法与程序

算法是解决问题的方法与过程。

(1)输入:有0个或多个外部量作为算法的输入
(2)输出:算法产生至少一个量作为输出
(3)确定性:组成算法的每条指令是清晰的、无歧义的
(4)有限性:算法中每条指令的执行次数有限,执行每条指令的时间也有限。

程序可不满足有限性。

算法复杂性分析

把算法执行每行的次数与执行每行所需要的时间相乘,然后把所有的时间求和。

算法分析的基本法则

非递归算法:
(1)for / while 循环
循环体内计算时间*循环次数;
(2)嵌套循环
循环体内计算时间*所有循环次数;
(3)顺序语句
各语句计算时间相加;
(4)if-else语句
if语句计算时间和else语句计算时间的较大者。

最优算法

问题的计算时间下界为(f(n)),则计算时间复杂性为O(f(n))的算法是最优算法。
例如,排序问题的计算时间下界为(nlogn),计算时间复杂性为O(nlogn)的排序算法是最优算法。
堆排序算法是最优算法。

递归与分治策略 

分解-解决-合并,写递归式,求时间复杂度。

分治策略

对这k个子问题分别求解。如果子问题的规模仍然不够小,则再划分为k个子问题,如此递归的进行下去,直到问题规模足够小,很容易求出其解为止。
将求出的小规模的问题的解合并为一个更大规模的问题的解,自底向上逐步求出原来问题的解。

递归策略

直接或间接地调用自身的算法称为递归算法。用函数自身给出定义的函数称为递归函数。
由分治法产生的子问题往往是原问题的较小模式,这就为使用递归技术提供了方便。在这种情况下,反复应用分治手段,可以使子问题与原问题类型一致而其规模却不断缩小,最终使子问题缩小到很容易直接求出其解。这自然导致递归过程的产生。
分治与递归像一对孪生兄弟,经常同时应用在算法设计之中,并由此产生许多高效算法。

 分治法解决的问题

规模缩小到一定程度可以解决
可分为若干规模相同问题
利用该问题分解出的子问题的解可以合并为该问题的解

回答可用分治法解决的问题时,要先解释该算法可以分解-解决-合并。 

动态规划 

设计动态规划算法的方法:
(1)找出最优解的性质,并刻画其结构特征。
(2)递归的定义最优值。
(3)以自底向上的方式计算出最优值。
(4)根据最优值时得到的信息,构造最优解。
1、最优子结构:问题的最优解包含了子问题的最优解
2、重叠子问题:子问题重复多次
3、备忘录算法

用动态规划解决问题,要证明其最优子结构性质,一般用反证法。 

然后在解释递归结构,写出递归式。最后可以用图形演示算法。

贪心算法

证明贪心选择性质方法:首先证明一个问题的最优解可以修改成贪心算法的形式;再用数学归纳法证明,通过每一次贪心选择,最终可以得到问题的最优解。

重点算法复习

快速排序、线性时间选择、最接近点对问题

回溯法

解题步骤:(1)针对所给问题,定义问题的解空间。

(2)确定易于搜索的解空间结构。(子集树、排列树或其他)

(3)以深度优先方式搜索解空间,并在搜索过程中用剪枝函数避免无效搜索。

分支限界法

常以广度优先或以最小耗费(最大效益)优先的方式搜索问题的解空间树。

在分支限界法中,每一个活结点只有一次机会成为扩展结点。

从活结点表中选择下一扩展结点的不同方式导致不同的分支限界法。最常见的有以下两种方式:

(1)队列式分支限界法(先进先出)

(2)优先队列式分支限界法(优先级高的先选)

概率算法

数值概率算法

舍伍德算法

拉斯维加斯算法

蒙特卡罗算法

NP完全性理论与近似算法

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值