数学

字符串匹配的 Markov 链

题目

A、B 两人玩抛硬币游戏,他们连续掷一枚均匀的硬币,每次记录硬币的朝向,正面记录为 1,反面记录为 0,构成一串 01 序列。若序列先出现连续的 1001001,则 A 赢;若序列先出现连续的 0010010,则 B 赢。求 A、B 各自的胜率。

解法

高中解法(巧解)

Markov 链解法

读入一堆字符,要求和两个给定字符串匹配,由此可以联想到 AC 自动机

首先构造字符串 1001001 和 0010010 的 AC 自动机的状态图,得到:

上面可以视为一个 Markov 链的状态转移图,每个节点表示当前匹配到字符串的什么位置,而 7 和 14 是自动机的接受节点,对应 Markov 链的吸收态。由于读入的字符是 0 和 1 的概率是相等的,所以除了代表吸收态 7、14 节点,每个节点沿两条出边转移的概率是相等的。

因此,可以构造出这一 Markov 链的转移矩阵:

A = \left( \begin{array}{cccccccccccccc} \frac{1}{2} & \frac{1}{2} & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ \frac{1}{2} & 0 & \frac{1}{2} & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & \frac{1}{2} & 0 & 0 & 0 & 0 & \frac{1}{2} & 0 & 0 & 0 & 0 & 0 \\ \frac{1}{2} & 0 & 0 & 0 & \frac{1}{2} & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ \frac{1}{2} & 0 & 0 & 0 & 0 & \frac{1}{2} & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & \frac{1}{2} & 0 & \frac{1}{2} & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ \frac{1}{2} & 0 & 0 & 0 & 0 & 0 & 0 & 0 & \frac{1}{2} & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & \frac{1}{2} & \frac{1}{2} & 0 & 0 & 0 & 0 \\ \frac{1}{2} & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & \frac{1}{2} & 0 & 0 & 0 \\ \frac{1}{2} & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & \frac{1}{2} & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & \frac{1}{2} & 0 & 0 & 0 & \frac{1}{2} & 0 \\ \frac{1}{2} & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & \frac{1}{2} \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 \\ \end{array} \right)

由于有两个吸收态,极限分布与初始分布有关。

这里初始分布为 p_0 = \displaystyle \left(\frac{1}{2},0,0,0,0,0,0,\frac{1}{2},0,0,0,0,0,0\right),其极限分布为

p_\infty = \lim_{n \to \infty} p_0 A^n.

由于该 Markov 链只有两个吸收态,其极限分布必定收敛于这两个状态,可以设

p_\infty = \left(0,0,0,0,0,0,P_1,0,0,0,0,0,0,P_2\right).

这里 P_1, P_2 就是 A 和 B 的胜率。

求出 Ax = x 的基础解系,得到

X = \left( \begin{array}{cc} -1 & 2 \\ -1 & 2 \\ -1 & 2 \\ -\frac{8}{7} & \frac{15}{7} \\ -\frac{9}{7} & \frac{16}{7} \\ -\frac{11}{7} & \frac{18}{7} \\ -\frac{16}{7} & \frac{23}{7} \\ -\frac{13}{14} & \frac{27}{14} \\ -\frac{6}{7} & \frac{13}{7} \\ -\frac{6}{7} & \frac{13}{7} \\ -\frac{5}{7} & \frac{12}{7} \\ -\frac{3}{7} & \frac{10}{7} \\ 0 & 1 \\ 1 & 0 \\ \end{array} \right).

则 X 中各列均为 A 的不动点,有 A^n X = X,所以 p_0 A^n X = p_0 X。又有

\lim_{n \to \infty} p_0 A^n X = p_\infty X.

于是得到 p_0 X = p_{\infty} X,也就是

\left(-\frac{27}{28},\frac{55}{28}\right) = \left(P_2-\frac{16}{7}P_1,\frac{23}{7}P_1\right),

解得

P_1 = \frac{55}{92},P_2 = \frac{37}{92}.

于是 A 和 B 的胜率之比为 55:37。

扩展

BEYOND THE ARTICLE

读完了,有什么想法?

阅读已保存的问答示例,并循着引用回到原文。

查看公开问答示例
— 本文完 — 返回文章列表