精华内容
下载资源
问答
  • 本节课从动态规划的基本属性,题目分类,解题思想,以及算法复杂度等方面来详解动态规划。 判断动态规划 Wikipedia 定义:它既是一种数学优化的方法,同时也是编程的方法。 1. 是数学优化的方法——优子结构 ...

    动态规划可以说是很多准备算法面试者的梦魇,大家都非常怕面试官会出动态规划的题目,如果遇到一些做过的题目还好,但要是遇到了根本就没有做过的,就无从下手了。
     
    本节课从动态规划的基本属性,题目分类,解题思想,以及算法复杂度等方面来详解动态规划。
    判断动态规划

    Wikipedia 定义:它既是一种数学优化的方法,同时也是编程的方法。
     
    1. 是数学优化的方法——最优子结构

    动态规划是数学优化的方法指,动态规划要解决的都是问题的最优解。而一个问题的最优解是由它的各个子问题的最优解决定的。


    由此引出动态规划的第一个重要的属性:最优子结构(Optimal Substructure)

    一般由最优子结构,推导出一个状态转移方程 f(n),就能很快写出问题的递归实现方法。

    2. 是编程的方法——重叠子问题


    动态规划是编程的方法指,可以借助编程的技巧去保证每个重叠的子问题只会被求解一次。

    引出了动态规划的第二个重要的属性:重叠子问题(Overlapping Sub-problems)。

    下面通过几个小例题来判断其方法是否符合动态规划。
     
    举例 1:斐波那契数列问题。

    解法:为了求出第 5 个斐波那契数,得先求出第 4 个和第 3 个数,但是在求第 4 个数的时候,又得重复计算一次第 3 个数,同样,对于第 2 个数的计算也出现了重复。
     
    因此,判断一个问题能不能称得上是动态规划的问题,需要看它是否同时满足这两个重要的属性:最优子结构(Optimal Substructure)和重叠子问题(Overlapping Sub-problems)

    举例 3:归并排序和快速排序是否属于动态规划?

    解法:
    将要排序的数组分成两半,然后递归地进行处理,满足最优子结构的属性;

    不断地对待排序的数组进行对半分的时候,两半边的数据并不重叠,不会遇到重复的子数组,不满足重叠子问题的属性。


    因此这两种算法不是动态规划的方法。

    例题分析

    LeetCode 第 300 题:给定一个无序的整数数组,找到其中最长子序列长度。
     
    说明:
    可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。

    你算法的时间复杂度应该为 O(n2) 。

     
    注意:子序列和子数组不同,它并不要求元素是连续的。
     
    示例
    输入:[ 10, 9, 2, 5, 3, 7, 101, 18 ]
    输出:4 
    即,最长的上升子序列是 [2, 3, 7, 101],它的长度是 4。

    解题思路


    在给定的数组里,有很多的上升子序列,例如:[10, 101],[9, 101],[2, 5, 7, 101],以及 [2, 3, 7, 101],只需要找出其中一个最长的。
     
    思路 1:暴力法

    找出所有的子序列,然后从中返回一个最长的。

    从一个数组中罗列出所有的非空子数组有: n×(n + 1)/2 种,即 O(n2),那么罗列出所有的非空子序列有 2n−1 种。复杂度将是 O(2n)。

    思路 2:缩小问题规模

    1. 找最优子结构:输入规模对半分

    [10, 9, 2, 5] 最长的子序列应该是 [2, 5],而 [3, 7, 101, 4] 最长的子序列是 [3, 7, 101],由于 3 比 5 小,无法简单地组合在一起。即该方法下,总问题的解无法直观地通过子问题的最优解求得。

    假设 f(n) 表示的是数组 nums[0,…,n−1] 中最长的子序列,那么 f(n−1) 就是数组 nums[0,…,n−2] 中最长的子序列,依此类推,f(1) 就是 nums[0] 的最长子序列。
     
    假设已经解决了 f(1),f(2),… f(n−1) 的问题,考虑最后一个数 nums[n−1],也必然考虑到倒数第二个数 nums[n−2],所以 f(n) 指:如果包含了最后的数,那么最长的子序列应该是什么。
    注意:最后这个数必须包含在子序列当中的。
     
    如何通过 f(1),f(2),…f(n−1) 推导出 f(n) 呢?由于最后一个数是 4,我们只需要在前面的 f(1),f(2),…f(n−1) 当中,找出一个以小于 4 的数作为结尾的最长的子序列,然后把 4 添加到最后,那么 f(n) 就一定是以 4 作为结尾的最长的子序列了。

    总结解决动态规划问题的两个难点。

    (1)如何定义 f(n)
    对于这道题而言,f(n) 是以 nums[n−1] 结尾的最长的上升子序列的长度

    (2)如何通过 f(1),f(2),…f(n−1) 推导出 f(n),即状态转移方程
    本题中,nums[n−1] 和比它小的每一个值 nums[i] 进行比较,其中 1<=i<n,加 1 即可。因此状态转移方程就是:f(n)=max (1 <= i < n−1, nums[i−1] < nums[n−1]) { f(i) } + 1
     
     以上证明了这个问题有一个最优的子结构。

    下面开始LeetCode刷题

     

    展开全文
  • 作为一个普通但也深爱豆瓣的用户,我希望豆瓣在这个方向上也不要失落,因为一个只有工具属性的网站对我而言将再也没有这样的归属感。 我在这一点上与豆瓣应用有了不同的追求,并且恰好有一些这方面的能力,又恰好...
  • 全书共三个部分:第一部分阐释了数据库的基本概念,讲解了数据库建模语言;第二部分展示了从概念建模到在 sql server 2008上真正实现数据库的过程;第三部分深入探讨了 sql server若干方面的技术细节,如数据保护...
  • 全书共三个部分:第一部分阐释了数据库的基本概念,讲解了数据库建模语言;第二部分展示了从概念建模到在 sql server 2008上真正实现数据库的过程;第三部分深入探讨了 sql server若干方面的技术细节,如数据保护...
  • 本章将详细阐述蚁群算法的基本思想及原理,并以实例的形式介绍其应用于解决中国旅行商问题(Chinese TSP,CTSP)的情况。 23 基于蚁群算法的二维路径规划算法(史峰) 二维路径规划算法是机器人智能控制领域研究...
  • -修正了在Grid的PageIndexChange事件中不能获取SelectedRowIndexArray属性的BUG(feedback:Violet)。 -Button控件将不再自动拥有display:inline属性,如果希望两个按钮在一行显示,请为第一个按钮设置CssStyle=...
  • ExtAspNet_v2.3.2_dll

    2010-09-29 14:37:08
    -修正了在Grid的PageIndexChange事件中不能获取SelectedRowIndexArray属性的BUG(feedback:Violet)。 -Button控件将不再自动拥有display:inline属性,如果希望两个按钮在一行显示,请为第一个按钮设置CssStyle=...
  • asp.net知识库

    2015-06-18 08:45:45
    XCodeFactory3.0完全攻略--基本思想 XCodeFactory3.0完全攻略--简单示例 XCodeFactory3.0完全攻略--IDBAccesser XCodeFactory2.0完全手册(中) XCodeFactory2.0完全手册(上) XCodeFactory3.0Beta1推出 ! ...
  • yershop采用模块化架构设计思想,对目录结构规范做了调整,可以支持多模块应用创建,让应用扩展更加方便,基于MVC(Model-View-Controller,模型-视图-控制器)模式,并且均支持多层(multi-Layer)设计,全面...
  • ASP.NET精品课程+源代码

    千次下载 热门讨论 2009-01-05 20:15:51
    积极参与,平等对话和研讨,从而重点培养学习者的批判反思意识及团队协作能力,并促使学习者充分理解问题的复杂性、变化性、多样性等属性的重要教学形式。目前大部分高校在网站建设、程序设计等教学中多采用传统的...
  • 软件工程教程

    热门讨论 2012-07-06 23:10:29
    UML基本的构造块 事物 关系 图 UML 公共机制 规格说明 UML模型: 使用图和图标可视化模型 各种建模元素规格说明所组成 规格说明 模型元素特征和语义文本描述—模型“肉” 形成了承载模型语义背板,赋予...
  • 2019数据运营思维导图

    2019-03-29 21:34:09
    从多个维度拆分数据 对比思路 大营销事件作为节点单独标记,数据剔除出来单独进行分析 节点思路 如运营活动等 行为标记思路 将大动作的优化,大项目上线及时标注在数据报表中 培养数据敏感度 培养数据思维,...
  • 数据运营思维导图

    2018-04-26 14:24:22
    消费属性指用户消费意向、消费意识、消费心理、消费嗜好等,对用户消费有个全面数据记录,对用户消费能力、消费意向、消费等级进行很好管理 用户心理属性 心理属性指用户在环境、社会或者交际、感情过程...
  • 软件工程知识点

    2012-12-02 21:34:25
    在软件项目进行过程中,需求分析是从软件定义到软件开发的关键步骤,其结论不仅是今后软件开发的基本依据,同时也是今后用户对软件产品进行验收的基本依据。 软件开发期 在对软件规格完成定义以后,接着可以按照...
  •  本书还提供了dba完成本职工作必备的基本的uniix、sql、pl/sql和数据建模的知识,也给出了许多富有趣味性的例子,通过这些实例详细、循序渐进地说明了oracle database 11g数据库的各个概念和特性。 作译者  Sam...
  • 精通Oracle PL/SQL--详细书签版

    热门讨论 2012-08-21 13:06:28
    与市面上许多pl/sql图书只是纸上谈兵、局限于语法和功能本身不同,本书从实战出发,讲述如何正确、充分地运用语言特性,除了pl/sql的基本功能之外,也包括数据的高效处理、安全、触发器、高效的调试技术等。...
  • 2.6 公共变量与属性的区别 93 2.7 参数修饰符params、out和ref的区别 96 2.8 值类型和引用类型的区别 100 2.9 结构与类的区别 103 2.10 Dispose()和Close()、Finalize()的 区别 106 2.11 string和StringBuilder有...
  • 2.6 公共变量与属性的区别 93 2.7 参数修饰符params、out和ref的区别 96 2.8 值类型和引用类型的区别 100 2.9 结构与类的区别 103 2.10 Dispose()和Close()、Finalize()的 区别 106 2.11 string和StringBuilder有...
  • 2.6 公共变量与属性的区别 93 2.7 参数修饰符params、out和ref的区别 96 2.8 值类型和引用类型的区别 100 2.9 结构与类的区别 103 2.10 Dispose()和Close()、Finalize()的 区别 106 2.11 string和StringBuilder有...
  • 2.6 公共变量与属性的区别 93 2.7 参数修饰符params、out和ref的区别 96 2.8 值类型和引用类型的区别 100 2.9 结构与类的区别 103 2.10 Dispose()和Close()、Finalize()的 区别 106 2.11 string和StringBuilder有...
  • 系统是在Visual Studio 2005环境下开发的,提出实现在线购物馆信息管理、资源共享的基本目标 从而推动迈向数字化销售的步伐,并阐述系统结构设计和功能设计,一个整体自动化购物模式,从软件工程的角度进行了科学而...
  • 4.7 ANSI C中提供的基本I/O函数 36 4.8 UNIX套接字API的历史 37 4.9 小结 38 进一步的研究 38 习题 38 第5章 套接字API 40 5.1 简介 40 5.2 套接字的历史 40 5.3 一个协议接口的制订 41 5.4 套接字的抽象 ...
  • sesvc.exe 阿萨德

    2019-06-02 17:11:12
    知晓了基本结构,那来看看其中重要写入、获取函数: put 方法 public V put(K key, V value) { if (table == EMPTY_TABLE) { inflateTable(threshold); } if (key == null) return putForNullKey(value); ...
  • FSCE借助对比学习的思想对相关候选框进行编码优化其特征表示,加强特征类内紧凑和类间相斥,最后方法在常见COCO和Pascal VOC数据集上都得到有效提升。 关键词:小样本目标检测,对比学习 论文链接:...
  • 2.1.2 描述实时系统的基本特性 2.1.3 全局变量和局部变量在内存中是否有区别?如果有,是什么区别? 2.1.4 什么是平衡二叉树? 2.1.5 堆栈溢出一般是由什么原因导致的? 2.1.6 什么函数不能声明为虚函数? ...
  • 9、hibernate的inverse属性的作用? 122 13、在DAO中如何体现DAO设计模式? 123 14、spring+Hibernate中委托方案怎么配置? 123 15、spring+Hibernate中委托方案怎么配置? 123 16. hibernate进行多表查询每个表中各取几...
  •  《ASP.NET开发实战1200例》分为I、II两卷共计1200个例子,包括了开发中各个方面常用实例,是目前市场上实例全面开发类图书;书中实例来源于多位工程师多年积累,具有很强实用性。 本书是第I卷,以...

空空如也

空空如也

1 2 3
收藏数 43
精华内容 17
关键字:

最优化分属性的基本思想