[研究总结]ACM中一类基于Markov链模型的期望问题
Abstract
本文要讨论的是一类期望问题的解,基于以下限制:
1.状态空间为一有限集合S。
2.转移F:S->S是从S到S的一个映射,且该映射存在环。或者说将S画做一张图,任一状态s∈S对应图中一个点,则F为图的一个有向边集,且该图存在环。
3.转移的代价C(F)为一个常量c(通常c=1)。或者说对于上面的图,任一条边的权为c。
4.求从某一状态ss至另一状态st的代价期望。
Body
水平粗浅,成文仓促,欢迎指正。
本文不做概念普及,请对着tag翻wikipedia。
本文要讨论的是一类期望问题,基于以下限制:
1.状态空间为一有限集合S。
2.转移F:S->S是从S到S的一个映射,且该映射存在环。或者说将S画做一张图,任一状态s∈S对应图中一个点,则F为图的一个有向边集,且该图存在环。
3.转移的代价C(F)为一个常量c(通常c=1)。或者说对于上面的图,任一条边的权为c。
4.求从某一状态ss至另一状态st的代价期望。
5.(任意s∈S,s的出边概率和为1,当然这是概率论的基本条件)
这样说比较抽象,还是举两个题:
POJ2096 Collecting Bugs
题意大概是说一个人找程序bug,每天找一个。bug有两种属性:Category和Subcomponents,因此一种bug可以描述为(c,s)。共有C个Category与S个Subcomponents。此人每天发现的bug的属性分布是随机的,即任一种bug(c,s)等可能被发现。问他发现的所有bug覆盖所有C个Category与S个Subcomponents的期望天数。
对于此题我们设状态sta=(c,s)表示此人发现的bug覆盖了c个Category及s个Subcomponents。则状态空间S为sta的所有可能取值共(c+1)*(s+1)个元素。容易知道sta=(c,s)可以转移到(c,s),(c,s+1),(c+1,s),(c+1,s+1),转移代价为1。起始状态ss=(0,0),终止状态st=(C,S)。
TopCoder SRM488 Div1 250
题意大概是说有两个无聊的人A与B和另外N+M个人,其中N个人不无聊,M个人无聊。每小时A和B任选这n+m个人中两个人(a,b)聊天,任意有序数对(a,b)被选到的概率相等。不无聊的人“被聊天”后变成无聊。问把所有人都变无聊所需的时间期望。
对于此题我们设状态s=(n,m)表示当前有n个不无聊人及m个无聊人。则状态空间S为s的所有可能取值共n+m+1个元素(注意到总是有n+m=N+M,因此此状态看似为2维实际上是1维的)。容易知道s=(n,m)可以转移到(n,m),(n+1,m-1),(n+2,m-2),转移代价为1。起始状态ss=(n,m),终止状态st=(0,N+M)。
以上两题都是此类问题对于F仅存在自环的特例。
如何解此类问题呢?
根据马尔可夫链,我们当然可以通过画出从以起始状态为根的转移树,树是无穷大的,但我们可以通过迭代的方式求无穷级数和,使其收敛至给定精度从而给出解。
但实际操作之后你会发现,除非对于小数据情况,求级数的难度非常大,且迭代的精度很不可靠。
此处直接给出另一种方法:
设E(s)为s状态下转移至st的代价期望值。则显然有边界条件E(st)=0。对于任意s[i]∈S,有
E(s[i])=c(转移代价)+P(s[i] to s[1])*E(s[1])+P(s[i] to s[2])*E(s[2])+...+P(s[i] to s[j])(转移概率)*E(s[j])+...+P(S[i] to s[n])*E(s[n])。=c+sigma(j from 1 to n)(P(S[i] to s[j])*E(s[j]))
所有方程构成一线性方程组,本来矩阵的秩为n-1不可解,但通过边界条件E(st)=0使得矩阵满秩,用高斯消元,可以求E(ss)。
对于F仅存在自环的情况,方程可化为:
(1-P(s[i] to s[i]))*E(S[i])=c+sigma(j from 1 to n, j != i)(P(S[i] to s[j])*E(s[j]))
则s[i]仅依赖于非s[i]的状态,自环得以消掉,由于F仅存在自环,则图变为了DAG,可以通过记忆化搜索/dp的方式求E(ss)。
举例说明,对于上面的第一题。
设E[i,j]为发现了i个Category,来自j个软件Subcomponents的bug的前提下,到达终点(也就是发现来自所有Category,所有Subcomponents的bug)的天数的数学期望。显然E[C,S]为0,E[0,0]为所求。
有如下递推式
E[i,j] =
1
+ E[i+1,j+1] * (C - i)(S - j) / CS
+ E[i,j+1] * i * (S - j) / CS
+ E[i+1,j] * (C - i) * j / CS
+ E[i,j] * ij / CS
则可以移项解出E[i,j]。通过dp可解出E[0,0]。
对于不是F仅存在自环的情况,Reference第五篇文章中的第二部分。
对于另外一种类型,即F不存在环的情况,可以用Bayes公式同样依据图的DAG性质用记忆化搜索/dp的方式求解。参见Reference第三篇RoBa神的文章。
Reference
http://acmicpc.org.cn/wiki/index.php?title=2004_Northeastern_Europe_Northern_Subregion_Collecting_Bugs_Solution
http://kicd.blog.163.com/blog/static/126961911200910168335852/
http://roba.rushcj.com/?p=192
国家集训队2009论文集
梅诗珂 《信息学竞赛中概率问题求解初探》
汤可因 《浅析竞赛中一类数学期望问题的解决方法》