一道题,一类题

还是说说这道题,之前我提供了一种基于画图+解方程的解法,但是对于其正确性和原理没有说明(后来这道题又被提起若干次,所以还是想写篇文章弥补一下缺憾),而且有点想法想要整理。
这道题有异于传统马尔科夫链的地方是设计的状态有后效性(状态之间不能构成有向无环图,会互相影响),但是我们仍然可以找到状态之间的关系,加以解方程的方式解决。
以下就是基于这种思想的期望、概率解法。
一
我之前提供的解法本质是用期望列方程组。我就直接用严谨一点的表述讲一遍:
设 \(E_i\) 表示粒子在整个过程(即从 \(1\) 号框内释放到从某个口离开)中,经过 \(i\) 节点的次数。用 \(c_i\) 表示 \(i\) 框的开口数量(\(c_1=3,c_2=3,c_3=2\)),用 \(S_i\) 表示和 \(i\) 框相邻的框的集合。
我们利用贡献计算期望的方法,考虑 \(E_i\) 由哪些状态转移而来:因为对于每个 \(j\in S_i\),如果粒子在其中,都可能下一步跳到 \(i\),那么每个 \(E_j\) 都能给 \(E_i\) 贡献;还要乘上系数,应当是粒子在 \(j\) 号框时跳到 \(i\) 的概率,也就是 $ \frac 1 {c_j}$。(试想每次粒子在 \(j\) 时,都有 $ \frac 1 {c_j}$ 概率下一步来到 \(i\),让经过 \(i\) 的次数 +1)
对于 \(1\) 号框,因为粒子一开始就在里面,根据定义,还要加上 1。
也就是
这样能求出来 \(E_i\),但是问的是从 \(1\) 号出的概率——其实这个值就是 $ \frac {2} {{}3} E_1$。
理由:假设最外面为 \(0\) 号框,由上面的公式得知 \(E_0=\frac {2} {3} E_1\),又因为整个过程最多到达一次 \(0\) 号框,由教材中的 \(E=\sum P_x\times x\) 得知 \(E_0=P_{从\ 1\ 号框出}\)。
顺带提一下,对于其他一些更简单的问题,如果经过每个节点的次数最多是 1,设状态的时候就可以直接设成 \(P_i\) 表示到达 \(i\) 节点的概率,方程不变。原因同上。
这道题写下来的核心过程是这样的:
上次我画图的时候特意加了一个源点,现在发现没必要,和 \(E_1\) 方程里的那个 1 的作用是一样的。
这样就非常严谨了,不过大题不一定给分。
二
这种方法王老师在其他题目里讲过不止一次(好像 43 套也提供了这个做法),和上述方法形似,特此记录整理。
这是设概率列方程组的方法。我们记 \(P_i\) 为从 \(i\) 框出发,最后成功从 \(1\) 框出的概率。答案就是 \(P_{1}\)。注意这里的概率的意义和一里的是不同的。
我们设想粒子刚开始在一号框,一种可能是 \(\frac 2 3\) 的概率直接成功;如果没有成功,那么就通过 \(\frac 1 3\) 的概率来到了二号框。此时粒子在二号框,但我们的问题没有变:最后成功从 \(1\) 框出的概率,因此可以转变成了一个同样结构的子问题:粒子从 \(2\) 框出发,最后成功从 \(1\) 框出的概率。这不就是 \(P_{2}\) 吗!因此 \(P_{1}=\frac 2 3\times 1+\frac 1 3\times P_{2}\)
以此类推,列出完整的:
利用全概率公式,简洁明了,大题也能写。
(其实还可以简化,只设 \(P_2\),然后手推两步得到关于 \(P_2\) 的一元一次方程,不过这个优化并不是很好推广,留意一下正式写题时灵活运用即可。)\(\textcolor {red} *\)
三
把这两种方法写在一起,不仅仅在于它们都能解决这类问题(以及更不复杂的、无后效性的递推问题),而且想比较一下两者应用范围的不同。
比如,如果一位黑心出题人发现这道题只有一个起点,只问一个终点,便将这道题的问题改为:粒子从 \(1\) 号框出发,从各个框离开的概率,也就是指定起点,询问多个终点,该怎么做呢?
很明显,如果用期望方法,只需要将 \(ANS\) 的方程更改即可,如问从 \(2\) 号框出,那么 \(ANS=\frac 1 3 E_2\),如问从 \(3\) 号框出,那么 \(ANS=\frac 1 2 E_3\),如果问题推广至更高节点数,那么不同 \(ANS\) 仍然是很方便求的,不需要为每个终点的询问重新解一遍方程组。
而如果用概率方法,很遗憾,因为设 \(P_i\) 时就规定其最终从 \(1\) 号框出,对于不同的终点询问,你都要解一遍完整的方程组。有 \(n\) 个框就得解 \(n\) 遍方程组,每个方程组有 \(n\) 个方程。
当你解决这道题后,这位黑心出题人又将问题改了,问粒子分别从各个框出发,从 \(1\) 号框离开的概率,也就是多个起点,询问同一个终点,该怎么做呢?
很明显,这撞到概率方法的枪口上了,因为问的就是 \(P_i\)。但是用期望方法算时,发现因为 \(E_i\) 的定义指定了起点(如果更改定义,方程中 '+1' 的位置就要对应调整给起点的 \(E_i\)),所以需要对每个起点解一遍方程组。
也就是说,这两种方法对于多个起点或终点的此类问题,互补。一个相关的分类是:期望方法是从起点往终点推,是顺推,概率方法是逆推。
另外,上面期望的状态表示还可以直接解决询问粒子全程期望走了多少步的问题,即 \(\sum E_i\)。对应的逆推法是,设 \(E_i\) 表示粒子从 \(i\) 框出发,到最终离开时的期望步数。发现无论是什么问题,状态的定义非常重要,而顺推和逆推的应用范围又有交集但不完全一样。
最后,还是建议遇到此类有后效性的题无脑画图,每个状态作为一个节点,连概率为边权的有向边,然后灵活选用相关方法。
内容就这么多,是我思路的记录,但愿能有启发。
…………
还是想说句闲话:上文 \(\textcolor {red} *\) 处让我有点好奇,对于给定的此类问题,最少能用多少 \(P_i\) 表示并解决呢?我将问题改换了一个表述:给定一个有向图,最少标记几个节点,使得所有环上都有标记过的节点。不知改换的对不对。

浙公网安备 33010602011771号