Archive for October, 2009

DP后效性


23 Oct

后效性 顾名思义,就是指 到当前A状态的决策会限制今后(包含A状态的)状态B能够做的决策

举个例子:
数塔问题变种
同样是数塔,在向下走的规则上有一定改动——允许且仅允许一次从该层的某位置转移到下一层的任意位置,其他地方的规则不变
我们在尝试写DP方程时遇到了问题
原数塔问题是d[i][j]=max{d[i-1][j],d[i-1][j-1]}+num[i][j];
但是。。规则说允许一次从该层的某位置转移到下一层的任意位置,如果d[i-1][j]以及之前的决策中已经使用过了任意转移的机会,那么这次转移就不能再使用了(d[i-1][j-1]是同样的)。反过来,如果还没有使用机会,那么这次转移就可以考虑一下是否使用。。问题就在这儿!我们单单从d[i-1][j]是看不出它到底用没用机会。如果使用原方程,就会出现错误,这就是后效性。 d[i-1][j]时的决策影响到了d[i][j]的某决策是否可以考虑。

那么,解决办法是什么呢?

1.记录决策:

记录以前作的决策,然后就能够知道当前状态可以考虑的决策数
很遗憾,这个方法是错的。。
仔细想想就会明白,这个不符合最优子结构了
等于说是“逼着”后面状态去迁就前面的状态
实质上没有取消后效性。(仅仅明确了当前受限制后的决策是什么。。但是后效性没有任何消除)

2.增加维数

既然我们不能“逼着”后面状态作抉择,那么我们就应该给它选择的余地。

其实后效性来源就是对状态的描述不够细致到位,因此扩大维数即可

用d[i][j][0]表示从(i,j)处走下去且路径上都不使用任意转移
d[i][j][1]表示从(i,j)处走下去且路径上会存在使用任意转移
那么显然 d[i][j][0]转移与原方程一致
d[i][j][1]=max{d[i-1][j][1]/*把机会让给从d[i-1][j]*/,d[i-1][j-1][1] /*把机会让给从d[i-1][j-1]*/,S /*使用这次机会*/}
S=所有d[i-1][x]和

关于子图和缩点以及物理受力分析


06 Oct

NOIP2007树网的核中需要计算图中到子图的最短距离最长的结点

方法是将子图中的边给删去 然后分别从子图的结点去寻找最短距离最长点

由于此题图是树状结构,故最短距离就是两结点距离

关于子图和其他节点的关系:

定理:在讨论子图整体和其他节点关系时可以忽略其内部节点间的边关系

理解方法1:可以这样考虑,假设已经访问到了子图中的一个节点,那么已经算是访问到了这个子图了,完全没有必要再在子图内部进行转移!这另我不由得想到了物理受力分析时的“整体法”。大意是如果把几个物体看作一个整体,那么就可以忽略他们之间的内部的力的情况。和图论的是神似阿!

岂止是神似!图论是一个强大模型。。其实物理受力模型完全就可以进行图论建模来解决,用节点表示物体(质点),用节点间两个有向边表示施力和受力关系(两个是因为力的相互性),那么整体法不就是将一些节点弄成子图来讨论吗?!

理解方法2:可以这样考虑,由于讨论的是子图整体和其他节点的关系,完全可以将子图看成一个点,这就是“缩点”。既然全部缩成一个点,那么原子图内节点间的关系就没有意义了,可以忽略。另外,虽然说缩成一个点,但是在图结构上是几个点,那几个点就是子图的“大点”的分身。。当研究这个“大点”也就是子图整体和外部结点的关系时,相当于分别研究各个分身和外部的关系。 (more…)

Teddy

Studies,OI and Love