汤泽.ppt

上传人:本田雅阁 文档编号:3209827 上传时间:2019-07-31 格式:PPT 页数:31 大小:349.51KB
返回 下载 相关 举报
汤泽.ppt_第1页
第1页 / 共31页
汤泽.ppt_第2页
第2页 / 共31页
汤泽.ppt_第3页
第3页 / 共31页
汤泽.ppt_第4页
第4页 / 共31页
汤泽.ppt_第5页
第5页 / 共31页
点击查看更多>>
资源描述

《汤泽.ppt》由会员分享,可在线阅读,更多相关《汤泽.ppt(31页珍藏版)》请在三一文库上搜索。

1、从一类单调性问题看算法的优化,长沙市一中 汤泽,充分挖掘数据关系,灵活运用数据结构,往 往是构造出优秀算法的关键因素 一般队列: 一端插入,另一端删除 特殊队列: 尾端插入,两端删除 单调性: 帮助优化一类单调性问题,问题1 锯木厂选址,2=N=20000,1=Wi=10000,1=Di=10000,问题1 锯木厂选址,最优方案中,锯木厂必定建在有树的位置,问题1 锯木厂选址,问题1 锯木厂选址,分析: CI: 在第I棵树处建立一个锯木厂,并且将第1到第I棵树全部运到这个锯木厂所需的费用 WJ,I: 在第I棵树处建立一个锯木厂,并且将第J+1到第I棵树全部运往这个锯木厂的费用,问题1 锯木厂选

2、址,分析: FI表示在第I棵树处建立第二个锯木厂 的最小费用,则:,这个算法的时间复杂度为O(N2),问题1 锯木厂选址,问题1 锯木厂选址,证明: 令SK,I表示决策变量取K时FI的值 设K1K2I, SK1,I-SK2,I0,问题1 锯木厂选址,证明: 设K1K2I, SK1,I-SK2,I0 令gK1,K2=上面不等式的左边 因为DK 0,因此Sd序列不下降,因此决策是单调的!,问题1 锯木厂选址,分析: 维护一个特殊队列K,K1K2Kn, gK1,K2gK2,K3gKn-1,Kn: 计算状态FI前,若gK1,K2=SdI,表示决策K1不比K2优,删除K1,重复该步骤,问题1 锯木厂选址

3、,分析: 计算FI, FI=CK1+WK1,I+WI,n+1 若gKn-1,KngKn,I, SdIgKn-1,KngKn,I Kn比Kn-1优之前I就将比Kn优, 删除Kn,重复该步骤, 最后将I插入队列 算法总复杂度O(N),问题2 旅行问题,问题描述: 一个环形跑道上有n个加油站,按顺时针编号 为1到n(3n106) 第i号加油站有Pi(0=Pi109)升汽油, 每升汽油可供行驶一千米 第i号车站到其下一站的距离为Di (0di109),问题2 旅行问题,一个例子: N=5 P1=3; D1=1 P2=1; D2=2 P3=5; D3=2 P4=0; D4=1 P5=5; D5=4,3,

4、1,5,0,5,1,2,2,1,4,问题2 旅行问题,一个例子: N=5 P1=3; D1=1 P2=1; D2=2 P3=5; D3=2 P4=0; D4=1 P5=5; D5=4,S=3,S=3,S=6,S=4,S=8,S=2,S=1,S=4,S=3,S=4,以1号加油站为起点,问题2 旅行问题,一个例子: N=5 P1=3; D1=1 P2=1; D2=2 P3=5; D3=2 P4=0; D4=1 P5=5; D5=4,S=1,以2号加油站为起点,S=-1,问题2 旅行问题,一个例子: N=5 P1=3; D1=1 P2=1; D2=2 P3=5; D3=2 P4=0; D4=1 P5

5、=5; D5=4,S=1,S=0,S=-1,以2号加油站为起点,S=3,问题2 旅行问题,一个例子: N=5 P1=3; D1=1 P2=1; D2=2 P3=5; D3=2 P4=0; D4=1 P5=5; D5=4,以1、3、5号加油站为起点有办法周游一圈,算法 一,分析: 直接模拟刚刚的演算过程 总的时间复杂度为O(N2) 但是N最大可以达到106!,太慢了!,算法 二,分析: 假定只能按顺时针方向行驶. 令AI=PI-DI AI+N=AI A0=0 设SAI表示A序列中前I项的和,算法 二,算法 二,分析: SAI到SAI+N-1都不小于SAI-1 SAI到SAI+N-1中的最小数不小

6、于SAI-1 求N个数中的最小数,很自然地想到了堆!,算法 二,堆中不超过N个元素 2N次插入操作 2N次删除操作 N次取堆顶元素 总复杂度O(NLog2N),算法 三,分析: 给定一个序列SA和N个区间 求出每个区间中的最小值,对其作相应判定 这是一个标准的RMQ问题! 时间复杂度降为O(N),SA: 0 2 1 4 3 4 2 1 4 3,算法 四,分析: 给定的N个区间不存在包含关系,满足单调性!,0 1 2 3 4 5 6 7 8 9 Sa: 0 2 1 4 3 4 2 1 4 3,K:,2,2,7,7,7,同样满足单调性?,算法 四,预处理: 维护一个特殊队列K, K1K2Kn Sak1Sak2SaKn 将1,2n-1依次插入队列K.插入前,如果Sai=Sakn,将Kn删除.反复该步骤,最后将i插入队列,算法 四,求解并更新K: 若K1=i-1,将K1删除出队列 插入新位置号i+n-1, 若SaKn=Sai+n-1, 删除Kn,重 复这个步骤,最后将i+n-1作为Kn插入队列 若Sak1=Sai-1,表示从i号加油站出发可以周游一周 总复杂度O(N),四个算法比较,总 结,通过充分挖掘数据关系,发现隐含的单调性, 以较低的编程复杂度成功地实现了算法的优 化 注意问题的特殊性 学会灵活变通,总 结,善于发现,勇于创新,谢谢大家!,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1