递归

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)动态规划能求出问题的最优解,贪心不能保证求出问题的最优解

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

递归+分治+贪心+动态规划相关推荐

  1. ​相似算法比较:递归、分治、动态规划、贪心、回溯、分支限界​

    相似算法比较:递归.分治.动态规划.贪心.回溯.分支限界 ​ 在学习算法的过程中,递归.分治.动态规划.贪心.回溯.分支限界这些算法有些类似,都是为了解决大问题,都是把大问题拆分成小问题来解决,但她们 ...

  2. 算法高级(28)-递归、分治、动态规划、贪心、回溯、分支限界几大相似算法比较

    在学习算法的过程中,递归.分治.动态规划.贪心.回溯.分支限界这些算法有些类似,都是为了解决大问题,都是把大问题拆分成小问题来解决,但她们之间还是有一些不同之处的,我来给同学们整理一下. 一.算法思想 ...

  3. 分治,递归,贪心算法,动态规划的关系

    来自书籍<王道程序员面试宝典> 递归是解决问题的一种具体实现方法.而分治,动态规划,贪心算法是解决问题的一类思想. 分治一般通过递归实现.

  4. 分治:分治和动态规划的区别,二分检索递归和迭代方式实现

    分治法 分治一般可以直接使用递归实现,在不考虑空间消费的情况下和迭代方式时间消耗相差不多 ======================================================= ...

  5. 分治、动态规划、贪婪 之 算法分析

    分治.动态规划.贪婪  之 算法分析 分治与动态规划都用到了递归的思想,但是对他们之间的区别在概念上一直比较模糊,今天附带贪婪选择稍微整理一下他们. 算法之道上说,标准分治.动态规划.贪婪选择称得上是 ...

  6. ReviewForJob——算法设计技巧(贪婪算法+分治算法+动态规划)

    [0]README 1)本文旨在介绍算法设计技巧包括 贪婪算法.分治算法.动态规划 以及相关的荔枝等: [1]贪婪算法 1)intro: 贪婪算法是分阶段进行的,在每个阶段,可以认为所做的决定是最好的 ...

  7. 最大子段和问题 蛮力法、分治法和动态规划效率比较(C++实现)

    进行比较的代码如下,其中分别给出了用蛮力法.分治法和动态规划法求解最大子段和问题的函数: #include<iostream> #include<ctime> using na ...

  8. [剑指offer][JAVA]面试题第[33]题[二叉搜索树的后序遍历][单调栈][递归分治]

    [问题描述][中等] 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果.如果是则返回 true,否则返回 false.假设输入的数组的任意两个数字都互不相同.参考以下这颗二叉搜索树:5/ ...

  9. [Leedcode][JAVA][第139题][单词拆分][递归][记忆优化][动态规划]

    [问题描述][中等] 给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词.说明:拆分时可以重复使用字典中的单词. 你可以 ...

  10. 均分纸牌问题——(分治 + 贪心 + 前缀和 + 中位数 + 排序)

    题目描述 七夕节因牛郎织女的传说而被扣上了「情人节」的帽子. 于是TYVJ今年举办了一次线下七夕祭. Vani同学今年成功邀请到了cl同学陪他来共度七夕,于是他们决定去TYVJ七夕祭游玩. TYVJ七 ...

最新文章

  1. 业界丨2018年人工智能和机器学习路在何方? 看看美国公司准备怎么做
  2. mysql 知识整理(待续)
  3. 信号与系统奥本海姆第二版_【中山大学电通信通信号与系统考研】自编的两张小卡片带大家整理一下《奥本海姆·信号与系统》的知识架构...
  4. 实时搜索 elasticsearch vs solr
  5. 前端学习(3190):react简介二
  6. val_loss突然变很大_女朋友突然变得很冷淡是怎么回事?该怎么办
  7. cfilefind 能找ftp 服务器上的文件夹吗?,将ftp目录映射为本地盘符
  8. 常州模拟赛d7t2 数组
  9. as5300g2 nas软件功能_浪潮AS5300G2 5500G2存储2U12
  10. Diamond types are not supported at language level ‘5‘ 解决方法
  11. 漫威系列电影、电视剧的推荐观看顺序是怎样的?
  12. 商机无限!在政府门户网站升级改造中掘金
  13. 【不忘初心】Windows11 22000.168 X64 四合一[纯净精简版][2.77G](2021.8.29)
  14. mysql v8 漏洞_海洋CMS V8.7 SQL注入漏洞
  15. 网站api自己怎么写_短视频文案怎么写?看这4个素材网站就够了
  16. 迅雷磁盘缓存设置过高会影响其它网络应用软件的速度
  17. 十年阿里巴巴资深架构师整理分享的SpringSecurity实战文档
  18. css3怎么实现筛子的效果??transform得常用属性??
  19. ssm+layui 超市管理系统 大学期末作业详解(1)
  20. 教育培训python

热门文章

  1. Blocking waiting for file lock on package cache 后续
  2. 懒人神器——新手必备的图片后期处理软件
  3. 1.Hbase集群安装配置(一主三从)
  4. MySQL经常使用命令--create命令使用
  5. 智能城市即将爆发,WiFi行业再迎机遇
  6. 聚焦2017博鳌亚洲论坛:数据安全仍是互联网金融的重中之重
  7. 找不到 org/springframework/dao/support/PersistenceExceptionTranslator
  8. RHEL6.3更换163 centos源或本地源(适用rhel7)
  9. 【OpenCV学习】准确定位帧
  10. 额外域控制升级为主控制域