算法时间复杂度、递归、分治、动态规划算法

17 篇文章 3 订阅

递归

  • 递归=自上而下分解+自下而上求值&合并
  • 子问题与原问题完全相同,数量规模不同
  • 系统栈实现
  • n越大,递归深度越深
  • 递归是有条件的,无条件递归调用会成为死循环
  • 简单示例:简单选择排序和冒泡排序
  • 可以处理查找问题(二分查找/折半查找,查找的序列是有序的)

分治算法

  • 子问题相互独立,不独立的话就用动态规划
  • 过程=分解+求解+合并(devide+conquer+combine)
  • 分治法与递归的区别:许多分治法算法都用递归实现,但是也可以用非递归实现。
  • 分治法是求解问题的策略,递归是实现求解算法的技术
  • 示例:快速排序和归并排序

蛮力法

  • 示例:简单选择排序和冒泡排序
  • 蛮力法:分为两种,直接采用穷举,第二类是在穷举中引用递归

贪心法:

  • 每一步决策的准则:最优量度标准/贪心准则
  • 能够用贪心法求解的问题的性质:贪心选择性质,最优子结构性质
  • 贪心选择性质是与动态规划的主要区别
  • 最优子结构:贪心法,动态规划

动态规划

  • 只需要多项式时间复杂度,比回溯法、暴力法等效率高,但并不是任何问题都适合采用动态规划法求解。
  • 分治:子问题独立,动态规划:子问题重叠
  • 贪心法与动态规划的差别:贪心法做出不可回溯的决策,还要考察每个最优决策序列中是否包含一个最优子序列。
  • 采用动态规划求解的问题需要的三个性质:最优性原理(具有最优子结构),无后效性,有重叠子问题
  • 备忘录方法是动态规划方法的变形,备忘录方法的递归方式:自顶向下,动态规划:自底向上

回溯法

  • 两种方式保存搜索过的节点:自定义栈,递归方法

递归

1.任何一个递归过程都可以转换成非递归过程。 T
https://blog.csdn.net/qq_43733499/article/details/103934690

在这里插入图片描述
https://www.icourse163.org/learn/XMU-1205800806?tid=1465424463#/learn/content?type=detail&id=1244420489&cid=1268491093

https://blog.csdn.net/Balance_1/article/details/108836599

动态规划

1.如果一个问题可以用动态规划算法解决,则总是可以在多项式时间内解决的。F

最优二叉搜索树的根结点一定存放的是搜索概率最高的那个关键字。F

用动态规划而非递归的方法去解决问题时,关键是将子问题的计算结果保存起来,使得每个不同的子问题只需要被计算一次。子问题的解可以被保存在数组或哈希散列表中。T

2-5 动态规划的基本要素为____。

(2分)

A. 最优子结构性质与贪心选择性质

B. 重叠子问题性质与贪心选择性质

C. 最优子结构性质与重叠子问题性质

D. 预排序与递归调用

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值