一、用空间换取时间

动态规划可以将指数级别的复杂度简化为幂级别的复杂度,但是却增加了空间,采取用空间换时间的策略,也有人称之为带备忘录的的递归。

二、例题

一个经典的动态规划的问题 nums = 【1,5,4,2,3】选取最长递增子序列的长度

第一思路:递归枚举将所有的可能全部列出来,然后寻找最大的在一个

#memo  = {}
def L(nums,i):#返回这个数组从第i个开始的最长序列长度#if i in memo:#    return memo[i]if i ==len(nums)-1:return 1max_len = 1for j in range(i+1,len(nums)):#接着遍历从i以后的最长的长度if nums[j]>nums[i]:max_len=max(max_len,L(nums,j)+1)#memo[i] = max_lenreturn max_lendef length_of_LIS(nums):return max(L(nums,i) for i in range(len(nums)))nums=[1,5,2,4,3]
print(length_of_LIS(nums))

这样我们会发现有很多重复的计算,使算法效率大大降低,所以可以采用一个字典\哈希表来进行存储,将之前得到的计算的数值存起来,这样到再次用到这个结果的时候就直接返回,这样就能大大的降低算法的时间复杂度。

本题或者采用迭代的方式

def length_of_LIS(nums):n = len(nums)L= [1]*nfor i in reversed(range(n)):for j in range(i+1,n):if nums[j]>nums[i]:L[i]=max(L[i],L[j]+1)return max(L)
nums = [1,5,2,3,6]
print(length_of_LIS(nums))

首次建立一个数组用于保存结果,采用两层for循环,第一层for循环倒着遍历从最后一个数开始的最长子序列,第二成for循环查找之前数字的最大子序列,并选出最大的保存到数组当中,最后这样返回数组中的最大值就可以了。

Python 动态规划理解相关推荐

  1. Python字典理解

    本文翻译自:Python Dictionary Comprehension Is it possible to create a dictionary comprehension in Python ...

  2. python中的列表理解_掌握『Python列表理解』需要知道的9件事,你知道了吗?

    越来越多的人开始学习Python,它已经成为最流行的编程语言之一,这几乎发生在所有领域.比如网络开发.科学计算,当然还有人工智能. 无论想用python干什么,都绕不开学习Python的数据结构.变量 ...

  3. 我对python的理解_python高级函数以及我对python的理解

    常见的高级函数:lambda.map.reduce.filter.list comprehension lambda 匿名函数,限制一个表达式 m = lambda x,y:x+y # 5 m(2,3 ...

  4. python self理解_Python列表理解

    python self理解 In our previous tutorial we learned about Python Sort List. In this tutorial we will l ...

  5. Python 代码理解 polygon.py

    Python 代码理解 polygon.py 1.运行和阅读代码 该代码的主要功能为通过调用不同的包,设置不同的线段数.线段长度和角度等条件,进行不同图形的绘制. 经过环境配置和代码阅读后,初步运行代 ...

  6. python 动态规划_DP动态规划(Python实现)

    前言_ 我们遇到的问题中,有很大一部分可以用动态规划(简称DP)来解. 解决这类问题可以很大地提升你的能力与技巧,我会试着帮助你理解如何使用DP来解题. 这篇文章是基于实例展开来讲的,因为干巴巴的理论 ...

  7. python动态规划详解_经典动态规划例题整理(Python版)

    由于本人的算法基础较为薄弱,所以在这里整理一下自己的做过的题,使自己能够随时随地回顾温习. 然后,本篇文章将会持续更新自己遇到的一些比较经典动态规划的题目,大家如果对代码有任何问题,直接在文章下面评论 ...

  8. python yield理解_对Python中Yield的理解

    看到下面这段程序的时候,有点不明白这个yield到底是个啥东西,看了网上很多的博客,大致理解了yield的含义,所以记录下来. 要说yield首先要说python中的生成器,那么什么是生成器? 假设有 ...

  9. 用Python深入理解跳跃表原理及实现

    最近看 Redis 的实现原理,其中讲到 Redis 中的有序数据结构是通过跳跃表来进行实现的.第一次听说跳跃表的概念,感到比较新奇,所以查了不少资料.其中,网上有部分文章是按照如下方式描述跳跃表的: ...

最新文章

  1. python opencv 峰值信噪比
  2. 一个purge参数引发的惨案——从线上hbase数据被删事故说起
  3. 关于U盘安装ubuntu-18.04安装时候出现的grub-efi-amd64-signed的问题。
  4. kubernetes常用对象
  5. 如何导出已安装的安卓app为apk包
  6. dll文件懒加载_dll编写与使用操作手册
  7. Ansible 学习总结(1)—— Ansible 入门详解
  8. 改进我个人知识管理手段
  9. itextpdf将带复选框的html_HTML基础知识
  10. JVM内存模型及垃圾回收机制
  11. clone git 修改保存路径_SEO优化知识一般需要了解什么代码_学云网
  12. 【C++】关于set的一些奇怪问题:错误C2676 二进制“<”:“const _Ty”不定义该运算符或到预定义运算符可接收的类型的转换
  13. 四叶草的python代码_python绘图四叶草
  14. vue-miniQQ——基于Vue2实现的仿手机QQ单页面应用(接入了聊天机器人,能够进行正常对话)...
  15. crypto-js 加密解密 (TS版本)
  16. 胡适致迷茫大学生:成不在一时,功必不唐捐
  17. 2021年中国乳制品产量、营业收入、利润总额及进出口分析[图]
  18. “科林明伦杯”哈尔滨理工大学第十届程序设计竞赛(同步赛) E
  19. java课程结课论文,语言课程论文范文
  20. 使用python抓取App数据

热门文章

  1. 金融,财务,融资相关知识(二)
  2. 几乎融入所有新技术的精确制导武器
  3. opengl绘制位图字体c语言源代码,SFML中的位图字体(OpenGL)
  4. dbscan内存不够_sklearn DBSCAN内存相关问题
  5. Nginx location和rewrite
  6. “金财工程”网络安全 二
  7. RSA公钥加密和私钥加密的区别
  8. java drm_使用Java API建立DRM策略
  9. Labview_使用SQL语句操作数据库(Access)
  10. 高通平台user模式下串口输入及使用QFIL在线烧录的问题解决