问题
汉尼拨博士越狱了,他会在各个村子里逃跑,采取的策略是每天都会随机逃到邻近(有路通)的下一个村子,那么N天后,博士在某个村子Q的概率是多少。
问题的输入:
- 一共有n个村子
- adj(i)表示与i村子邻接的村子的集合。|adj(i)|表示这些村子的个数。
- 监狱所有的村子。
- N天后,求博士在的概率。
解法1
暴力最爱,把从一开始的所有有效路径(长度为N)算出来,挑出最后一个是Q的百分比,就是博士在Q村的概率。
这个算法还可以稍稍改良一下。不是计算出现的次数的概率,而是最后一个是Q的 概率,这需要记住到达Q的线路,然后计算出整条线路概率
path是记录到的一条线路,path[i]是第i天出现的村庄编号,把所有以Q结束的线路的几率加起来,就是博士在那里的概率了。
为了能够使用制表技术,需要对的输入进行简化,对于子问题(递归的那一部分)真正需要的信息是path的最后一个节点编号,还有已经过了多少天,在这样的情况下,
解法2
我们可以大开始的时候计算,然后根据概率算出每一天在所有的位置的概率,以p[n-1][q]用来存储第q天博士每一个村子出现的概率,那么
解法3:反着来
反着来的算法与算法1中的那个相似,
理论背景
马尔可夫链,由前一个结点往下一个节点转换,只跟当前节点相关。