代码编织梦想

💖💖💖💕💕💕欢迎来到小刘的博客💕💕💕💖💖💖

🎁支持:如果您觉得小刘的文章对您有帮助的话,可以关注一下博主,如果三连收藏支持就更好啦!这就是给予我最大的支持!

🎉🎉Welcome to my blog!🎉🎉

📃我的CSDN博客主页:热爱科技的刘同学🌈🌈🌈




LET ' S BEGAIN





在这里插入图片描述

python动态规划算法实例详解

一、什么是动态规划?

如果大家对“动态规划”这个生僻的术语不理解的话,那就先听小刘给大家说个现实生活中的实际案例吧:

虽然现在手机是相当的便捷,还可以付款,但是最初的时候,我们经常会使用硬币,其中,我们如果遇到手中有很多五毛或者1块钱硬币,要怎么凑出来5元钱呢?凑出来5元钱的这一个过程也可以称之为动态规划算法。

二、新视角:从斐波那契数列看动态规划

斐波那契数列

F n = F n − 1 + F n − 2 ( n = 1 , 2 f i b ( 1 ) = f i b ( 2 ) = 1 ) Fn = Fn-1 + Fn-2(n = 1,2 fib(1) = fib(2) = 1) Fn=Fn1+Fn2(n=1,2fib(1)=fib(2)=1)

练习:使用递归和非递归的方法来求解斐波那契数列的第 n

代码如下:

def fibnacci(n):
  if n == 1 or n == 2:
    return 1
  else:
    return fibnacci(n - 1) + fibnacci(n - 2)
 print(fibnacci(10)) # 55
 

如果看不懂上面模棱两可的介绍,还有下面更加直观的代码:

f(1) = 1
f(2) = 1
f(3) = f(1) + f(2) = 1+ 1 = 2
f(4) = f(3) + f(2) = 2 + 1 = 3
...
f(n) = f(n-1) + f(n-2)

三、实例扩展(爬楼梯)

1. 题目描述

假设你正在爬楼梯,需要n阶才能到达楼顶,每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

注意:给定 n 是一个正整数。

2. 示例

示例1

输入: 2
输出: 2

解释: 有以下两种方法可以爬到楼顶:

  1. 1 阶 + 1 阶
  2. 2 阶

示例2

输入: 3
输出: 3

解释: 有以下三种方法可以爬到楼顶:

  1. 1 阶 + 1 阶 + 1 阶
  2. 1 阶 + 2 阶
  3. 2 阶 + 1 阶

3. 解析

如果给的两个示例看的不是特别清楚,你可以当阶梯为0,那么上楼梯方法0种这是必然,当阶梯只有1那么上楼梯方法只有1种:

当4个台阶:

输入:4
输出:4

  1. 1阶 + 1阶 + 1阶 + 1阶
  2. 2阶 + 2阶
  3. 1阶 + 2阶 + 1阶
  4. 2阶 + 1阶 + 1阶
  5. 1阶 + 1阶 + 2阶

那么得到:

阶梯数爬楼梯方法
00
11
22
33
45

如果感觉看的不明显可以推理一下5阶,6阶…

可以得到当我们想爬n阶楼梯,我们可以得到: p ( n − 1 ) + p ( n − 2 ) p p(n-1) + p(n-2) p p(n1)+p(n2)p 为爬楼梯方法。

4. 代码实现

class Solution:
  def climbStairs(self, n: int) -> int:
    num_list = [0,1,2]
    if n==1:
      return num_list[1]
    elif n==2:
      return num_list[2]
    else:
      for i in range(3,n+1):
        num_list.append(num_list[i-1]+num_list[i-2])
    print(num_list)
    return num_list[n]

obj = Solution()
result = obj.climbStairs(10)
print(result)

提交LeetCode只击败了12.72%的人,继续优化:

class Solution:
  def climbStairs(self, n: int) -> int:
    a,b,c = 0,1,2
    if n == 1:
      return b
    if n == 2:
      return c
    while n>0:
      c = a + b
      a,b = b,c
      n -= 1
    return c
obj = Solution()
result = obj.climbStairs(8)

四、结语

今天的算法实例详解就分享到这里了,你们知道什么是动态规划了吗?🥰

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_41102528/article/details/127668396

python爬虫技术实例详解及数据可视化库-爱代码爱编程

前言 在当前数据爆发的时代,数据分析行业势头强劲,越来越多的人涉足数据分析领域。面对大量数据,人工获取信息的成本高、耗时长、效率低,那么是否能用代码去完成大量复杂的工作,从而从网络上获取到目标信息?由此,网络爬虫技术应运而生。 本文目录,你将会看到 网络爬虫简介 实例分析 示例背景 问题总括 示例全代码 数据处理与可视化之Altair 后

模拟退火算法详细讲解(含实例python代码)-爱代码爱编程

模拟退火算法详细讲解(含实例python代码) (一)模拟退火算法简介(二)模拟退火算法原理(三)退火过程中参数控制(四)算法步骤(五)实例分析 最近老师要求做模拟退火算法实验,看了很多博客之后感觉还是不太清楚,最后问了老师之后才搞明白。想把自己的理解写下来,帮助大家更好的理解。本篇文章是在另一篇博客的基础上加了一下自己的理解,然后又把我们在实验

python判断是否回文_对python判断是否回文数的实例详解-爱代码爱编程

对python判断是否回文数的实例详解 设n是一任意自然数。若将n的各位数字反向排列所得自然数n1与n相等,则称n为一回文数。例如,若n=1234321,则称n为一回文数;但若n=1234567,则n不是回文数。 上面的解释就是说回文数和逆序后的结果是相等的。这就是判断一个数值是否是回文数的标准。 代码也是根据这个思路来实现的。 # -*- coding:

python在法律中的应用_Python分治法定义与应用实例详解-爱代码爱编程

本文实例讲述了Python分治法定义与应用。分享给大家供大家参考,具体如下: 分治法所能解决的问题一般具有以下几个特征: 1) 该问题的规模缩小到一定的程度就可以容易地解决 2) 该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质。 3) 利用该问题分解出的子问题的解可以合并为该问题的解; 4) 该问题所分解出的各个子问题是

python线性整数规划求解_实例详解:用Python解决整数规划问题!-爱代码爱编程

我们将使用整数规划来做出最佳决策 整数规划(IP)问题是所有变量都被限制为整数的优化问题(指规划中的变量(全部或部分)限制为整数,若在线性模型中,变量限制为整数,则称为整数线性规划)。IP问题是有关于如何最好地分配资源的有用数学模型。 假设你正在组织针对政治候选人的营销活动,并且你正在决定向哪些组成部分发送营销材料。你可以向每个组织发送一张吸引

python算法详解 张玲玲_Python算法详解-爱代码爱编程

目  录 第 1章 算法概述 1 1.1 算法的基础 2 1.1.1 算法的特征 2 1.1.2 何为算法 2 1.2 计算机中的算法 3 1.2.1 认识计算机中的算法 3 1.2.2 为什么说算法是程序的 灵魂 4 1.3 计算机中表示算法的方法 4 1.3.1 用流程图表示算法 4 1.3.2 用N-S流程图表示算法 6

拒绝遗忘:高效的动态规划算法-爱代码爱编程

点击上方“小白学视觉”,选择加"星标"或“置顶” 重磅干货,第一时间送达 来自 | medium 作者 | Meet Zaveri 乔治·桑塔亚纳说过,“那些遗忘过去的人注定要重蹈覆辙。”这句话放在问题求解过程中也同样适用。不懂动态规划的人会在解决过的问题上再次浪费时间,懂的人则会事半功倍。那么什么是动态规划?这种算法有何神奇之处?本文

Python之粒子群算法(含代码实例)-爱代码爱编程

这个算法,咋一听感觉很高级,挺难的,其实学习过后也就那样,原理其实挺简单的。下面是我对粒子群算法的一些个人理解,如有差错,还望指出。 一、粒子群算法简介   Kennedy和Eberhart受人工生命研究结果的启发、通过模拟鸟群觅食过程中的迁徙和群聚行为而提出的一种基于群体智能的全局随机搜索算法,自然界中各种生物体均具有一定的群体行为,而人工生命的主要

【数据结构与算法-动态规划系列经典例题汇总】-爱代码爱编程

【数据结构与算法-动态规划系列经典例题汇总】 典例1、爬楼梯(easy)典例2、打劫(medium)典例3、最大字段和(easy)典例4、找零钱(medium)典例5、三角形(medium)典例6、最长上升子序列(medium)典例7、最小路径和(medium)典例8、地下城游戏(hard) 动态规划概述: 动态规划(dynamic

【强化学习】Sarsa算法详解以及用于二维空间探索【Python实现】-爱代码爱编程

Sarsa算法 Sarsa算法,是基于Q-Learning算法。改动其实很小。 本文工作基于之前的Q-Learning的项目,如果有疑问可以看下面两个问题: 【强化学习】Q-Learning算法详解以及Python实现【80行代码】【强化学习】Q-Learning用于二维空间探索【Python实现】Sarsa算法细节 本质上,也是维护Q表。只是在迭

python启发式算法学习总结-爱代码爱编程

启发式算法为克服优化过程中出现的局部最优解,因为在非凸优化中,往往会陷入局部最优。 1、传统启发式 1.1 贪心算法 1.2 局部搜索 1.3 爬山算法 2、元启发式 2.1 2.2 模拟退火算法(2022/4/29) 求解下列函数最优值 # 模拟退火 import math # 数学运算 from random import

python优化算法01——差分进化算法_阡之尘埃的博客-爱代码爱编程

参考文档链接:scikit-opt 本章开始Python的优化算法系列。 优化算法,尤其是启发式的仿生智能算法在最近很火,它适用于解决管理学,运筹学,统计学里面的一些优化问题。比如线性规划,整数规划,动态规划,非线性约束规划,甚至是超参数搜索等等方向的问题。 但是一般的优化算法还是matlab里面用的多,Python相关代码较少。博主在参考了很多文

d*算法原理与程序详解(python)-爱代码爱编程

提示:前文写了D搜索算法,是一种贪心算法。 文章目录 一、D*算法是什么?二、原理以及代码步骤1.原理分析2.代码解释 总结 一、D*算法是什么? D*算法也是用于机器人路径规

使用单调队列解决 “滑动窗口最大值” 问题_单调队列滑动窗口-爱代码爱编程

1. 单调队列的典型问题 单调队列是一种用来高效地解决 “滑动窗口最大值” 问题的数据结构。 举个例子,给定一个整数数组,要求输出数组中大小为 K 的窗口中的最大值,这就是窗口最大值问题。而如果窗口从最左侧逐渐滑动到数组

刷题记录:牛客nc23501小a的回文串_小a非常喜欢回文串,当然我们都知道回文串这种情况是非常特殊的。所以小a只想知道-爱代码爱编程

传送门:牛客 题目描述: 小A非常喜欢回文串,当然我们都知道回文串这种情况是非常特殊的。所以小A只想知道给定的一个字符 串的最大回文子串是多少,但是小A对这个结果并不是非常满意。现在小A可以对这个字符串做一些改 动,他可