《算法设计与分析》复习1

目录

算法概述

基本概念

时间复杂度空间复杂度

符号

递归与分治

分治性质

算法思想

典型问题

动态规划

动态规划性质

算法思想

动态规划步骤

典型问题

其他

贪心算法

贪心算法性质

算法思想

典型问题


算法概述

基本概念

算法是指解决问题的一种方法一个过程

算法是由若干条指令组成的有穷序列

算法的性质:输入、输出、有限性、确定性、可行性

       输入:0个或多个由外部提供的量作为算法的输入

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

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

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

时间复杂度空间复杂度

算法的复杂性有时间复杂性空间复杂性之分。(算法需要时间/空间资源的量)

       算法的复杂性是 算法效率和计算效率 的度量,是评价算法优劣的重要依据。

        衡量一个算法好坏的标准是时间复杂度低

计算一个算法时间复杂度通常可以通过计算循环次数基本操作的频率计算步数来实现。

符号

O渐近上界,Ω渐近下界,θ紧渐近界

t(n)=Ο(g(n)),存在c和n0对所有n>=n0有0<=t(n)<=cg(n)

t(n)=Ω(g(n)), 存在c和n0对所有n>=n0有0<= cg(n) <= t(n)

t(n)(g(n)), 存在c1,c2和n0对所有n>=n0有c1g(n) <= t(n)<=c2g(n)

递归与分治

递归:1.定义递推2.解法存在自调用

用到递归的方法都是自底向上

分治性质

最优子结构性质

分而治之

算法思想

       将一个难以解决的大问题,分解为规模较小的相同子问题,直至这些子问题容易直接求解,并且可以利用这些子问题的解求出原问题的解。分而治之。

1. 子问题的解可以合并2. 原问题和子问题使用相同的方法解3.目标函数与最优解之间存在依赖关系4.子问题不能出现交集

典型问题

二分搜索O(logn)

循环赛日程表

合并排序O(nlogn)

快速排序O(nlogn)~O(n2)

快速排序算法的性能取决于划分的对称性

棋盘覆盖O(4k)

棋盘覆盖问题 实现的基本原理是将 2^k * 2^k 的棋盘分成四块 2^ (k - 1) * 2^ (k - 1)的子 棋盘,特殊方格一定在其中的一个子盘中,如果特殊方格在某一个子盘中, 继续递归处理这个子盘,直到这个子棋盘中只有一个方格为止。

0/1背包问题不能用分治策略

动态规划

动态规划性质

最优子结构性质

重叠子问题性质

算法思想

把要求解问题分解成多个子问题,按顺序求解子问题,最后一个子问题的解就是初始问题的解。

子问题往往有重叠部分
 

动态规划步骤

  1. 最优解性质
  2. 找递归关系定义最优解
  3. 计算最优值(自底向上)
  4. 构造最优解(不是基本步骤,问题可能不需要计算出最优解)

典型问题

0/1背包问题O(min{nc,2n})

最长公共子序列O(mn)

矩阵连乘O(n3)

最大子段和O(n)

解决0/1背包问题可以使用动态规划、回溯法和分支限界法,其中不需要排序的是动态规划  ,需要排序的是回溯法分支限界法

其他

备忘录方法:用表格保存已解决的子问题的答案,备忘录是自顶向下的,动态规划是自底向上

贪心算法

贪心算法性质

最优子结构性质

贪心选择性质

算法思想

       做出在当前看来最好的选择,选择局部最优解

典型问题

活动安排问题O(nlogn)

哈夫曼编码:O(nlogn)

单源最短路径O(n2)

最小生成树

背包问题(物体可划分)可用贪心算法Onlogn,0/1背包问题不能

N皇后也不能用贪心算法

贪心算法于动态规划的异同:

        动态规划自底向上,贪心自顶向下

        都要求问题具有最优子结构性质。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

曦樂~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值