欢迎来到天天文库
浏览记录
ID:20141892
大小:218.58 KB
页数:4页
时间:2018-10-09
《动态规划的关键算法》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、动态规划的关键算法Mf1432075许耀峰组号:201.背景介绍1.1PostgresSQL中的动态规划算法所谓基于代价的动态规划算法,就是穷举所有可能的查询的可执行的方法,估算它们的代价,找出一个代价嘴角的来执行,这是物理层次的优化。在PostgresSQL中,基于代价的动态规划算法应用在物理查询优化阶段求解最优的多表连接路径。1.2物理查询优化在查询优化器实现的早期,使用的是逻辑优化技术,即使用关系代数规则和启发式规则对查询进行优化后,认为生成的执行计划就是最优的。在引入了基于代价的查询优化方式后,对查询执行计划做了定量的分析,对每一个可能的执行方式进
2、行评估,挑出代价最小的作为最优的计划。目前,数据库的查询优化器通常融合了这两种方式。2.多表连接查询多表连接算法实现的是在查询路径生成的过程中,根据代价估算,从各种可能的候选路径中找出最优的路径(最优路径是代价最小的路径)。多表连接算法需要解决两个问题:(1)多表连接的顺序:表的不同的连接顺序,会产生许多不同的连接路径;不同的连接路径有不同的效率。(2)多表连接的搜索空间:因为多表连接的顺序不同,产生的连接组合会有多种,如果这个组合的数目巨大,连接次数会达到一个很高的数量级,最大可能的连接次数是N!(N的阶乘)2.1多表连接顺序多表间的连接顺序表示了查询计
3、划树的基本形态。一棵树就是一种查询路径,SQL的语义可以由多棵这样的树表达,从中选择花费最少的树,就是最优查询计划形成的过程。而一棵树包括左深连接树、右深连接树、紧密树3种形态。另外,即使是同一种树的生成方式,也有细节需要考虑。在图3-1a中,{A,B}和{B,A}两种连接方式花费可能不同。比如最终连接结果是{A,B,C},但是需要验证是{A,B,C}、{A,C,B}、{B,C,A}、{B,A,C}、{C,A,B}、{C,B,A}中哪一个连接方式得到的结果,这就要求无论是哪种结果,都需要计算这6种连接方式中每一种的花费,找出最优的一种作为下次和其他表连接的
4、依据。人们针对以上树的形成、形成的树的花费代价最少的,提出了诸多算法。树的形成过程,主要有以下两种策略:(1)至顶向下。从SQL表达式树的树根开始,向下进行,估计每个结点可能的执行方法,计算每种组合的代价,从中挑选最优的。(2)自底向上。从SQL表达式树的树叶开始,向上进行,计算每个子表达式的所有实现方法的代价,从中挑选最优的,再和上层(靠近树根)的进行连接,周而复始直至树根。1.2常用的多表连接算法表与表进行连接,对多表连接进行搜索查找最优查询树,通常有多种算法,比如启发式、分枝界定计划枚举、爬山法、动态规划、SystemR优化方法等。2.动态规划算法3
5、.1简介20世纪40年代,RichardBellman最早使用了动态规划这一概念,用以表述通过遍历寻找最优决策解问题。“动态规划”(dynamicprogramming)中的programming来自“数学规划”(mathematicalprogramming,又称规划),与“计算机编程”(computerprogramming)中的programming没有关系。规划的含义是指生成活动的优化策略,规划意味着找到一个可行的活动计划。动态规划,是指决策依赖于当前状态,又随即引起状态的转移,一个决策序列就是在变化的状态中产生出来的,这就是“动态”的含义。“动态
6、规划”将待求解的问题分解为若干个子问题(子阶段),按顺序求解子问题,前一子问题的解为后一子问题的求解提供了有用的信息。在求解任一子问题时,列出各种可能的局部解,通过决策保留那些有可能达到最优的局部解,丢弃其他局部解。依次解决各子问题,最后一个子问题就是初始问题的解。2.2动态规划的概念i.阶段。把求解问题的过程分成若干个相互联系的阶段,以便于求解。在多数情况下,阶段变量是离散的。ii.状态。表示每个阶段开始面临的自然状况或客观条件,它不以人们的主观意志为转移,也称为不可控因素。iii.无后效性。状态应该具有的性质,如果给定某一阶段的状态,则在这一阶段以后过
7、程的发展不受这阶段以前各段状态的影响。iv.决策。一个阶段的状态确定后,从该状态演变到下一阶段某个状态的选择(行动)称为决策。v.策略。由每个阶段的决策组成的序列称为策略。对于每一个实际的多阶段决策过程,可供选取的策略有一定的范围限制,这个范围称为允许策略集合。允许策略集合中达到最优效果的策略称为最优策略。vi.最优化原理。如果问题的最优解所包含的子问题的解也是最优的,就称该问题具有最优子结构,即满足最优化原理。最优化原理实际上是要求问题的最优策略的子策略也是最优的。2.3动态规划的具体实现在数据库领域,动态规划算法主要解决的是多表连接的问题。动态规划算法
8、是从底向上进行的,即从叶子(单个表)开始算作一层,然后由底层开始对
此文档下载收益归作者所有