IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 动态规划学习 -> 正文阅读

[数据结构与算法]动态规划学习

一、动态规划学习

动态规划来源于运筹学,是求解决策过程最优化的一种数学方法。在20世纪50年代初美国数学家R. E.
Bellman等提出的最优化原理,动态规划的核心思想是利用各阶段之间的关系,逐个求解,最终得到全局最优解。

设计一个动态规划算法的关键点是确认原问题与子问题、动态规划的状态、边界状态值和状态转移方程等。尤其是状态转移方程特别重要,状态转移方程得不到,整个算法就进行不下去。

二、动态规划解题步骤

  1. 想清楚原问题与子问题
  2. 设计状态
  3. 设计状态转移方程
  4. 确定边界状态值

三、动态规划的性质

3.1 最优子结构

  • 如果问题的最优解所包含的子问题的解也是最优的,我们就称该问题具有最优子结构性质(即满足最优化原理)。
  • 最优子结构性质为动态规划算法解决问题提供了重要线索。

3.2 重复子问题

  • 求解原问题时,每次产生的子问题并不总是新问题,有些子问题会被重复计算多次。
  • 动态规划算法利用了重复子问题的性质,对每一个子问题只计算一次,将结果加入备忘录
  • 当再次需要计算已经计算过的子问题时,只需查找备忘录,从而获得较高的效率。

3.3 无后效性

  • 子问题的解一旦确定,就不再改变,不受在这之后、包含它的更大的问题的求解决策影响。

3.4 动态规划的求解方向

  1. 自底向上(递推)
  2. 自顶向下(递归)

四、动态规划示例-爬楼梯

4.1 题目描述

在爬楼梯的时候,每次可以往上爬1阶台阶或2阶台阶,问n阶楼梯有多少种上楼的方式?
在这里插入图片描述

4.2 暴力解法

  • 暴力解法中可以使用递归算法
  • 如下图,4的爬法=3的爬法+2的爬法,从而可以得到递归的核心公式
    在这里插入图片描述
class Solution {
	public int climbStairs(int n){
		if(n == 1 || n == 2){
			return n;
		}
		return climbStairs(n-1) + climbStairs(n-2);
	}
}

4.3 动态规划解法

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

class Solution {
public int climbStairs(int n){
	// 注意构建n+3的数组来处理n=0,1,2的特殊情况
	int[] dp= new int[n+3];
	// 确定状态数组的前几个元素初值
	dp[1]=1;
	dp[2]=2;
	// 利用状态转移方程逐步求解最优解
	for(int i=3;i<=n;i++){
		dp[i]=dp[i-1]+dp[i-2];
	}
	return dp[n];
}
}
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-09-14 13:36:45  更:2021-09-14 13:37:23 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 3:50:58-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码