python动态规划详解_python----动态规划

不能放弃治疗,每天都要进步!!

什么时候使用动态规划呢?

1. 求一个问题的最优解

2. 大问题可以分解为子问题,子问题还有重叠的更小的子问题

3. 整体问题最优解取决于子问题的最优解(状态转移方程)

4. 从上往下分析问题,从下往上解决问题

5. 讨论底层的边界问题

实例1:割绳子问题

题目:给你一根长度为n的绳子,请把绳子剪成m段 (m和n都是整数,n>1并且m>1)每段绳子的长度记为k[0],k[1],…,k[m]. 请问k[0]k[1]…*k[m]可能的最大乘积是多少?例如,当绳子的长度为8时,我们把它剪成长度分别为2,3,3的三段,此时得到的最大乘积是18.

思路:f(n)=max{f(i)f(n-i)},想发与实现是2个方法,想的时候是递归,实现的时候是从底层至最上面。

实现:1米最1,2米最大是2,3米最大是3,4米最大是4,依次类推,求n米的最大切割

算法复杂度O(n2)

ContractedBlock.gif

ExpandedBlockStart.gif

#-*- coding: utf-8 -*

defmaxCutString(length):#这三行代表输入的绳子长度为1,2,3时,发生切割动作,最大的乘积

if length < 2:return0if length == 2:return 1

if length == 3:return 2

#绳子不断切割,当切割到长度为1,2,3时,不能继续切割,直接返回1,2.3

arr=[0,1,2,3]#记录绳子长度为i时候的最大乘积arr[i]

for i in range(4,length+1):

maxs=0for j in range(1,i/2+1):

mult=arr[j]*arr[i-j]if maxs

maxs=mult

arr.append(maxs)returnarr[length]print maxCutString(8)

View Code

实例2:最大连续子项和

思路:

实现:maxtmp记录临时子项和,遇到的每一个数不断累加;当maxtmp为负时,清空,从下一个数开始,从新累加;当累加的数大于maxsum时,将值赋给maxsum

复杂度:O(n)

ContractedBlock.gif

ExpandedBlockStart.gif

#-*- coding: utf-8 -*#!usr/bin/python

defmaxSum(lists):

maxsum=0

maxtmp=0for i inrange(len(lists)):if maxtmp<=0:

maxtmp=lists[i]else:

maxtmp+=lists[i]if maxtmp >maxsum:

maxsum=maxtmpreturnmaxsum

lists=[1,3,-3,4,-6,5]print maxSum(lists)

View Code

还有一种暴力求解,双层遍历,复杂度O(n2)

ContractedBlock.gif

ExpandedBlockStart.gif

#-*- coding: utf-8 -*#!usr/bin/python

defmaxSum(lists):

maxsum=0for i inrange(len(lists)):

maxtmp=0for j inrange(i,len(lists)):

maxtmp+=lists[j]if maxtmp >maxsum:

maxsum=maxtmpreturnmaxsum

lists=[1,3,-3,4,-6,5]print maxSum(lists)

View Code

实例3:放苹果

把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。

思路:f(m,n) =f(m,n-1)+f(m-n,n)

设f(m,n) 为m个苹果,n个盘子的放法数目,则先对n作讨论,

当n>m:必定有n-m个盘子永远空着,去掉它们对摆放苹果方法数目不产生影响。即if(n>m) f(m,n) = f(m,m)

当n<=m:不同的放法可以分成两类:

1、有至少一个盘子空着,即相当于f(m,n) = f(m,n-1);

2、所有盘子都有苹果,相当于可以从每个盘子中拿掉一个苹果,不影响不同放法的数目,即f(m,n) = f(m-n,n).

而总的放苹果的放法数目等于两者的和,即 f(m,n) =f(m,n-1)+f(m-n,n)

递归出口条件说明:

1.当n=1时,所有苹果都必须放在一个盘子里,所以返回1;

2.当没有苹果可放时,定义为1种放法;

递归的两条路,第一条n会逐渐减少,终会到达出口n==1;

第二条m会逐渐减少,因为n>m时,我们会return f(m,m) 所以终会到达出口m==0

ContractedBlock.gif

ExpandedBlockStart.gif

#!usr/bin/python

deff(m,n):if (m==0 or n==1):return 1

if m

lines=map(int,raw_input().strip().split())print f(lines[0],lines[1])

View Code

实例四:青蛙跳台阶问题

1.如果青蛙可以一次跳 1 级,也可以一次跳 2 级。问要跳上第 n级台阶有多少种跳法?

思路:f(n)=f(n-1)+f(n-2) 第n级别只能由n-1级别和第n-2级别的青蛙跳到

ContractedBlock.gif

ExpandedBlockStart.gif

#-*- conding: utf-8 -*#递归解法

deff(n):if n==1:return 1

elif n==2:return 2

else:return f(n-1)+f(n-2)print f(8)#自下到上解法

deff2(n):

arr=[0,1,2]for i in range(3,n+1):

tmp=arr[i-1]+arr[i-2]

arr.append(tmp)returnarr[n]print f2(8)

View Code

2.如果青蛙可以一次跳 1 级,也可以一次跳 2 级,一次跳 3 级,…,一次跳 nn 级。问要跳上第 n级台阶有多少种跳法?

ContractedBlock.gif

ExpandedBlockStart.gif

#.*. coding:utf-8 -*#递归解法

deff(n):if n==1:return 1

else:return 2*f(n-1)print f(8)#自下而上解法

deff2(n):

arr=[0,1,2]for i in range(3,n+1):

tmp=2*arr[i-1]

arr.append(tmp)returnarr[n]print f2(8)

View Code

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

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

相关文章

Flink 在唯品会的实践

简介&#xff1a; Flink 在唯品会的容器化实践应用以及产品化经验。 唯品会自 2017 年开始基于 k8s 深入打造高性能、稳定、可靠、易用的实时计算平台&#xff0c;支持唯品会内部业务在平时以及大促的平稳运行。现平台支持 Flink、Spark、Storm 等主流框架。本文主要分享 Flink…

1024 程序员节专题论坛来袭,聚焦企业级开源数据库 openGauss

技术驱动下&#xff0c;现代企业快速发展&#xff0c;产生海量的数据。被称为基础软件三驾马车之一的数据库&#xff0c;一直处于 IT 系统的核心地位&#xff0c;并在技术发展中不断变化。基础数据是“十四五”的重点关注方向&#xff0c;中国数据库正在快速发展崛起&#xff0…

6 张图带你彻底搞懂分布式事务 XA 模式

简介&#xff1a; XA 协议是由 X/Open 组织提出的分布式事务处理规范&#xff0c;主要定义了事务管理器 TM 和局部资源管理器 RM 之间的接口。目前主流的数据库&#xff0c;比如 oracle、DB2 都是支持 XA 协议的。 作者 | 朱晋君 来源 | 阿里巴巴云原生公众号 XA 协议是由 X/O…

龙蜥降世,神龙升级,阿里云投入 20 亿发力操作系统

作者 | 贾凯强、伍杏玲 出品 | CSDN云计算&#xff08;ID&#xff1a;CSDNcloud&#xff09;10 月 20 日&#xff0c;阿里巴巴云栖大会继续在杭州进行&#xff0c;与开幕第一天的主论坛不同&#xff0c;第二天活动的主论坛更加聚焦与技术领域和技术实践。20 日上午&#…

连续三年入围 Gartner 容器竞争格局,阿里云容器服务新布局首次公开

简介&#xff1a; 近日&#xff0c;国际知名信息技术咨询机构 Gartner 发布 2021 年容器竞争格局报告&#xff0c;阿里云成为国内唯一连续三年入选的中国企业&#xff0c;产品丰富度与成熟度持续保持全球领先水平。 来源 | 阿里巴巴云原生公众号 近日&#xff0c;国际知名信息…

双向可控硅触发电路图大全

双向可控硅触发电路图一&#xff1a; 为了提高效率&#xff0c;使触发脉冲与交流电压同步&#xff0c;要求每隔半个交流电的周期输出一个触发脉冲&#xff0c;且触发脉冲电压应大于4V&#xff0c;脉冲宽度应大于20us.图中BT为变压器&#xff0c;TPL521-2为光电耦合器&#xff…

视图计算背后的技术架构思考

简介&#xff1a; 5G时代海量视图计算场景&#xff0c;阿里云边缘计算节点聚焦视频上云和处理方向&#xff0c;阿里云高级技术专家为您解读海量视图计算背后的技术与架构能力。 作者&#xff1a;胡帆 数据载体、算力分布正在根本性变化 视频和图片因其强大的信息承载力&…

Graph + AI 2021全球峰会圆满落幕 TigerGraph企业版3.2发布

中国上海&#xff0c;2021年10月22日——由企业级可扩展图分析平台TigerGraph主办的“图创未来无界精彩”Graph AI 2021中国峰会于前日圆满落幕。本次峰会超3500人参与&#xff0c;较往届增长340%&#xff0c;与会者包括来自耐克、特斯拉、联合利华、西门子、通用电气等上百家…

重磅发布 | 阿里云视图计算,边缘计算的主“战”场

简介&#xff1a; 云计算情报局第10期&#xff0c;阿里云产品专家云觉对新产品——视图计算的产品设计背景、产品功能以及应用场景和价值进行了全面的在线揭秘&#xff0c;带领网友探索全新“视”界。 近日云计算情报局第10期&#xff0c;阿里云产品专家云觉对新产品——视图计…

两个对象数组交集_yiduobo的每日leetcode 349.两个数组的交集 amp;amp; 350.两个数组的交集II...

祖传的手艺不想丢了&#xff0c;所以按顺序写一个leetcode的题解。计划每日两题&#xff0c;争取不卡题吧349.两个数组的交集https://leetcode-cn.com/problems/intersection-of-two-arrays/350.两个数组的交集II https://leetcode-cn.com/problems/intersection-of-two-arrays…

flink sql设置并行度_Flink集成Hivestream模式用例

01背景基于前面的文章Flink集成hive bath模式用例knowfarhhy&#xff0c;公众号&#xff1a;大数据摘文Flink 集成Hive&#xff0c;我们继续介绍stream模式下的用例。02流模式读取HiveEnvironmentSettings bsSettings EnvironmentSettings.newInstance().useBlinkPlanner().in…

微软副总裁、Kubernetes 头号贡献者的他,给云原生带来奇迹!

我们做了一个街头采访&#xff0c;调查路人眼中的程序员到底是怎样的&#xff1f;提到程序员&#xff0c;大家似乎都有刻板印象&#xff1a;总是格子衬衫牛仔裤双肩包打扮&#xff0c;总是埋头敲代码&#xff0c;加班是常态……谁说程序员呆板木讷&#xff0c;只会埋头敲一行行…

云原生新边界——阿里云边缘计算云原生落地实践

简介&#xff1a; 日前&#xff0c;在由全球分布式云联盟主办的“Distributed Cloud | 2021 全球分布式云大会云原生论坛”上&#xff0c;阿里云高级技术专家黄玉奇发表了题为《云原生新边界&#xff1a;阿里云边缘计算云原生落地实践》的主题演讲。 作者 | 黄玉奇 来源 | 阿里…

HTTPS 协议到底比 HTTP 协议多些什么?

来源&#xff1a;杰哥的IT之旅作者&#xff1a;阿拉斯加最近卷了一篇 HTTP 协议的相关知识&#xff0c;大家可以一起来看一下~HTTP 简介HTTP 协议是 Hyper Text Transfer Protocol&#xff08;超文本传输协议&#xff09;的缩写&#xff0c;是用于从万维网&#xff08;WWW:Worl…

独家深度 | 一文看懂 ClickHouse vs Elasticsearch:谁更胜一筹?

简介&#xff1a; 本文的主旨在于通过彻底剖析ClickHouse和Elasticsearch的内核架构&#xff0c;从原理上讲明白两者的优劣之处&#xff0c;同时会附上一份覆盖多场景的测试报告给读者作为参考。 作者&#xff1a;阿里云数据库OLAP产品部 仁劼 Clickhouse是俄罗斯搜索巨头Yan…

golang 排序_堆 堆排序 优先队列 图文详解(Golang实现)

引入在实际应用中&#xff0c;我们经常需要从一组对象中查找 最大值 或 最小值 。当然我们可以每次都先排序&#xff0c;然后再进行查找&#xff0c;但是这种做法效率很低。哪么有没有一种特殊的数据结构&#xff0c;可以高效率的实现我们的需求呢&#xff0c;答案就是 堆(heap…

看懂 IPv6+,这篇就够了

来源&#xff1a;鲜枣课堂作者&#xff1a;小枣君5G网络的不断建设和普及&#xff0c;加速了我们迈入万物互联时代的步伐。我们的整个互联网络&#xff0c;正在发生翻天覆地的变化。急剧增加的网络连接数和流量&#xff0c;对网络的承载和传送能力&#xff0c;提出了前所未有的…

高德打车通用可编排订单状态机引擎设计

简介&#xff1a; 订单状态流转是交易系统的最为核心的工作&#xff0c;订单系统往往都会存在状态多、链路长、逻辑复杂的特点&#xff0c;还存在多场景、多类型、多业务维度等业务特性。在保证订单状态流转稳定性的前提下、可扩展性和可维护性是我们需要重点关注和解决的问题。…

边开飞机边换引擎?我们造了个新功能保障业务流量无损迁移

简介&#xff1a; 容器化部署应用可以降低企业成本&#xff0c;提升研发效率&#xff0c;解放运维人员。据 Gartner 预计&#xff0c;到 2022 年&#xff0c;将有 75&#xff05; 的企业将在生产中运行容器化应用程序。Kubernetes 是企业部署容器化应用的首选框架。由于 Kubern…

专访百度集团副总裁袁佛玉:科技创新对普惠金融正在充分发挥“乘数效应”

图为百度集团副总裁袁佛玉在发表演讲 “随着我国数字经济的腾飞&#xff0c;科技创新正在充分发挥对于普惠金融的“乘数效应”&#xff0c;加速普惠金融拓展的深度和广度。”百度集团副总裁袁佛玉在10月22日举办的2021金融街论坛“‘一带一路’金融减贫论坛”上表示。 袁佛玉…