算法(十四)动态规划

算法概念

  • 动态规划(Dynamic Programming)是一种分阶段求解的算法思想,通过拆分问题,定义问题状态和状态之间的关系,使得问题能够以递推(分治)的方式去解决。
  • 动态规划中有三个重点概念:
    最优子结构:按照最佳的方式进行拆分,用来描述问题状态与状态之间的关系;
    边界:问题的边界区域,可以是除了最优子结构的其它区域;
    状态转移公式(递推公式)dp方程:根据最优子结构和边界终结出来的方程。
  • 优缺点:
    优点:时间复杂度和空间复杂度都相当较低
    缺点:难,有些场景不适用

算法例子

斐波那契数列

规律:从第3个数开始,每个数等于前面两个数的和。
在这里插入图片描述
分析得知:
if(i<2) 则 dp[0] = 0,dp[1] = 1;
if(i>=2) 则 dp[i] = dp[i-1] + dp[i-2];
所以:
最优子结构:fib[9] = fib[8] + fib[7]
边界:a[0] = 0; a[1] = 1
dp方程:fib[n] = fib[n-1] + fib[n-2]

实现代码如下

package com.xxliao.algorithms.dynamic_programming;/*** @author xxliao* @description: 利用动态规划实现* 斐波那契数列:0、1、1、2、3、5、8、13、21、34、55.....* 规律:从第3个数开始,每个数等于前面两个数的和** @date 2024/6/1 1:17*/
public class Demo01 {public static void main(String[] args) {System.out.println(fib(9));}/*** @description  动态规划实现 斐波那契数列* @author  xxliao* @date  2024/6/1 1:23*/public static int fib(int n) {// 定义当前数组,也就是0 ~ n 数组int[] array = new int[n+1];// 定义边界array[0] = 0;array[1] = 1;// if(i>=2) 则 	dp[i] = dp[i-1] + dp[i-2]; dp方程int i = 2;for(; i <= n; i++){array[i] = array[i-1] + array[i-2];}return array[i-1]; // 循环结束加了1}
}

演示结果:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/19981.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【监控】prometheus自定义指标 exporter

一、【写在前面】 prometheus自定义指标本质是用代码自己写一个网络访问的采集器&#xff0c;你可以在官网看到&#xff0c;Client libraries | Prometheus官方支持的语言有GO JAVA PYTHON RUBY RUST, 第三方的库就支持的更多了&#xff0c;有BASH C CPP LUA C# JS PHP R PER…

智慧医院物联网建设-统一管理物联网终端及应用

近年来&#xff0c;国家卫健委相继出台的政策和评估标准体系中&#xff0c;都涵盖了强化物联网建设的内容。物联网建设已成为智慧医院建设的核心议题之一。 作为医院高质量发展的关键驱动力&#xff0c;物联网的顶层设计与网络架构设计规划&#xff0c;既需要结合现代信息技术的…

Keras深度学习框架基础第四讲:层接口(layers API)“层权重约束”

1、层权重约束概述 1.1 层权重约束的定义 Keras层权重约束的定义主要涉及到在训练神经网络模型时&#xff0c;对层的权重参数施加一定的限制或约束&#xff0c;以提高模型的泛化能力和稳定性。以下是关于Keras层权重约束的详细定义&#xff1a; 约束的目的&#xff1a; 防止…

APM编程环境:深度探索与未来展望

APM编程环境&#xff1a;深度探索与未来展望 APM编程环境&#xff0c;一个充满神秘与挑战的领域&#xff0c;吸引了无数开发者与研究者的目光。这个环境不仅提供了强大的编程工具与平台&#xff0c;更在编程逻辑、代码优化等方面展现了前所未有的可能性。接下来&#xff0c;我…

「前端+鸿蒙」核心技术HTML5+CSS3(六)

1、CSS默认宽度详解 在CSS中,默认情况下,块级元素(如<div>、<p>等)的宽度是auto,这意味着它们会根据内容自动调整宽度。内联元素(如<span>、<a>等)的宽度同样会根据其内部内容的宽度来决定。 为了控制元素的宽度,可以使用width属性来手动设置…

Python3位运算符

前言 本文介绍的是位运算符&#xff0c;位运算可以理解成对二进制数字上的每一个位进行操作的运算&#xff0c;位运算分为 布尔位运算符 和 移位位运算符。 文章目录 前言一、位运算概览1、布尔位运算符1&#xff09;按位与运算符 ( & )2&#xff09;按位或运算符 ( | )3…

一款C#开源、简单、免费的屏幕录制和GIF动画制作神器

前言 今天要给大家推荐一款由C#语言开发且开源的操作简单、免费的屏幕录制和GIF动画制作神器&#xff1a;ScreenToGif 。 工具介绍 ScreenToGif 是一款免费的开源屏幕录制和GIF 制作工具。它可以帮助用户捕捉计算机屏幕上的实时动画&#xff0c;并将其保存为高质量的 GIF 图像…

开发者工具-sources(源代码选项)

一、概要说明 源代码面板从视觉效果上分为三个区域&#xff1a;菜单区、内容区、监听区。 菜单区里面有5个子分类&#xff1a; 网页(Page)&#xff1a;指页面源&#xff0c;包含了该页面中所有的文件&#xff0c;即使多个域名下的文件也都会展示出来&#xff0c;包括iframe…

手机耳机哪个品牌音质好

在寻找音质出色的手机耳机时&#xff0c;品牌选择显得尤为重要。市场上众多知名品牌提供了各式各样的耳机产品&#xff0c;它们在音质、降噪功能、设计等方面各有千秋。以下是一些在音质上表现优异的手机耳机品牌的分析&#xff1a; 索尼&#xff1a;索尼的耳机以其卓越的降噪技…

开利网络参加广州数据交易所学习活动

开利网络做为南沙广州数据交易所的会员参加了由“广东三会”组织的“数据资产”相关学习活动。&#xff08;下图为开利董事长付立军先生在签到&#xff09; 学习内容提现了数字时代企业数字化转型的核之心“发掘数据价值&#xff0c;驱动高速发展”&#xff0c;交易中心组织大家…

如何解决mac系统mkdir命令不可用?

Mac系统mkdir命令不可用有两种 第一种&#xff1a; 提示&#xff1a;mkdir:11:command not found 解决方案&#xff1a; 选择shell->新建命令&#xff0c;输入disabled_shell_files命令运行&#xff0c;他会在你的主目录下创建一个disabled_shell_files文件夹&#xff0…

5G NR TAE TEST

环境配置&#xff1a; 测试TAE时&#xff0c;需要比对不同的Antenna Port之间的差异来测试 配置DL 2 layer MU的case layer1&#xff1a;通过设置weight&#xff0c;只有一个物理天线上有weight&#xff0c;其他天线上的weight为0&#xff0c;该天线的DMRS DMRS Port设置为1…

es6中箭头的用法

在ES6&#xff08;ECMAScript 2015&#xff09;中&#xff0c;箭头函数&#xff08;Arrow Functions&#xff09;提供了一种更简洁的函数表达式语法&#xff0c;并且它们不绑定自己的this、arguments、super或new.target。这些值由外围的正常函数值&#xff08;即包含箭头函数的…

java中BigDecimal的比较

BigDecimal是Java中的一个类&#xff0c;位于java.math包中&#xff0c;它提供了任意精度的有符号十进制数字的表示&#xff0c;以及对这些数字进行算术运算的方法 BigDecimal的主要用途包括&#xff1a; 1.金融计算&#xff1a;金融领域对数值的精度要求非常高&#xff0c;使…

学习Java的日子 Day51 数据库,DDL

Day51 MySQL 1.数据库 数据库&#xff08;database&#xff09;就是一个存储数据的仓库。为了方便数据的存储和管理&#xff0c;它将数据按照特定的规律存储在磁盘上。通过数据库管理系统&#xff0c;可以有效地组织和管理存储在数据库中的数据 MySQL就是数据库管理系统&#…

PLC无线通讯模块

在工业自动化日益深入的今天&#xff0c;PLC&#xff08;可编程逻辑控制器&#xff09;作为工业控制的核心大脑&#xff0c;其功能的扩展和智能化水平直接影响着整个生产线的效率和安全性。而PLC无线通讯模块&#xff0c;作为连接PLC与外界信息世界的桥梁&#xff0c;其重要性不…

Centos给普通用户添加sudo命令权限

打开sudoers文件 sudo visudo 修改sudoers文件 找到root ALL(ALL) ALL这一行&#xff0c;即如下图标出红线的一行 在此行下新增如下内容: lbs为用给予sudo执行权限的用户名 # 执行sudo命令&#xff0c;需要输入命令 lbs ALL(ALL) ALL 或 # 执行sudo命令&#xff0c;…

Lua调用其他脚本

Lua是一种轻量级的脚本语言&#xff0c;它通常用于嵌入式系统和游戏开发中。Lua本身并没有直接访问其他脚本文件的功能&#xff0c;但是你可以编写一个Lua脚本来加载和执行其他Lua脚本文件。 以下是一些基本的方法来在Lua中访问和执行其他脚本&#xff1a; require: 这是最常用…

HQChart使用教程100-uniapp如何在vue3运行微信小程序

HQChart使用教程100-uniapp如何在vue3运行微信小程序 症状原因分析解决思路解决步骤1. 修改vender.js2. 修改HQChartControl.js 完整实例HQChart代码地址 症状 HQChart插件在uniappvue3的项目编译成小程序以后&#xff0c; 运行会报错&#xff0c;见下图。 原因分析 查了下…

【Mac】 Infuse for Mac(多媒体播放器) v7.7.6软件介绍和安装

软件介绍 Infuse Pro是一款非常强大的视频播放器&#xff0c;它被誉为 Apple TV上最强的播放器。它支持广泛的视频格式和解码器&#xff0c;包括DTS、DTS-HD、AC3、E-AC3等高清视频的音频播放任务。此外&#xff0c;Infuse Pro还支持所有常见的高清格式。 Infuse Pro的特点之…