How to Design Dynamic Programming Algorithms Sans Recursion

合集下载

城市轨道交通列车追踪间隔与牵引能耗优化

城市轨道交通列车追踪间隔与牵引能耗优化

第20卷第6期2020年12月交通运输系统工程与信息Journal of Transportation Systems Engineering and Information TechnologyV ol.20No.6December 2020文章编号:1009-6744(2020)06-0170-08中图分类号:U268.6文献标志码:ADOI:10.16097/ki.1009-6744.2020.06.022城市轨道交通列车追踪间隔与牵引能耗优化高豪,郭进*,张亚东(西南交通大学信息科学与技术学院,成都611756)摘要:针对城市轨道交通高峰小时列车密集追踪运行的特点,将降低列车牵引能耗和提升线路通过能力同时作为优化目标,研究列车运行操纵优化问题.给出移动闭塞条件下列车牵引能耗和最小追踪间隔的计算方式,考虑列车安全、正点运行约束,构建双目标优化模型.结合ε-约束法,提出一种基于动态规划的搜索算法求解模型.以亦庄线为优化算例,求解得到一组列车最优操纵Pareto 解,体现两优化目标之间的均衡关系:列车进站过程采用两次制动操纵策略可有效压缩最小追踪间隔,为弥补两次制动过程额外消耗的运行时间,列车需付出更多的牵引能耗提升进站以前的运行速度以满足正点运行约束.关键词:铁路运输;列车最优操纵;动态规划;列车;最小追踪间隔;节能Optimization of Train Headway and Traction EnergyConsumption in UrbanRail TransitGAO Hao,GUO Jin,ZHANG Ya-dong(School of Information Science and Technology,Southwest Jiaotong University,Chengdu 611756,China)Abstract:Focusing on the characteristics of dense train tracking operation during the peak hour in urban rail transit,this paper takes both reducing traction energy consumption and improving line capacity as objectives in the train driving strategy optimization.The calculation method of traction energy consumption and minimum headway is given under the moving block system.Considering the constraint of safe running and punctual arriving,the two-objective optimization model is constructed.A dynamic programming based approach combined with ε-constraint method is proposed to solve the model.A case study of Yizhuang urban rail line was executed and a set of Pareto solutions were achieved which reflecting the trade-off between those two objectives.The results showed that the multi-step braking strategy during the phase of entering a station can compress the minimum headway effectively.To reduce the increased running time because of the multi-step braking strategy,trains need to improve their velocity before the phase of entering a station to satisfy the constraint of punctual arriving,which consumes more traction energy.Keywords:railway transportation;optimum driving strategy;dynamic programming;train;minimum headway;energy saving0引言随着城市轨道交通大量新建线路投入网络化运营,我国轨道交通客运量增长明显,北京、上海两市日均客运量均已超过1000万人.为满足日益增长的客运需求,以基于通信的列车运行控制(Communication Based Train Control,CBTC)为代表的移动闭塞系统取代了传统固定闭塞系统,并得到广泛应用.利用高精度列车定位、双向大容量车地无线通信等新兴技术,CBTC 系统可以进一步提升高峰小时线路通过能力.据资料统计,2019年收稿日期:2020-07-15修回日期:2020-09-16录用日期:2020-09-17基金项目:国家自然科学基金青年科学基金/Young Scientists Fund of the National Natural Science Foundation of China(61703349).作者简介:高豪(1989-),男,江苏苏州人,博士生.*通信作者:*******************.cn第20卷第6期城市轨道交通列车追踪间隔与牵引能耗优化全国城市轨道交通高峰小时最小发车间隔平均为290s,进入120s以内的线路共12条.同线路能力一样,列车牵引能耗是制约城市轨道交通可持续发展的关键因素.面向高峰小时多列车密集追踪的运行场景,能耗问题尤为突出.在保证列车安全、正点运行前提下,通过调整列车操纵策略,进一步压缩行车间隔并减少牵引能耗,可有效提升城市轨道交通服务水平和经济效益.针对多列车运行操纵优化问题,国内外学者开展了广泛讨论.Wang[1]面向固定闭塞和移动闭塞系统下的列车追踪运行场景,以最小追踪间隔为约束条件,研究列车运行受扰后的多列车节能操纵优化问题.Ye[2]考虑快慢车越行场景下的列车安全追踪及正点运行约束,通过构建多阶段优化控制模型求解多列车节能操纵最优策略.进一步地,柏赟[3]考虑追踪间隔要求和再生制动能利用,研究以列车净能耗最少为目标的快慢车线路列车协同操纵优化问题.Wang[4]在确保列车运行满足最小追踪间隔的前提下,通过调整各列车的站间运行时间来最大化多列车追踪优化的节能效果.以上文献将最小追踪间隔作为约束条件,研究不同场景下多列车节能驾驶优化问题.优化后的列车运行间隔发生改变,但线路能力并未得到本质提升.Takeuchi[5]将最小追踪间隔作为衡量线路能力的性能指标,分析列车运行速度对最小追踪间隔的影响.陈荣武[6]通过调整车站限速区域及限速值压缩了近6.3%的列车最小追踪间隔.Nakamura[7]指出列车采用多级制动的进站操纵策略可有效压缩最小追踪间隔,并利用遗传算法优化列车进站操纵策略.上述文献将最小追踪间隔作为优化目标,通过调整列车操纵策略提升线路通过能力,却忽略了操纵策略改变带来的牵引能耗增加问题.针对高峰小时地铁列车密集追踪运行的特点,本文同时将降低列车牵引能耗和缩短最小追踪间隔作为优化目标,通过优化列车操纵策略实现列车节能驾驶并提升线路通过能力.首先给出移动闭塞条件下列车牵引能耗和最小追踪间隔的计算方式,在此基础上考虑列车正点运行和线路限速约束,构建双目标优化模型;引入ε-约束法将模型转为单目标形式,并利用动态规划方法作进一步求解.1列车运行性能指标1.1列车牵引能耗对运行过程中的列车进行受力分析,构建基于单质点的列车运动学计算模型,即d v()xd x=u()x-r()xM⋅()1+α⋅v()x(1)r()x=r b()x+r1()x(2) r b()x=M⋅[]a+b⋅v()x+c⋅v2()x(3)r1()x=r g()x+r c()x+r t()x(4)式中:M为列车质量;x为列车位置;v()x为列车速度;α为回转系数;u()x为列车牵引制动力;r()x为列车运行阻力,包括基本阻力r b()x和和附加阻力r1()x;r b()x由戴维斯方程来表示,其系数a、b及c根据列车型号而定;r1()x包括坡道附加阻力r g()x、曲线附加阻力r c()x和隧道附加阻力r t()x.列车以操纵策略U={u()x|u min()x≤u()x≤}u max()x,x∈[0,X]在线路上追踪运行,其中,u max()x 和u min()x分别为列车保证乘客安全、舒适条件下的最大牵引力和最大制动力,X为列车站间运行距离.列车执行U后的牵引能耗E()U和运行时间T()U为E()U=∫0X max[]0,u()x⋅d x(5)T()U=∫0X1v()x⋅d x(6) 1.2最小追踪间隔线路通过能力体现为列车追踪运行过程中最小追踪间隔的倒数[5],取决于列车在线路最受限制点处的最小安全追踪距离及通过该距离的运行速度[6].移动闭塞系统中,相邻列车的间隔距离必须始终大于最小安全追踪距离.现有CBTC系统均采用不考虑先行列车速度的“硬撞墙”模型来计算最小安全追踪距离,即S min()x a=L react()x a+L eb()x a+L sm+L train(7)L react()x a=T react⋅v()x a(8)L eb()x a=v2()x a2a eb(9)式中:S min()x a为列车在位置x a处的最小安全追踪171交通运输系统工程与信息2020年12月距离;L react()x a为列车在反应时间T react内的走行距离;L eb()x a为列车紧急制动距离;a eb为紧急制动率;L sm为安全余量;L train为列车车长.为简化计算,假设T react、a eb、L sm和L train为固定值.根据列车在通过最小安全追踪距离期间是否停靠站台,将最小追踪间隔的计算分为区间和车站两种模式.图1为区间最小追踪间隔示意,相邻两车以最小安全追踪距离为间隔分别运行至x a和x a+S min()x a处,其中,x a+S min()x a<x S,x S为站台位置.相邻列车沿图中实线所示的运行轨迹连续经过x a的最小时间间隔H min()x a为H min()x a=∫x a x a+S min()x a1v()x⋅d x(10)图1区间最小追踪间隔Fig.1Minimum headway of interstation地铁车站一般不设配线,列车到达车站后需在正线上完成停站作业,且同一时间只允许1列列车进行停站作业.车站最小追踪间隔的计算不考虑存在多配线条件下的列车到达、到通、出发、发通等间隔,如图2所示.相邻两车分别运行至x a和x a+S min()x a处,其中,x a+S min()x a≥x S,列车通过S min()x a期间需经历减速进站、停车和加速出站过程.因此,相邻列车连续经过x a的最小时间间隔H min()x a为H min()x a=T in()x a+T dwell+T out()x a(11)T in()x a=∫x a x S1v()x⋅d x(12)T out()x a=∫x S x a+S min()x a1v()x⋅d x(13)式中:T in()x a、T out()x a分别为列车进站、出站运行时间;T dwell为停站时间.图2车站区域最小追踪间隔Fig.2Minimum headway of station area对于任意位置x a,H min()x a取决于S min()x a和通过S min()x a的列车运行速度.由式(7)~式(9)可知,S min()x a取决于v()x a和x a以前的列车操纵策略有关,通过S min()x a的列车运行速度和x a以后的列车操纵策略有关.因此,操纵策略决定了列车追踪运行过程中可实现的最小追踪间隔.全线列车执行相同U在线路上追踪运行,可实现的最小追踪间隔H()U为列车连续通过最受限制点的最小时间间隔,即H()U=maxx∈[]0,XH min()x(14) 2列车运行性能优化2.1问题描述列车站间运行时间由运行图预先给定,理论上存在无数种操纵策略保证列车安全、正点运行.面向高峰小时地铁列车密集追踪的运行场景,将其中可实现追踪间隔最小且牵引能耗最小的操纵策略作为最优操纵策略.Takeuchi[5]对最小追踪间隔计算进行了灵敏度分析,结果表明,增大列车牵引/制动加速度可有效压缩最小追踪间隔.Liu[8]利用极大值原理推导出连续控制条件下的列车节能驾驶最优控制应包括最大牵引、巡航、惰行和最大制动.上述文献表明,列车最大牵引和最大制动是实现节能驾驶和高效追踪的必要控制条件.因此,本文选择最大牵引、巡航、惰行和最大制动组成列车最优操纵策略的4种控制变量,目标问题转化为寻找这些控制变量之间的组合顺序及其对应的转换点.本文假设列车装备自动驾驶系统,能够在线172第20卷第6期城市轨道交通列车追踪间隔与牵引能耗优化路任意位置实现巡航控制.因现有地铁系统并未完全装备再生制动设备,为不失一般性,再生制动能不在本文考虑范围内.2.2优化模型将U 作为决策变量,将min E ()U 和min H ()U 作为优化目标,设置列车安全、正点运行约束条件,构建双目标优化模型为ìíîïïïïmin E ()U min H ()U s.t.T ()U =T setv ()x <V limit ()x ,x ∈[0,X ](15)式中:V limit ()x 为线路限速条件;T set 为指定站间运行时间.2.3模型求解构建双目标优化模型旨在降低列车牵引能耗的同时压缩列车最小追踪间隔,期望得到一组准确的Pareto 最优解以体现两目标之间的均衡,采用基于动态规划方法的精确算法求解式(15).由于最小追踪间隔指标在动态规划逐段递推过程中并不严格单调,不具备动态规划方法所需的“无后效性”,引入ε-约束法将其转化为约束条件,并将式(15)转化为单目标优化模型,并以Δε为间隔由小到大调整ε参数值后多次利用动态规划方法进行求解.ìíîïïïïmin E ()U s.t .H ()U ≤εT ()U =T setv ()x <V limit ()x ,x ∈[0,X ](16)对式(16)的状态空间进行离散,将列车运行过程在空间域上划分K 个阶段,保证各阶段线路条件不变且各阶段长度不大于Δx .在k 阶段开始位置x k 处,按间隔Δv 划分k 阶段的开始状态集{}s k,i|sk,i=()x k ,i ⋅Δv ,0≤i ⋅Δv ≤Vˉ()x ,i ∈Ν,其中,Vˉ()x 为列车在最速策略下运行至x 处的速度.如图3所示,实线为列车最速运行轨迹,圆点为各阶段开始状态,亦为上一阶段的结束状态.列车运行过程的起点和终点分别记为s 1,0和s K +1,0.动态规划始终运行在基于上述离散划分规则的状态空间内,其优化结果一定能够满足安全运行约束v ()x <V limit ()x.图3模型阶段状态划分示意图Fig.3Stages and vertices of optimization model列车在k 阶段运行时固定采用最大牵引、巡航、惰行和最大制动中的一种工况,将其简记为u k ,列车在相邻阶段的最优控制工况切换还应满足图4所示的接续条件.图4列车控制接续约束Fig.4Train regime switching constraint列车在k 阶段s k,i 处施加u k 后运行至k +1阶段()x k +1,v ′处,()x k +1,v ′有可能不属于已划分的开始状态集,需要对其进行近似处理并修正至s k +1,j 处,其中j =round ()v ′Δv ,将上述状态转移过程简写为s k +1,j =F ()s k,i ,u k (17)列车在s k,i 处施加u k 阶段牵引能耗e ()s k,i ,u k 和运行时间t ()s k,i ,u k 计算为e ()s k,i ,u k =∫x kx k +1max []0,u ()x ⋅d x(18)t ()s k,i ,u k =∫xkx k +11v ()x ⋅d x(19)为获取式(16)在ε参数下的最优操纵策略U *ε,采用后向动态规划的求解方式,从s K +1,0开始逐段向前推进寻找列车在各阶段的最优控制决策173交通运输系统工程与信息2020年12月直至s 1,0.对于阶段k ,将列车从s k,i 运行至s K +1,0的操纵子策略记为U ()s k,i ,其对应的牵引能耗和运行时间分别为E []U () s k,i 和T []U ()s k,i ,下面建立评价U ()s k,i 最优性的过程指标函数.将列车从s 1,0运行至s k,i 处的操纵子策略记为U ()s k,i ,其对应的牵引能耗及运行时间分别记为E []U () s k,i 和T []U ()s k,i .因此,式(16)的优化目标min E ()U 可拆解为min E []U () s k,i 和min E []U ()s k,i .在后向动态规划求解过程中,E []U ()s k,i 无法直接求解得到.列车牵引能耗与运行时间在节能操纵条件下呈反比关系,故min E []U ()s k,i 等效于max T []U () s k,i .因T []U () s k,i +T []U ()s k,i =T set ,故min E []U () s k,i 等效于min T []U ()s k,i .因此,评价U ()s k,i 最优性的过程指标函数为E []U *() s k,i =min u k{}e ()s k,i ,u k +E {}U *éëùû F ()s k,i ,u k (20)T []U *() s k,i =min u k{}t ()s k,i ,u k +T {}U *éëùûF ()s k,i ,u k (21)U ()s k,i 对应的最小追踪间隔H []U () s k,i 应满足ε约束,即H []U ()s k,i ≤ε(22)U ()s k,i 应满足准点运行约束为T min []U () s k,i ≤T []U () s k,i ≤T max []U () s k,i (23)式中:T min []U () s k,i 、T max []U ()s k,i 分别为列车从s k,i 到s K +1,0的最短、最长运行时间.特别的,列车在s 1,0和s K +1,0的准点约束条件为T []U () s 1,0=T min []U () s 1,0=T max []U ()s 1,0=T set (24)T []U () s K +1,0=T min []U () s K +1,0=T max []U ()s K +1,0=0(25)T min []U () s k,i 和T max []U ()s k,i 的计算方法如图5所示.点划线为列车从s k,i 到s K +1,0的最速运行轨迹,其对应的运行时间为T min []U ()s k,i .虚线为列车从s 1,0到s k,i 的最速运行轨迹,其对应的运行时间为T min []U () s k,i ,则T max []U () s k,i =T set -T min []U () s k,i .图5T min []U () s k,i 和T max []U ()s k,i 计算原理Fig.5Calculation principle of T min []U () s k,i and T max []U ()s k,i由于存在2个冲突的过程指标,即式(20)和式(21),列车从s k,i 处运行至s K +1,0的最优操纵子策略应为一组Pareto 解,记为{}U *w () s k,i ,其中,U *w ()s k,i 为s k,i 处的第w 个最优子策略.动态规划方法从s K +1,0开始逐段向前推进,求解各阶段各状态点的Pareto 最优子操纵策略集直至起点s 1,0.由于准点运行式(24)的限制,s 1,0处的最优操纵策略有且只有一个,为式(16)在ε参数下的最优解,即U *ε=U *1()s 1,0.式(16)的具体求解步骤描述如下:Step 1读入线路数据及列车参数并计算V ˉ()x ,设定模型参数Δx 、Δv 和ε,划分离散状态集合{}s k,i ,设定边界条件E []U *1()s K +1,0=0,T []U *1()s K +1,0=0,令k =K ,完成模型求解初始化.Step 2对于k 阶段所有的s k,i ,遍历4种最优控制工况u k ,获取k +1阶段F ()s k,i ,u k 处的最优子策略集{}U *w éëùûF ()s k,i ,u k .在满足式(22)和式(23)的条件下,将u k 加入{}U *w éëùûF ()s k,i ,u k 生成s k,i 处的可行子策略集{}U ()s k,i .Step 3根据过程指标式(20)和式(21),对{}U ()s k,i 进行Pareto 占优操作,得到s k,i 的Pareto 最优子策略集{}U *w () s k,i .若k ≠1,则令k =k -1,跳转174第20卷第6期城市轨道交通列车追踪间隔与牵引能耗优化至Step 2;若k =1,输出式(16)的最优解U *ε.3算例分析基于C++开发优化程序,以北京地铁亦庄线为算例,选择文献[2]中线路数据和车辆参数,在此基础上进一步设定,a eb =-1.0m/s 2、L sm =30m 、L train =90m 、T react =0.5s 和T dwell =30s .根据“计算时间—优化效益可接受原则”设置模型参数如下:Δx =10m 、Δv =1km/h 和Δε=0.1,模型参数决定模型的求解精度和求解效率,间隔越小,模型求解精度越高且求解效率越低.以第7区间“万源街—荣京东”为例:首先,令ε=0,不断迭代计算ε=ε+Δε后的式(16)直至获取第1个有效解,该解即为能够实现理论最小追踪间隔的操纵策略U *headway ,令εmin =H ()U *headway ;其次,将ε设置为一个较大的正值后对式(16)进行求解,所得解即为只考虑节能目标的最优操纵策略U *energy ,令εmax =H ()U *energy ;最后,以Δε为间隔在[]εmin ,εmax 内由小到大调整ε参数值,多次求解式(16),获得一组Pareto 最优解,如图6所示.图6列车最优操纵Pareto 解Fig.6Pareto solution of optimum driving strategy选取ε=70条件下的最优操纵策略U *70,对比U*energy、U *70和U*headway这3种策略下的v ()x 及其对应的H min ()x ,如图7所示.U*energy条件下列车从起点开始最大牵引至A 1,然后以惰行和巡航的组合方式运行至B 1,最后施加最大制动至终点;列车从C 1开始进入车站追踪模式,H min ()x 发生跃变;U *energy的性能指标分别为E ()U*energy=9.8kW ⋅h ,H ()U *energy =77.2s .U *70条件下列车最大牵引至A 2,惰行并巡航至B -2后开始施加第1次最大制动至C 2,然后惰行至B 2后施加第2次最大制动至终点;由于提前制动,列车在C 2处才进入车站追踪模式,其性能指标为E ()U *70=10.7kW∙h,H ()U *70=70.0s .同U *70一样,U *headway 在B -3处提前制动,采用两次制动的进站模式分别经过了A 3-B -3-C 3-B 3点,列车自C 3开始进入车站追踪模式,性能指标为E ()U *headway =13.0kW∙h ,H ()U *headway =67.1s .相较于U *energy,U *70和U *headway 在进站过程中执行两次制动策略,压缩了列车最小追踪间隔,为弥补两次制动进站过程中额外消耗的运行时间,U *70和U *headway 提升了进站以前的运行速度,额外增加了牵引能耗.图7U *energy 、U *70和U *headway 的列车运行轨迹及最小时间间隔Fig.7Train trajectory and minimum time separation ofU *energy ,U *70and U *headway列车进站操纵策略变化本质上影响的是车站追踪模式下T in ()x 和T out ()x ,从而改变H min ()x .U *energy 、U *70和U *headway 策略下的T in ()x 和T out ()x 随v ()x 的变化趋势如图8所示.上述操纵策略在车站追踪模式下的运行过程均包含1次惰行和1次最大制动.随着列车向终点运行,3种操纵策略对应的175交通运输系统工程与信息2020年12月T out()x从0开始递增并分别在列车进站的制动初始点B1、B2和B3处达到极大值,T in()x呈递减趋势并在终点处减为0.由于不同操纵策略下T in()x和T out()x存在差异,U*energy条件下的H min()x呈先增后减趋势,在B1处达到极大值;U*70和U*headway条件下,H min()x分别在C2和C3处达到极大值.图8车站追踪模式下列车运行轨迹及相关时间间隔Fig.8Train trajectory and related time separation under station tracking mode 计算全线13个站间的最优操纵Pareto解,选取各站间的U*headway与U*energy进行比较,如表1所示.与U*energy相比,列车在U*headway下的全线通行能力提升了17.0%,牵引总能耗增加了19.3%.各站间的U*headway均采用两次制动的进站策略且第2次制动的进站初速度都为23.0km/h,各站间U*headway的最小追踪间隔均达到约67s的极小值.各站间的U*energy都采用一次制动进站策略,其最小追踪间隔的大小与列车进站制动初速度正相关.不失一般性,图9以第2区间和第4区间为例,描绘U*headway和U*energy策略下v(x)和H min(x)来进一步印证上述结论.表1列车操纵策略优化结果Table1Optimaziton results of drivingstrategy176第20卷第6期城市轨道交通列车追踪间隔与牵引能耗优化图9U *headway 和U *energy 的列车运行轨迹及最小时间间隔Fig.9Train trajectory and minimu time separation of U *headway 和U *energy4结论列车操纵策略决定了列车在线路上运行的牵引能耗和可实现的最小追踪间隔.列车采用两次制动的进站策略可以有效压缩最小追踪间隔,但需要消耗更多的牵引能耗.列车最小追踪间隔和进站制动初速度正相关且存在极小值.相较于只考虑节能目标的最优操纵策略,追踪间隔压缩后的最优操纵策略最多可提升17.0%的线路通过能力,同时也增加了19.3%的牵引能耗.运营商可权衡地铁高峰小时服务水平和运营成本的实际需求,利用本文方法获得列车追踪运行最优操纵策略,具有一定实际意义.随着再生制动设备在城市轨道交通系统的应用普及,考虑再生制动能利用的列车运行能耗和追踪间隔多目标优化问题有待进一步讨论.参考文献:[1]WANG Y,DE SCHUTTER B,VAN DEN BOOM T J J,et al.Optimal trajectory planning for trains under fixed and moving signaling systems using mixed integer linear programming[J].Control Engineering Practice,2014,22:44-56.[2]YE H,LIU R.A multiphase optimal control method for multi-train control and scheduling on railway lines[J].Transportation Research Part B:Methodological,2016,93:377-393.[3]柏赟,于昭,贾文峥,等.考虑追踪安全的地铁快慢车协同操纵节能优化[J].交通运输系统工程与信息,2019,19(3):126-133.[BAI Y,YU Z,JIA W Z,et al.Cooperative control of express/local metro trains for energy saving considering the safe headway[J].Journal of Transportation Systems Engineering and Information Technology,2019,19(3):126-133.][4]WANG P,GOVERDE R M P.Multi-train trajectory optimization for energy-efficient timetabling[J].European Journal of Operational Research,2019,272(2):621-635.[5]TAKEUCHI H,GOODMAN C J,SONE S.Moving block signalling dynamics:Performance measures and re-starting queued electric trains[J].IEE Proceedings-electric Power Applications,2003,150(4):483-492.[6]陈荣武,诸昌钤,刘莉.CBTC 系统列车追踪间隔计算及优化[J].西南交通大学学报,2011,46(4):579-585.[CHEN R W,ZHU C Q,LIU L.Calculation and optimization of train headway in CBTC system[J].Journal of Southwest Jiaotong University,2011,46(4):579-585.]下转第204页177交通运输系统工程与信息2020年12月Influences of traffic flow characteristics on accidentseverity on secondary roads[J].China Journal ofHighway and Transport,2020,33(2):135-145.] [9]吴琴,施欣,陶学宗.海事事故严重性影响因素及影响程度识别[J].交通运输系统工程与信息,2019,19(1):189-195.[WU Q,SHI X,TAO X Z.Identifying the factors and their impact levels on severity of maritime traffic accidents[J].Journal of Transportation Systems Engineering and Information Technology,2019,19(1): 189-195.]上接第177页[7]NAKAMURA H.Analysis of minimum train headway ona moving block system by genetic algorithm[J].WITTransactions on the Built Environment,1998,37:1013-1022.[8]LIU R R,GOLOVITCHER I M.Energy-efficientoperation of rail vehicles[J].Transportation ResearchPart A:Policy and Practice,2003,37(10):917-932.上接第183页[2]李军,邓红平.基于公交IC卡数据的乘客出行分类研究[J].重庆交通大学学报(自然科学版),2016,35(6):109-114.[LI J,DENG H P.Classification ofpassenger's travel behavior based on IC card data[J].Journal of Chongqing Jiaotong University(NaturalSciences),2016,35(6):109-114.][3]何兆成,余畅,许敏行.考虑出行模式和周期性的公交出行特征分析[J].交通运输系统工程与信息,2016,16(6):135-141.[HE Z C,YU C,XU M X.Analyzingmethods of residents'travel characteristics consideringtravel patterns and periodicity[J].Journal ofTransportation Systems Engineering and InformationTechnology,2016,16(6):135-141.][4]GOULET-LANGLOIS G,KOUTSOPOULOS H N,ZHAO Z,et al.Measuring regularity of individual travelpatterns[J].IEEE Transactions on IntelligentTransportation Systems,2017,19(5):1583-1592. [5]翁剑成,王昌,王月玥,等.基于个体出行数据的公共交通出行链提取方法[J].交通运输系统工程与信息,2017,17(3):67-73.[WENG J C,WANG C,WANG YY,et al.Extraction method of public transit trip chainsbased on the individual riders'data[J].Journal ofTransportation Systems Engineering and InformationTechnology,2017,17(3):67-73.][6]ZOU Q,YAO X,ZHAO P,et al.Detecting home locationand trip purposes for cardholders by mining smart cardtransaction data in Beijing subway[J].Transportation,2018,45(3):919-944.[7]PEI J,HAN J,MORTAZAVI-ASL B,et al.Miningsequential patterns by pattern-growth:The prefixspanapproach[J].IEEE Transactions on Knowledge and DataEngineering,2004,16(11):1424-1440.204。

算法分析与设计——动态规划法的应用(C++版)

算法分析与设计——动态规划法的应用(C++版)

c p1k−1∈pik−1( x1)
pkn ∈ pkn ( xk )
(1)
w. 3. 动态规划法基本定理的推论如下:
ww 若 p1n*∈p1n(x1)是最优策略,则对于任意的 k,有 1<k<n,它的子策略 pkn*对于由 x1 和 p1,k-1*确 t 定的以 xk*为起点的第 k 到 n 后部子过程而言,也是最优策略。
uk ∈Uk ( xk )
fk +1(xk +1))}
xk +1 = Tk (xk , uk ), k = 1, 2, L, n
o c ⎪⎩ fn+1(xn+1) = δ (xn+1)
(2)
nb w. 其中 fn+1(xn+1) = δ (xn+1) 是决策过程的终端条件,δ 为一个已知函数。当 xn+1 只取固定的状态时称固
et k. 方法,针对不同的问题选择合适的划分方法,以便按阶段的次序解优化问题。 n o 2. 状态 k. bo 对于一个问题,所有可能到达的情况,包括初始情况和目标情况等,称为该问题的状态(state)。 o cn 描述状态的变量称状态变量(state variable),状态变量的取值是其所对应状态的当前解。变量 w. 允许取值的范围称允许状态集合(set of admissible states)。根据过程演变的具体情况,状态变量可 w 以 是 离 散 的 或 连 续 的 。 为 了 计 算 的 方 便 有 时 将 连 续 变 量 离 散 化 ; 为 了 分 析 的 方 便 有 时 又 将 离 散 变 量 w t 视为连续的。
※ 1 ※
.cnbook 1.1 动态规划模型的基本要素 www 动态规划可以看成是一个多阶段决策过程化问题的求解模型,它通常包含以下要素: t 1. 阶段 ne 阶 段 ( step ) 是 对 整 个 过 程 的 自 然 划 分 。 通 常 存 在 按 时 间 顺 序 和 按 空 间 特 征 来 划 分 阶 段 这 两 种

Lecture08 Dynamic Programming2背包问题)

Lecture08 Dynamic Programming2背包问题)

V[i, j] =
{
max{V[i-1, j], vi+ V[i-1, j – wi] }, if j – wi 0 V[i-1, j] if j – wi < 0
V[0, j] = 0 for j 0 and V[i, 0] = 0 for i 0

Memory functions Knapsack problem


V[0, j] = 0 for j 0 and V[i, 0] = 0 for i 0



1<=i<=N, 0<=j<=N 初值:F(0,j)=0 V(N,M)即答案 显然时间复杂度为O(NM),N件物品*M最大重量
step3 Compute the value of an optimal solution in a bottom-up fashion 自底ecursively define the value of an optimal solution 建立递归关系 可以按每个物品进行规划,同样每种物品有选和不选两种 选择 设V(i,j)表示前i件物品载重为j的最大效益,则有
V[i, j] = V[i, j] = max{V[i-1, j], vi+ V[i-1, j – wi] }, if j – wi 0 V[i-1, j] if j – wi < 0
最大承重量j 第i个物品 最大承重量时5
物品i
0
1
2
3
4
5
0
W1=2,V1=12 W2=1,V2=10 W3=3,V3=20 W4=2,V4=15
0
0 0 0 0
0
0 10 10 10

简述算法设计的一般流程

简述算法设计的一般流程

简述算法设计的一般流程Algorithm design is a structured process that involves breaking down a complex problem into smaller, more manageable subproblems,and then developing a step-by-step solution to each subproblem. 算法设计是一个结构化过程,涉及将一个复杂问题分解为更小、更易管理的子问题,然后对每个子问题逐步进行解决。

This process typically startswith identifying the inputs, outputs, and constraints of the problem, as well as understanding the desired behavior of the solution. 这个过程通常从识别问题的输入、输出和约束开始,以及了解解决方案的期望行为。

Once the problem has been properly understood, the next step in algorithm design is to choose an appropriate algorithmic approachor technique to solve the problem. 一旦问题被正确理解,算法设计的下一步就是选择一个合适的算法方法或技术来解决问题。

This decision is often influenced by the specific characteristics of the problem, such as its size, complexity, and the nature of the input data. 这个决定常常受到问题的具体特征的影响,如问题的规模、复杂性和输入数据的性质。

找零钱问题

找零钱问题

A 30° ° B
A
30° °
如果你选做了本题并取得了正确答案,请在上机结束前将源程序交到 如果你选做了本题并取得了正确答案,请在上机结束前将源程序交到 上机结束前 Ftp://202.117.35.169/C++/zhudj/Algorithm目录中,文件名为学号 ,不分班级。 目录中, 为学号_M,不分班级。 目录中 文件名为学号
假定有伍角、壹角、伍分、 假定有伍角、壹角、伍分、贰分和壹分共五种硬 在给顾客找硬币时, 币,在给顾客找硬币时,一般都会尽可能的选用 硬币个数最小的方法。例如, 硬币个数最小的方法。例如,当要给某顾客找七 角二分钱时,会给他一个伍角, 个壹角和1 角二分钱时,会给他一个伍角,2个壹角和1个贰 分的硬币。 分的硬币。
Quicksort
// 快速排序 void QuickSort(int *a, int p, int q) { if(p<q) { int r=Partition(a, p, q); QuickSort(a, p, r-1); //对左半段排序 对; //对右半段排序 对右半段排序 } }
• 即
π = 4∗ B/ A
求π 的近似值
• 下雨时: 下雨时:
– 雨点落在整个正方形容器中的限制条件是: 雨点落在整个正方形容器中的限制条件是:
0 ≤ x ≤1 0 ≤ y ≤1
– 雨点落在扇形区域中的限制条件是: 雨点落在扇形区域中的限制条件是:
x2 + y 2 ≤ 1
int main() { int a=0, b=0; double pi, x, y; srand((unsigned int)time(NULL)); for(int i=0; i<10000; i++) { a++; x=(double)rand()/RAND_MAX; y=(double)rand()/RAND_MAX; if(sqrt(x*x+y*y)<=1)b++; } pi=4.0*(double)b/a; cout<<"pi="<<pi<<endl; return 0; }

算法设计与分析4-5

算法设计与分析4-5

动态规划(Dynamic Programming)基本思想和使用条件 动态规划算法的设计步骤 应用实例 小结1基本思想和使用条件例1 求从始点到终点的最短路径d,15 S1 u,13S2d,11 6 4 7 5 4 d9 d,9A13 4 3B1 u,5B29 3 6u2 2 u,2 C1 d,3 d 3 4 C2 u7 7 u,7C3T1 5 T2 3 T3 7 T4 6 T52u8 u,8A2d,10 S3d6 d,62 u,7 4 B3 3 2 1 d,5 B4 5 u,4 B5 1 4 3A3 d,11 9 S4 4 u,7 u,10 S5 3A42u,1 C41基本思想解:判断序列F (C l ) = min{C l Tm )m lF ( Bk ) = min{ Bk C l + F (C l )} F ( A j ) = min{ A j Bk + F ( Bk )}kF ( S i ) = min{ S i A j + F ( A j )}任何最短路径的子路径都是相对于子路径 的始点和终点的最短路径 为找到一条最短路径只需从Tj开始进行多 步判断3j使用条件 使用条件--优化原则 优化原则一个最优决策序列的任何子序列本身一定是相对于 子序列的初始和结束状态的最优的决策序列 例2 求总长模10的最小路径 d,1 2 S 5 5 5 5 u,6 2 u,4 2 u,2 2 T最优解:下、下、下、下 最优解 下 下 下 下 动态规划求解:下、上、上、上 不满足优化原则 不能使用动态规划设计技术 不满足优化原则,不能使用动态规划设计技术4算法设计步骤例3 矩阵乘法: 设A1,A2,…,An为矩阵序列,Ai为Pi-1×Pi阶 矩阵 i = 1,2,…, 矩阵, 12 n. 确定乘法顺序使得元素相乘的总 次数最少. 输入 向量P = <P0, P1, … , Pn> 输入:向量 实例: P = <10, 100, 5, 50> A1: 10 × 100, 100 A2: 100 × 5, 5 A3: 5 × 50, 50 乘法次序 (A1 A2)A3: 10 × 100 × 5 + 10 ×5 × 50 = 7500 A1(A2 A3): 10 × 100 × 50 + 100 × 5 × 50 = 750005一般算法:加括号的方法有 Catalan数1 ⎛ 2n ⎞ ⎟ ⎜ 种, ⎜ n +1⎝ n ⎟ ⎠2n 2n 2π 2n ( ) 1 (2n)! 1 e ) = Ω( ) W (n) = Ω( n n n n n + 1 n! n! n+1 2πn ( ) 2πn ( ) e e3 1 n 22 n n2 n e n e n 2n 2 = Ω( ) = Ω ( 2 / n ) 1 1 n + 1 2n 2 n 2 n e n nn n 1 26递 推方程输入P=< P0, P1, …, Pn> , Ai..j 表示乘积AiAi+1…Aj 的结果, 的结果 其最后一次相乘是 Ai..j = Ai..k Ak+1..j , m[i,j] 表示得到Ai..jj的最少的相乘次数 递推方程i= j ⎧ ⎪0 m[ i , j ] = ⎨ min { m[i , k ] + m[k + 1, j ] + P P P } i < j i −1 k j ⎪ i ≤ k < j ⎩为了确定加括号的次序,设计表s[i,j],记录求得最优时 最后 次运算的位置 最后一次运算的位置7算法1:递 递归算法算法1 RecurMatrixChain(P,i,j P i j)1. m[i,j]←∞ 2. s[i,j]←i 3. for k←i to j−1 do 4. 5. 6. 7. q← RecurMatrixChain(P,i,k) +RecurMatrixChain( (P,k+1, ,j) )+pi−1pkpj if q<m[i,j] then m[i,j]←q s[i,j]←k88 Return m[i,j] 8.递归算法复杂性复杂性满足递推关系⎧ O (1 ) ⎪ T ( n ) ≥ ⎨ n −1 ∑ (T ( k ) + T ( n − k ) + O (1 )) ⎪ ⎩ k =1n−1 n−1 k =1 k =1n=1 n>1n−1T (n) ≥ O (n) + ∑ T (k ) + ∑ T (n − k ) = O (n) + 2 ∑ T (k )k =1数学归纳法证明 T(n)≥ 2n-1 n=2,显然为真 =2 显然为真 假设对于任何小于n的k命题为真, 则T ( n ) ≥ O ( n ) + 2 ∑ T ( k ) ≥ O ( n ) + 2 ∑ 2 k −1k =1 k =1 n −1 n −1= O ( n) + 2( 2 n −1 − 1) ≥ 2 n −19复杂性高的原因原因:子问题重复程度高10算法2:非递归算法算法2 MatrixChain(P ,n )令有的初值算法:非递归算法1.令所有的m [i ,j ]初值为02.for r ←2 to n do // r 为计算的矩阵链长度//for 1to +1do 3.for i ←1 to n −r +1 do //n -r +1为最后r 链的始位置//4.j ←i +r −1// 计算链i —j //5.m i ←m i +1,] + 1**// A A ..A [,j ][,j ]p i -1p i p j //i (i +1j )//6. s [i ,j ]←i //记录分割位置//7. for k ←i +1 to j −1 do8. t ←m [i ,k ]+m [k +1,j ]+ p i -1*p k *p j //(A i ..A k )(A k +1..A j )//9. if t <m [i ,j ]10then t 10. then m [i ,j ]←t 11. s [i ,j ]←k复杂性行237循环内为11复杂性:行2,3,7循环进行都是O (n ),循环内为O (1),W (n )=O (n 3)…8个矩阵A 1A 2A 8相乘的子问题计算16A 1 A 2A 3A 4A 5A 6 A 7A 8r =2r =34r =4r =5r =6r =712r =8P = <30, 35, 15, 5, 10, 20, 25>,例如,,,,,,,解得r =1m [2,2]=0m [3,3]=0m [4,4]=0m [5,5]=0=2[2,3]=2625[3,4]=750[4,5]=1000r 2m [2,3]2625m [3,4]750m [4,5]1000r =3m [2,4]=4375m [3,5]=25004[25]7125r =4m [2,5]=71251300020153525000]5,3[]2,2[521⎧=××++=++p p p m m 1137520103504375]5,5[]4,2[71252053510002625]5,4[]3,2[min ]5,2[541531⎪⎩⎪⎨=××++=++=××++=++=p p p m m p p p m m m 7125=S [2,5]=3 A 2A 3| A 4A 5最终结果:m [1,6] =15125S [1,6] = 3 A 1 A 2 A 3| A 4 A 5 A 6[13]1|13S [1,3] = 1 A 1| A 2 A 3S [4,6] = 5 A 4 A 5| A 6两种算法的比较递归算法:复杂性高非递归算法:复杂性较低原因递归动态规划算法的子问题被多次重复计算子问题计算次数呈指数增长非递归动态规划算法每个子问题只计算一次子问题的计算随问题规模成多项式增长14动态规划算法设计步骤将问题表示成多步判断整个判断序列就对应问题的最优解每步判断对应一个子问题,子问题类型与原问题一样确定优化函数,以函数的极大(或极小)作为判断的依据确定是否满足优化原则-----动态规划算法的必要条件确定子问题的重叠性列出关于优化函数的递推方程(或不等式)和边界条件自底向上计算子问题的优化函数值备忘录方法(表格)存储中间结果设立标记函数s[i,j]求解问题的解15应用实例例4投资问题m元钱,n项投资,f(x): 将x元投入第i项项目的效益元钱项投资)i目标函数max {f(x1) + f2(x2) + … + f n(x n) }1+ x2+ … + x n= m,x i∈N约束条件x+++1实例:5万元钱,4个项目,效益函数如下表所示x f(x)f2(x)f3(x)f4(x)10000011102202125102131310302241415322351520402416算法设计设F k (x ) 表示x 元钱投给前k 个项目的最大效益多步判断假设知道p 元钱(p ≤x )投给前k −1个项目的最大效益决定效益,决定x 元钱投给前k 个项目的分配方案递推方程和边界条件)}()({max )(10x x F x f x F k k k k xx k −+=−≤≤)()(11x f x F k =17备忘录存储与解x F 1(x ) x 1(x )F 2(x ) x 2(x )F 3(x ) x 3(x )F 4(x ) x 4(x )111 111 011 020 1122120131311212 212 013 131 1313 316 230 333 1414 421 341 350 1515 526 443 461 11031(5)6118解x 1=1, x 2=0, x 3=3, x 4=1 F 4(5) = 61例()个旅行者准备随身携带个背包例5 背包问题(Knapsack Problem) 一个旅行者准备随身携带一个背包. 可以放入背包的物品有n 种, 每种物品的重量和价值分别为w j , v j .如果背包的最大重量限制是b , 怎样选择放入背包的物品以使得背包的价值最大?nx v nj jj ∑=1max 目标函数Nx b x w j j j j ∈∑≤=1,约束条件线性规划问题由线性条件约束的线性函数取最大或最小的问题20整数规划问题线性规划问题的变量x j 都是非负整数=1=3=5=9实例v 1= 1, v 2= 3, v 3= 5, v 4= 9,w 1= 2, w 2= 3, w 3= 4, w 4= 7,=10b = 10则F k (y ) 的计算表如下:k y123456789101011223344520133466799301355681010114013556910101222标记函数的计算关于标记函数的递推方程⎨⎧−+−>−=−k k k k V W y F y F y k i y k i )()(),1(),(1⎩+≤−kk k k V W y F y F k)()(1k y 12345678910y 101111111112012222222230123333333234123334344标记函数确定问题的解k y k y 123456789101011111111120122222222301233333334123334344在上例中, 求得i (4,10)=4 ⇒x 4≥1(410)(43)210i (4,10-w 4)=i (4,3)=2 ⇒x 2≥1,x 4=1, x 3=0i (4,3-w 2)=i (4,0)=0 ⇒x 2= 1,x 1=0 24解x 1=0, x 2=1, x 3=0, x 4=11f 1t 求x j 的方法1. for j =1 to n2. x j ←033.y ←b 4. j ←i (n ,y )55.x j ←16. y ←y -w j7hil )j d7. while i (n ,y )=j do y ←y -w j x j ←x j +18. if i (n ,y ) ≠0 goto 425例6例6最长公共子序列LCS 相关概念X 的子序列Z :设序列X , Z ,>=<m x x x X ,...,,21若存在>=<k z z z Z ,...,,21X 的元素构成的严格递增序列使得,则称Z 是X 的子序列><k i i i x x x ,...,,21k j x z i ,...,2,1,==X 与Y 的公共子序列Z :Z 是X 和Y 的子序列jj 26子序列的长度:子序列的元素个数问题给定序列X=<x, x2, … , x m>, Y=<y1, y2, … , y n>1求X 和Y的最长公共子序列X:A B C B D A BY:B D C A B AO(n) 时间,每个子序列)时间X 有2m 个子序列,最坏情况下时间复杂度最坏情况下时间复杂度:O(n2m)27动态规划算法定理:设X=<x,x2,…,x m>, Y=<y1,y2,…,y n>, Z=<z1,z2,…,z k>,1Z 为X 和Y 的LCS,那么(1) 若x m=y n⇒z k=x m=y n,且Z k-1是X m-1与Y n-1的LCS;≠y n, z k≠x m⇒Z是X m-1与Y的LCS;(2) 若x(2),1m(3) 若x m≠y n, z k≠y n⇒Z是X与Y n-1的LCS.满足优化原则子问题重叠: (X,Y)和(X,Y n-1)包含同一子问题(X m-1,Y n-1)m-128递推方程令X Y 与的子序列X i = <x 1, x 2, … , x i >,Y j = <y 1, y 2, … , y j > ]LCS C [i ,j ] X i 与Y j 的LCS 的长度递推方程⎪⎧==j i 000或如果⎪⎩⎨≠>−−=>+−−=ji j i y x j i j i C j i C y x j i j i C j i C ,0,]},1[],1,[max{,0,1]1,1[],[如果如果29算法LCS l th(LCS_ length(X,Y)1. for i←1 to m do//行1-4边界情况// 20]LCS算法输入:2. C[i,0]←03. for i←1 to n do4. C[0,i]←0序列X,Y 输出:5. for i←1 to m do 6.for j←1 to n do 7if]]最长公共子7. if X[i]=Y[j]8. then C[i,j]←C[i−1,j−1]+19.’’序列长度C[m,n]9. B[i,j]←É10. else if C[i−1,j] ≥C[i,j−1]11. then C[i,j]←C[i−1,j]标记B[m,n]复杂性:12. B[i,j]←’↑’13. else C[i,j]←C[i,j−1] 14i j W(mn)=O(mn)S(mn)=O(mn)3014.B[i,j]←’←’LCS (,,)构造解算法LCS (B , i , j ) 1. if i =0 or j =0 then return 2if ]=’’then 2. if B [i ,j ]=’ É’ then 3. 输出X [i ]4. LCS (B ,i -1,j -1)5. else if B [i ,j ]=’↑’ then LCS (B ,i -1,j )6. else LCS (B ,i ,j -1)构造复杂性时间:每一步至少缩小X 或Y 的长度,+,+31执行m n 步,每步使用常数时间, Θ(m n )空间:Θ(mn )例7图像压缩像素点灰度值0∼255,表示为8位二进制数{像素点灰度值序列{ p 1, p 2,…, p n },p i 为第i 个像素点的灰度值变位压缩存储格式将{ p 1, p 2,…, p n }分割成m 段S 1, S 2, … ,S m .第i 段有l [i ]个像素,每个像素有b [i ]位i i b h ,8][⎡≤≤中灰度所需位数用二进制表示i k S p i S p h i k //)1max log(⎥⎥⎤⎢⎢+=∈约束条件限定每段像素个数]约束条件:限定每段像素个数l [i ] 不超过256表示段S i 的总位数=表示每个像素位数b [i ]的二进制数(3 位)+]的二进制数 表示本段像素个数l [i ] 的进制数(8位)+ 本段每个像素的位数×本段像素个数问题给像序确空式32给定像素序列{ p 1, p 2, …, p n },确定空间最小的分段方式实例灰度值序列P={10,12,15,255,1,2,1,1,2,2,1,1}分1{,,}2{},3{,,,,,,,}分法1 S={10,12,15},S={255}, S={1,2,1,1,2,2,1,1}分法2 S={10,12,15,255,1,2,1,1,2,2,1,1}1分法3 分成12组,每组一个数组每组个数存储空间分法1:11×3+4×3+8×1+2×8=69分法2:11×1+8×12=10712107分法3:11×12+4×3+8×1+1×5+2×3=16333算法设计递推方程设s [i ]是像素序列{p 1, p 2, … , p i }的最优分段所需存储位数⎡++−+−=≤≤11)},1max(*][{min ][}256,min{1i k i k i b k k i s i s ⎥⎥⎤⎢⎢+=≤≤)1}{max log(),max(k j k i p j i b P P … P P +1… P 12i-k i-k +1 i S i-k k 34k ∗b max(i -k +1,i )[]位个灰度算法:计算复杂性T(n)=O(n)算法Compress (P,n)//计算最小位数S[n]//1.Lmax←256; header←11; S[0]←0//header每个段附加存贮//256;11;2. for i←1 to n do3. b[i]←length(P[i]) //表示第i个像素灰度的二进制位数//4. bmax←b[i] //3-6行分法的最后一段只有p[i]自己//5. S[i]←S[i-1]+bmax66. l[i]←17. for j←2 to min{i,Lmax} do//最后段j个像素,j=2,…i或2568.if<-+1]统一段内表示像素的二进制位数8. if bmax b[i j+1] //统段内表示像素的二进制位数//9. then bmax←b[i-j+1]10. if S[i]>S[i-j]+j*bmax11. then S[i]←S[i-j]+j*bmax12. l[i]←j13. S[i]←S[i]+header13h d35输入:P=<10, 12, 15, 255, 1, 2>1012152551211+3*4=23 11+2*8=2711+1*2=1323+27+13=631012152551211+3*4=23 11+1*8=19 11+2*2=1523+19+15=57 1012152551211+3*4=23 11+3*8=3523+35=581012152551211+2*4=19 11+4*8=43112*419114*84319+43=62 1012152551211+1*4=15 11+5*8=5115+51=6636求解实例:计算最少的位数求解实例计算最少的位数P 10,12,15,255,1,2,像素灰度值序列P=<10,12,15,255,1,2>S[i]: 对于灰度序列<P[1], …, P[i]>最佳分组的所需位数b: 最后段表示每个灰度值所需要的二进制位数:最后一段表示每个灰度值所需要的二进制位数l:最后一段的像素个数i0123456P10121525512S0151923425057b444882l1231221-341-34-51-345-6策略11-21-31-3,41-3,4-51-3,4,5-637寻找解----分法寻找解分法算法Traceback(n,l)1. j←1 //j为正在追踪的段数2. while n≠0 do3]3. S[j]←l[n] //S存储从后向前的段长度4. j←j+15. n←n l[n].-]算法复杂性:T(n)=O(n)实例:P=<10,12,15,255,1,2>j1234n6430[6]2[4]1[3]3S l[6]=21[4]=1l[3]=338例8最大子段和问题给定例8 最大子段和问题:给定n 个整数(可以为负数)的序列(a 1, a 2, … , a n ) ∑=≤≤≤jik knj i a}max,0max{1求实例:(-2, 11, -4, 13, -5, -2)=20解:最大子段和a 2+a 3+a 4= 20 1算法1---顺序求和+比较算法2---分治策略39算法3---动态规划算法顺序求和比较算法1 顺序求和+比较1. sum←0 // sum为最终输出2. for i←1 to n do3for to3. for j←i to n do4. thissum←0// thissum为a[i]到a[j]之和5. for k←i to j do5.for to6. thissum←thissum+a[k]7. if thissum>sum then8. sum←thissum9. besti←i// 记录最大和的首位置//10.bestj←j// 记录最大和的末位置()复杂性:O n340算法 算法2分治策略将序列分成左右两半,中间分点center 递归计算左段最大子段和 leftsum 递归计算右段最大子段和 rightsum acenter→a1的最大和s1, acenter+1→an的最大和s2 max { leftsum, rightsum, s1+s2} s1+s2 leftsum rightsuma1 a2 …leftak ak+1center…anright41center+1算法2 MaxSubSum算法 MaxSubSum(A, left, right) 1.If |A|=1,则输出元素值(当值为负时输出0) 2.center←(left l f +right i h )/2; )/2 3.leftsum←MaxSubSum(A,left,center) //左和 4.righsum←MaxSubSum(A,center+1, +1 right) //右和 5.s1←A1[center] //从center向左的最大和 6.s2←A2[ [center+1] ] //从center+1向右的最大和 7.sum←s1+s2 8.if leftsum > sum then sum←leftsum 9.if rightsum i h >sum then th sum←rightsum i h 时间:T(n) )=2 2T(n/2) /2)+O(n), T(c) )=O(1) T(n)=O(nlogn)42动态规划算法令b[ j ] = max{ ∑ a[k ] }1≤ i ≤ j k =i jM S MaxSum多步判断: b[i]表示最后一项为a[j]的序列构成的最大的子段和 最优解为b[1], [1] b[2], [2] ..., b[n]中的最大值 a[ [1] ] a[ [2] ] a[ [3] ] … a[j-1] ] a[j] … a[n]最大子段和 b[j-1] 最大子段和 b[j] 递推方程为 b[j]= max{b[j-1]+a[j],a[j]} j=1,2,…,n43算法MaxSum(A,n)MaxSum1. sum←0; b←0 2 for i←1 to n do 2. 3. if b>0 then b←b+a[i] 4. else b←a[i] 5. if b>sum then 6. sum←b 7. c←i //记录最大和的末项标号 8. return sum复杂性 时间:O(n), 空间O(n).44例 例8凸多边形的三角划分问题:给定凸n边形P,用在内部互不相交的n−3 条对角线(弦)将P分割成三角形。

Chapter-4 动态规划

Chapter-4 动态规划

M i r r
i
i 1
1 i n
M i , j M i M i 1 M k 1 M k M k 1 M j 1 M j
C[i , j ] C[ i.k 1] C[ k , j ]
最长公共子序列问题
• 给定两个定义在字符集∑上的字符串A和B,长度分别 为n和m,现在要求它们的最长公共子序列的长度值 (最优值),以及对应的子序列(最优解) 。 • 子序列
A a1a2 an 的一个子序列是形如下式的一个字符串: ai1 ai2 ain ,其中
1 i1 i2 ik n
C[1,3]=320 C[2,3]=240 (M2 M3) C[3,3] =0 (M3)
C[1,4]=620 C[2,4]=640 (M2) (M3M4) C[3,4]=240 (M3M4) C[4,4] =0 (M4)
C[1,5]=348 C[2,5]=248 C[3,5]=168 C[4,5]=120 (M4 M5) C[5,5] =0 (M5)
4n f (n) ( 1.5 ) n
结论:穷举法复杂度太高
南京理工大学
使用动态规划法:
M1 M 2 M3 M n r1 , r2 , r3 ,rn , rn1
Mi, j Mi Mi1 M j 1 M j
C[i, j ] :计算 Mi, j 所需的最小乘法次数。 i 1, j n 时,原问题得解。
f (k ) f ( nk )
f ( n) f ( k ) f ( n k )
k 1
n 1
f (1) 1, f (2) 1, f (3) 2
1 n 1 f ( n ) C2 n 2 n

Pascal动态规划

Pascal动态规划
某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦 截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发 炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统 还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。 输入导弹依次飞来的高度(雷达给出的高度数据是不大于 30000 的正整数), , 计算这套系统最多能拦截多少导弹,并依次输出被拦截的导弹飞来时候的高度。 样例: INPUT 389 207 155 300 299 170 158 65 OUTPUT 6 (最多能拦截的导弹数)
次,然后将其计算结果保存在一个表格中,当再次需要计算已经计算
过的子问题时,只是在表格中简单地查看一下结果,从而获得较高的 解题效率。
动态规划与分治、递归、贪心的区别
• 递归算法在程序实现上直观容易,但因为子问题被重复计算,且程序背后存 在对栈的操作,速度(计算复杂度一般是指数级的)上劣于动态规划。在递 归的过程中,通过保存子问题的结果,可以减少计算量,同样是空间换时间 的思想,称作memoization算法。 分治法要求各个子问题是独立的(即不包含公共的子问题),因此一旦递归地求 出各个子问题的解后,便可自下而上地将子问题的解合并成原问题的解。动 态规划与分治法的不同之处在于动态规划允许这些子问题不独立(即各子问题 可包含公共的子问题),它对每个子问题只解一次,并将结果保存起来,避免 每次碰到时都要重复计算。这就是动态规划高效的一个原因。
题。
求解问题的两个重要性质
• 最优子结构性质:如果问题的最优解所包含的子问题的解也是最优的, 我们就称该问题具有最优子结构性质( 即满足最优化原理 )。最优 子结构性质为动态规划算法解决问题提供了重要线索。 • 子问题重叠性质:在用递归算法自顶向下对问题进行求解时,每次产 生的子问题并不总是新问题,有些子问题会被重复计算多次。动态规 划算法正是利用了这种子问题的重叠性质,对每一个子问题只计算一

五大常见算法策略之——动态规划策略(DynamicProgramming)

五大常见算法策略之——动态规划策略(DynamicProgramming)

五⼤常见算法策略之——动态规划策略(DynamicProgramming)Dynamic Programming Dynamic Programming是五⼤常⽤算法策略之⼀,简称DP,译作中⽂是“动态规划”,可就是这个听起来⾼⼤上的翻译坑苦了⽆数⼈,因为看完这个算法你可能会觉得和动态规划根本没太⼤关系,它对“动态”和“规划”都没有太深的体现。

举个最简单的例⼦去先浅显的理解它,有个⼤概的雏形,找⼀个数组中的最⼤元素,如果只有⼀个元素,那就是它,再往数组⾥⾯加元素,递推关系就是,当你知道当前最⼤的元素,只需要拿当前最⼤元素和新加⼊的进⾏⽐较,较⼤的就是数组中最⼤的,这就是典型的DP策略,将⼩问题的解保存起来,解决⼤问题的时候就可以直接使⽤。

刚刚说的如果还是感觉有点迷糊,不⽤慌,下⾯⼏个简单的⼩栗⼦让你明⽩这句话的意思。

第⼀个数是1,第⼆个数也是1,从第三个数开始,后⾯每个数都等于前两个数之和。

要求:输⼊⼀个n,输出第n个斐波那契数。

还是我们上节讨论递归与分治策略时候举的第⼀个例⼦——Fibonacci数列问题,它实在太经典了,所以将其反复拿出来说。

我们如果深⼊分析⼀下上节说过的递归⽅法解决Fibonacci数列,就会发现出现了很多重复运算,⽐如你在计算f(5)的时候,你要计算f(4)和f(3),计算f(4)⼜要计算(3)和f(2),计算f(3),⼜要计算f(2)和f(1),看下⾯这个图对f(3)和f(2)进⾏了重复运算,这还是因为5⽐较⼩,如果要计算f(100),那你可能要等到天荒地⽼它还没执⾏完(⼿动滑稽),感兴趣的朋友可以试试,反正我已经试过了。

public static int fibonacci(int n){//递归解法if(n == 1) return 1;else if(n == 2) return 1;else return fibonacci(n - 1) + fibonacci(n - 2);}上⾯就是递归的解法,代码看着很简单易懂,但是算法复杂度已经达到了O(2^n),指数级别的复杂度,再加上如果n较⼤会造成更⼤的栈内存开销,所以⾮常低效。

动态规划算法

动态规划算法

动态规划百科名片动态规划算法通常用于求解具有某种最优性质的问题。

在这类问题中,可能会有许多可行解。

每一个解都对应于一个值,我们希望找到具有最优值的解。

动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。

与分治法不同的是,适合于用动态规划求解的问题,经分解得到子问题往往不是互相独立的。

若用分治法来解这类问题,则分解得到的子问题数目太多,有些子问题被重复计算了很多次。

如果我们能够保存已解决的子问题的答案,而在需要时再找出已求得的答案,这样就可以避免大量的重复计算,节省时间。

我们可以用一个表来记录所有已解的子问题的答案。

不任何思想方法都有一定的局限性,超出了特定条件,它就失去了作用。

同样,动态规划也并不是万能的。

适用动态规划的问题必须满足最优化原理和无后效性。

在编程中常用解决最长公共子序列问题、矩阵连乘问题、凸多边形最优三角剖分问题、电路布线等问题。

记忆化搜索给你一个数字三角形,形式如下:12345678910找出从第一层到最后一层的一条路,使得所经过的权值之和最小或者最大.无论对与新手还是老手,这都是再熟悉不过的题了,很容易地,我们写出状态转移方程:f(i,j)=a[i,j]+min{f(i+1,j),f(i+1,j+1)}对于动态规划算法解决这个问题,我们根据状态转移方程和状态转移方向,比较容易地写出动态规划的循环表示方法。

但是,当状态和转移非常复杂的时候,也许写出循环式的动态规划就不是那么简单了。

解决方法:我们尝试从正面的思路去分析问题,如上例,不难得出一个非常简单的递归过程:f1=f(i+1,j+1);f2=f(i+1,j);不可控因素在前面的例子中,第一个阶段有一个状态即A,而第二个阶段有两个状态B1和B2,第三个阶段是三个状态C1,C2和C3,而第四个阶段又是一个状态D。

过程的状态通常可以用一个或一组数来描述,称为状态变量。

算法设计的基本方法

算法设计的基本方法

算法设计的基本方法
算法设计的基本方法包括以下几个方面:
1. 分治法(Divide and Conquer):将一个大规模的问题分解成若干个规模较小的子问题,分别解决这些子问题,然后将子问题的解合并,得到原问题的解。

2. 动态规划法(Dynamic Programming):将原问题分解成相互重叠的子问题,通过保存子问题的解,避免重复计算,从而逐步求解原问题。

3. 贪心法(Greedy Method):每一步都选择当前状态下最优的解,没有考虑全局的最优解,但是在某些情况下能够得到全局的最优解。

4. 回溯法(Backtracking):通过尝试所有可能的解,以深度优先搜索的方式在问题空间中搜索解。

5. 枚举法(Enumeration):逐个枚举问题的所有可能解,从中选出满足条件的最优解。

6. 分支界定法(Branch and Bound):通过递归地划分问题的解空间,并估计每个子问题的下界,剪枝掉一些不可能产生最优解的子问题。

dp11

dp11
算法复杂度分析: 算法复杂度分析: 对于n个矩阵的连乘积,设其不同的计算次序为P(n)。 由于每种加括号方式都可以分解为两个子矩阵的加括号问题: (A1...Ak)(Ak+1…An)可以得到关于P(n)的递推式如下:
1 n =1 n −1 P (n) = ⇒ P (n) = Ω (4 n / n 3/ 2 ) P (k ) P (n − k ) n > 1 ∑1 k=
A, B, C , D ,它们的维数分别是:
A = 50 × 10 B = 10 × 40 C = 40 × 30 D = 30 × 5
总共有五中完全加括号的方式
( A(( BC ) D )) ((( AB )C ) D )
( A( B (CD ))) (( A( BC )) D )
(( AB )(CD ))
int j=i+r-1; m[i][j] = m[i+1][j]+ p[i-1]*p[i]*p[j]; s[i][j] = i; for (int k = i+1; k < j; k++) { int t = m[i][k] + m[k+1][j] + p[i-1]*p[k]*p[j]; if (t < m[i][j]) { m[i][j] = t; s[i][j] = k;} } } }
=
n
n/2
n/2
n/2
T(n/4)T(n/4)T(n/4)T(n/4) T(n/4)T(n/4)T(n/4)T(n/4) T(n/4)T(n/4)T(n/4)T(n/4) T(n/4)T(n/4)T(n/4)T(n/4) T(n/4)T(n/4) T(n/4)T(n/4) T(n/4)T(n/4) T(n/4)T(n/4)T(n/4)T(n/4) T(n/4)T(n/4)T(n/4)T(n/4) T(n/4)T(n/4)T(n/4)T(n/4) T(n/4)T(n/4)T(n/4)T(n/4) T(n/4)T(n/4)

深度强化学习求解流程

深度强化学习求解流程

深度强化学习求解流程1.首先,我们需要定义问题并确定环境。

First, we need to define the problem and determine the environment.2.然后,我们需要选择合适的深度强化学习模型。

Next, we need to choose an appropriate deep reinforcement learning model.3.接着,我们要设计合适的奖励函数。

Then, we need to design a suitable reward function.4.在完成模型设计后,还需要对模型进行训练。

After the model design is completed, the model needs to be trained.5.训练后的模型需要进行测试和评估。

The trained model needs to be tested and evaluated.6.根据测试结果,我们需要对模型进行调整和优化。

Based on the test results, we need to adjust and optimize the model.7.完成模型优化后,我们还需要进行进一步的测试和评估。

After optimizing the model, further testing andevaluation are needed.8.最终,我们需要将模型部署到实际环境中进行应用。

Finally, we need to deploy the model for application inthe actual environment.9.深度强化学习求解流程需要谨慎设计和严格执行。

The process of solving deep reinforcement learningrequires careful design and strict execution.10.每个步骤都需要认真对待,以确保最终结果的准确性和可靠性。

硬件工程师的项目开发学习计划

硬件工程师的项目开发学习计划

硬件工程师的项目开发学习计划English Answer:1. Core Concepts and Fundamentals.Understand the principles of electrical engineering and electronics.Develop a strong foundation in circuit theory, digital logic, and microcontroller architecture.Gain proficiency in using simulation tools and software for hardware design.2. Hardware Design and Development.Learn the process of designing and developing electronic hardware systems.Understand the different types of electroniccomponents and their applications.Develop skills in PCB layout and design usingindustry-standard tools.3. Embedded Systems.Study the principles of embedded systems and their applications.Learn how to interface with sensors, actuators, and other peripherals.Gain experience in embedded software development using C/C++ and assembly languages.4. Power Electronics.Understand the principles of power conversion and distribution.Design and implement power supplies, converters, andother power electronics circuits.Develop skills in power electronics analysis and simulation.5. Wireless Communication.Study the fundamentals of wireless communication systems.Learn about different types of wireless technologies and their applications.Gain experience in designing and implementing wireless circuits and systems.6. Project Development.Work on real-world hardware projects from concept to implementation.Develop skills in project planning, design, testing,and documentation.Learn how to collaborate with other engineers and stakeholders.7. Advanced Topics.Explore advanced topics in hardware engineering, such as:FPGA and ASIC design.Signal processing.High-frequency circuit design.Advanced embedded systems.Chinese Answer:1. 核心概念和基础。

是一种解问题的方法及技巧大致是:将一个大问题

是一种解问题的方法及技巧大致是:将一个大问题

Dynamic ProgrammingDynamic Programming 是一種解問題的方法及技巧。

大致是:將一個大問題切割成若干小問題,recursive 地解決各個小問題( 並將其解以一種table 儲存起來“tabular method”) ,然後再利用這些“小問題”之解答,回來解決原本的大問題。

它與divide and conquer 有點不太一樣,等一下看了幾個例子再體會其差異( page 385 Figure 15.7 之例可看出差異)。

例: shortest path problem ( multistage graph )找s 到t 之shortest path若用dynamic programming方式解之如下: ( Forward Approach )於是就找到由s到t 之最短路徑( 如何“讀”出來? )以下用數學式子寫出上面的recursive 想法:P i(j) = min cost path from vertex j ( in stage i ) to vertex t.Cost i(j) = 上述path之cost ( 總distance )這叫define the optimal value functionrecursive relation 或( recurrence relation ) :Cost i(j) = min l∈stage i+1{d(j , l) + Cost i+1(l)}initial condition ( 或稱boundary condition)假設共有k個stage (s在第1 stage t 在第k stage)Cost k-1(j) =而Answer : Cost1(s)time complexity : O( |V|+|E| )space complexity : 作table 儲存Cost i(j) → O( |V| )但input 需O( |V| + |E| )有了以上的數學式子,顯示出dynamic Programming 想法再下去才可著手程式的大鋼(註: 等一下會說明“程式”絕不能寫成recursive 程式)dynamic Programming 有時也可用一種 backward approach 圖示如下 :也可類似define 及寫出 optimal value function ,recursive relation ,boundary condition ,answer ,time 及 space complexity.Define P i (j) = a shortest path from vertex s to vertex j (in stage i)BCost i (j) = 上述path 之cost (總distance)Recursive solution :BCost i (j) = 1min −∈i stagel { BCost i-1(l) + d(l, j) } k..., 3,4,5, i i stage j =∈∀initial condition :BCost i (j) = edge j) (s, ),( {這一個若有若無j s d ∞Anser BCost k (t)同樣在計算過程中,要在table 中記錄下在每一個state vertex 應作的 Optional )由s到此點之最短路徑長Time complexity ?Space complexity ?同樣在實際implement程式時,除了要適當的data structure外也是不可以recursive程式來作,必須以iterative方式用一種“table”儲存資料,以供後面重覆讀取資料(等一下再看幾個例子再說明)一個簡化的Knapsack problem: (就是課本p. 360 的 rod cutting problem) 有n items 各具重量 分別是 1, 2, 3, 4, 5, … n 各有profit p 1, p 2 p 3 p 4 p 5 p n 有一個 knapsack 能載重 n (n 是integer )目標: 在載重範圍內,儘量拿取item ,同一樣東西可以重複拿取,希望所獲 得的profit 越大越好。

动态规划P1F2

动态规划P1F2

分析
• 算法一: 枚举2n个子集合, 再计算, 枚举2n, 计 算n, 共n2n • 算法二: 采用递归枚举, 共2n • 算法三: 先考虑一半元素, 保存2n/2个和. 再考 虑后一半元素, 每计算出一个和w, 查找重量 <=c-w的元素中价值的最大值. 下面考虑实现细节
算法三
• 前一半元素的2n/2个和按重量从小到大排序后放在表a
分析
• 设d[i,j]为背包容量为j时, 只考虑前i个物品时 的最大价值和
– 如果装第i个物品, 背包容量只剩j-wi – 如果不装, 背包容量不变
• 因此d[i,j]=max{d[i,j-wi]+vi, d[i-1,j]} • 状态有nc个, 每个状态决策只有两个, 因此总 时间复杂度为O(nc). 用滚动数组后, 空间复 杂度只有O(c)
相关练习
• NKOJ 1542 采药 • NKOJ 1901 Candies Distribution
动态规划 Dynamic Programming
Part 1 First Day 2 2008.8
• 本讲稿内容来自刘汝佳《算法艺术与信息 学竞赛》标准课件动态规划部分
0-1背包问题
• 给定n种物品和一个背包,物品i的重量是wi, 价值是vi, 背包容量为c • 对于每个物品,要么装背包,要么不装 • 选择装背包的物品集合,使得物品总重量 不超过背包容量c, 且价值和尽量大
里. 对于任何两个和i, j, 如果wi<wj且vi>vj, 则j是不需要 保存的, 因此按重量排序好以后也是按价值排序的 • 考考虑后一半元素时, 每得到一个重量w, 用二分查找 得到重量不超过c-w的最大元素, 则它的价值也最大. • 预处理时间复杂度2n/2log2n/2, 每个重量w二分查找时 间为log2n/2, 因此总2n/2log2n/2=O(n1.44n)

基于混合测距的二阶锥规划节点定位算法

基于混合测距的二阶锥规划节点定位算法

基于混合测距的二阶锥规划节点定位算法孙莹莹;张飞【摘要】针对无线传感网络(wireless sensor networks,WSNs)的三维未知定位问题,提出一种基于接收信号强度(received signal strength,RSS)和到达角度(angle of arrival,AoA)的二阶锥规划节点定位(RSS and AoA-based second-order cone programming target localization,R-S-SOCP)算法.通过接收信号强度和到达角模型,获取距离和角度测量值,引用最大似然(maximum likelihood,ML)估计节点的位置,利用二阶锥规划(second-order cone programming,SOCP)将ML估计转换成SOCP优化问题,利用CVX求解节点位置.实验数据表明,与WANG和SDPRss算法相比,R-S-SOCP算法定位误差下降近15%至20%.【期刊名称】《计算机工程与设计》【年(卷),期】2018(039)007【总页数】5页(P1841-1845)【关键词】无线传感网络;节点定位;接收信号强度;到达角度;最大似然;二阶锥规划【作者】孙莹莹;张飞【作者单位】国网河南省电力公司驻马店供电公司,河南驻马店463000;黄淮学院信息工程学院,河南驻马店463000【正文语种】中文【中图分类】TP3930 引言受硬件条件和无线环境因素的制约,在WSNs中对传感节点的定位仍是一项挑战的工作[1-4]。

至今,研究人员已提出多类定位算法[5,6],依据定位过程是否需要测距,现存的定位算法归属为基于测距或非测距。

与非测距定位算法相比,基于测距定位算法的精度较高。

在基于测距定位算法中,通常依据信号的相关参数获取距离,如到达时间(time of arrival,ToA)、到达角度(angle of arrival,AoA)[6,7]以及信号强度(received signal strength,RSS)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

INPUT: A sequence X = xl . . . . , x,~ of integers OUTPUT: A longest increasing subsequence of X
So if A" = 12, 13, 23, 24, 16, 17, 18, 14, 15, 19, the output would be 12, 13.16, 17, 18, 19. Let. L I S ( k ) be a longest increasing subsequence of Xl . . . . . x~.. The most obvious way to design a recursive algorithm for the LIS problem would be to inductively compute L I E ( k ) from L I S ( k - 1) and art.. However, it is not te difficult to see that knowirg L I S ( k - 1) and :r~ is insufficient information to compute L I S ( k ) . The standard fix is to ,ctrengthen the indnctive hypothesis, that is, assume that the recursire call returns more information than L I S ( k - 1). Eventually. one reaches the conclusion that one may
else HS(t,, ~') = LI,S'(t, - 1, ~')
As is standard, we will omit tile code for initializing the data structures, and for determining the actual longest increasing subsequence from final filled-in data. structure. Many of my students are still quite uncomfortable with recursion. For those that are comfortable with with recursion, the most difficult task seems to be identifying tile additional information that needs to be added to the next a t t e m p t at an inductive hypothesis ~!hen the previous inductive hypothesis fails. For example, in the LIS problem it= is a big leap from the initia~ naive inductive hypothesis to realizing that one should remember a linea.r lmmber of subsequences. We give a method, which we call the Pruning Method, for designing dynamic programming algorithms that does not require t.he algorithm designer tc
A b s t r a c t : We describe a method, which we call the Pruning Method, for designing dynamic programruing algorithms that does not require the algorithm designer t.o be comfortable with recursion.
need to return up to k subsequences of xl, . . . , xk-~ in order to compute the longest increasing subsequence of x l , . . . , xk from this inductive information and .r~.. Essentially the idea is that shorter subsequences that end in smaller numbers might be preferable, to longer subsequences that end in larger numbers, since they are easier to extend. As shown in [3], it is sufficient to remember the subsequence of each length that ends in the smallest last number. Let L I S ( k , C) be the smallest last number of a subsequence of length g of x , , . . . , x k . One can then compute L I E ( k , ( ) recurslve!y in the following maimer: If L I E @ - 1, g - 1) < .el,. then L I S ( k , f) = m i n ( L I S ( k - 1, ~), .ek) else L I S ( k , g) = L I S ( k " - 1, g) This leads to the following code: F o r k = 1 to n do For g = 1 t o n d o If LI.5'(k - 1, g - 1) < x~. then L I S ( k , g) = m i n ( L I S ( k - 1, ~), xk)
1
Introduction
In teaching algorithms courses, dynamic programruing is the topic that maximizes the ratio of my students' perceived difficulty of the topic to my perceived difficulty of the topic. Most of the standard textbooks (e.g. [1, 2, 3, 5]) on algorithms offer the following strategy for designing a dynamic programruing algorithm for an optimization problem P: i. Find a recursive algorithm/formula/property that computes/defines/characterizes the optimal solution to an instance of'P. 2. Then determine how to eompu':.e an optimal solution in a b o t t o m - u p iterative manner. My students experience great difficulty with devising a recursive algorithm when the inductive hypothesis has to be strengthened. As an example, consider the following Longest Increasing Subsequence (LIS) Problem:
32
be comfortable with recursion. Tile Pruning Method is most obviously applicable if ttie underlying structure of the feasible solutions are subsets, or subsequences, including paths in a graph. Note that this includes well over half of the problems in the stan(lard introductory algorithms texts. We illustrate this m e t h o d using the longest increasing subsequence problem, and the standard single source shortest path problem. \Ve offer the following general guidelines for designing a d y n a m i c p r o g r a m m i n g algorithm using the Pruning Method: 1. State the problem as a optimization problem so that the feasible solutions are subsets, subsequences, or paths. 2. Consider the standard enumeration tree where the collection of all feasible solutions are the leaves of this tree. 3. Determine how t.o prune redundant/unnecessary nodes from this tree. 4. Develop an iterative algorithm that generates the information in this tree level by level fl'om the root to the leaves.
相关文档
最新文档