博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
递归+分治+贪心+动态规划
阅读量:5152 次
发布时间:2019-06-13

本文共 1111 字,大约阅读时间需要 3 分钟。

递归

1. 定义:一个函数在结束之前,直接或间接调用自身称为递归。

2. 思想:将一个不好解决的大问题转化为若干小问题,再把这些小问题进一步分解为更小的小问题,直至每个小问题可以直接解决为止。

3. 要素

(1)递归体使问题向边界条件转化的过程

(2)边界条件:程序终止的条件,也称为递归出口。

4. 优缺点

   优点:程序结构简单,易证明其正确性。

   缺点:难以理解,执行中占内存空间较多,运行效率低。

5.本质:递归程序在执行中需借助栈来实现(递归程序的入口语句和出口语句一般用条件判断语句来实现)。

 

分治

1. 基本思想:将一个规模为n的问题分解为k个规模较小的子问题,这些子问题互相独立且与原问题相同。找出各部分的解,然后把各部分的解组合成整个问题的解。

2. 归并排序是典型的基于分治策略的算法,它的主要思想就是将待排序的序列拆分为若干子序列,然后将子序列进行排序,然后将排好序的子序列合并。

 

贪心

1.两个性质:

   (1)贪心选择性质

      贪心选择性质是指所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到。

      贪心算法仅在当前状态下作出最好选择(所作的贪心选择可以依赖于以往所作过的选择,但决不依赖于子问题的解), 然后再去解作出这个选择后产生的相应的子问题。

  (2)最优子结构性质

      当问题的最优解包含其子问题的最优解时,称此问题具有最优子结构性质。       

2.存在问题:   
(1)不能保证求出最优解,因此不能用来求最大或最小解问题;   
(2)只能求满足某些约束条件的可行解的范围。

 

动态规划

1. 动机消除递归过程中产生的大量重叠子问题

2. 多阶段策略问题利用递归的思想, 把规模为n的问题转化为规模为n-1的问题, 直到转化为可以直接求解的原子问题. 一般情况下, 这样的递归方法的时间复杂度是指数级别的, 但是如果所有不同的子问题的数目是多项式级别的, 那么只需要多项式时间就可以解决这个问题, 这就是动态规划的本质.

3. 算法四个步骤:(1)描述最优解结构(2)状态转移方程(3)bottom-up求解(4)构造最优解(最优分割,最优路径)

在动态规划算法中,每步所作的选择往往依赖于相关子问题的解。因而只有在解出相关子问题后,才能作出选择。

 

贪心和动态规划的比较:

不同点:(1)动态规划算法通常以自底向上的方式解各子问题,而贪心算法则通常以自顶向下的方式进行;

               (2)动态规划能求出问题的最优解,贪心不能保证求出问题的最优解

相同点:动态规划算法或贪心算法都要求问题具有最优子结构性质

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/xinyuyuanm/p/3178040.html

你可能感兴趣的文章
【Java】使用Eclipse进行远程调试,Linux下开启远程调试
查看>>
js对象属性方法
查看>>
对Vue为什么不支持IE8的解释之一
查看>>
使用easyUI 为datagrid冻结列
查看>>
bzoj 2784: [JLOI2012]时间流逝【树形期望dp】
查看>>
利用Git版本控制管理你的项目
查看>>
windows下使用pycharm开发基于ansible api的python程序
查看>>
错误 warning: LF will be replaced by CRLF in README.md.
查看>>
博客园修改鼠标图标样式
查看>>
LInux CentOS7 vsftpd 配置注释
查看>>
Linux CentOS7 httpd 配置注释
查看>>
Sqlserver2012 评估期已过问题
查看>>
关于jquery attr()与prop() 的区别
查看>>
C#调用C++DLL/天地伟业解码器二次开发
查看>>
zend framework 1 连接oracle数据库的写法
查看>>
APUE学习笔记:第九章 进程关系
查看>>
关于 阿里云 的linux 安装 jdk和tomcat 中的问题(解压版的jdk和tomcat)
查看>>
Logstash_Apache日志采集
查看>>
使用localStorage保存搜索记录
查看>>
PHP队列
查看>>