Probability trip 解説!

プログラミング

皆様どうもこんにちは!ばるとーくです!
今回は問題「Probability trip」の解説をしていきます!

問題

問題文

ばるとーく王国には、$1$ から $N$ までの番号が振られた $N$ 個の街がある。
王国全体では $M$ 本の道があり、$i$ 番目の道は街 $u_i$ と街 $v_i$ を双方向に結ぶ。
各街は必ず $1$ つ以上の他の街と双方向に行き来可能な道で結ばれており、全ての街は道を使って互いに行き来できることが保証される。
また、各街の間には道は多くとも $1$ 本しかなく、ひとつの街だけで完結する道は存在しない。

冒険好きな少年ばる君は、$1$ 日目に街 $1$ にいる。
$2$ 日目以降の各日、ばる君は今いる街につながっている道の中から $1$ 本を等確率で選んで通り、その日に訪れる街へ移動する。
各日の移動は独立である。

ある日、王国の占い師がばる君にこう告げた。

「あなたは、$S$ 日目には必ず街 $A$ を訪れるでしょう。」

この予言が真であるとき、ばる君が $T$ 日目($1 \leq T < S$)に街 $B$ を訪れた条件付き確率を $\textrm{mod }998244353$ で求めよ。
なお、本問題の制約下で、条件付き確率が一意に定義されることが保証される。

条件付き確率の $\textrm{mod }998244353$ とは

求める条件付き確率は必ず有理数になることが証明できます。
また、この問題の制約下では、その値を既約分数 $\frac{p}{q}$ で表したとき、$q \not\equiv 0\pmod{998244353}$ となることも証明できます。
よって、$R \times Q \equiv P \pmod{998244353}, 0 \le R < 998244353$ を満たす整数 $R$ が一意に定まります。
この $R$ を答えてください。

制約

  • $2 \leq N \leq 50$
  • $N-1 \leq M \leq \dfrac{N(N-1)}{2}$
  • $1 \leq u_i,\ v_i \leq N$、$u_i \neq v_i$(自己ループをもたない)
  • $i \neq j$ のとき ${u_i,\ v_i} \neq {u_j,\ v_j}$(多重辺をもたない)
  • 各街は必ず $1$ つ以上の他の街と双方向に行き来可能な道で結ばれている
  • 全ての街は道を使って互いに行き来できる(各街は連結している)
  • $1 \leq A ,\ B \leq N$
  • $1 \leq T < S \leq 10^{18}$
  • ばる君が $S$ 日目に街 $A$ にいる確率は $0$ でないことが保証される
  • 求める条件付き確率は分母が $998244353$ と互いに素な既約分数で表せる
  • 入力はすべて整数
ProblemId = 13512 - yukicoder
競技プログラミングの練習サイト

解説

問題の概要はこんな感じです.

$N$ 頂点のグラフがある.各時刻に隣接頂点へ等確率で移動するランダムウォークを考える.
「day $S$ に都市 $A$ にいる」という条件のもとで、「day $T$ に都市 $B$ にいた」条件付き確率を求め,$\textrm{mod }998244353$ で出力せよ.
ただし,$T < S$ である.

確率漸化式から着想を得て,「未来から過去を参照する形」の条件付き確率を問う問題にしました.

ただし,この状態では「マルコフ性」がないため,過去の情報をすべて拾わなけばならず,処理が煩雑です.
※マルコフ性:「未来の状態は、現在の状態『だけ』で決まり、過去の経緯には一切影響されない」という性質1

そこで,まずは ベイズの定理 を用いてこの式を変形します.

ベイズの定理は以下の式で表されます.2

$P(X \mid Y) = \dfrac{P(Y \mid X)P(X)}{P(Y)}$

こうすることで,同時確率と周辺確率に分離するため,それぞれを順向きのランダムウォークとしてとらえることが可能になります.
また,マルコフ性が表れるようになるので,過去の情報がいらなくなるため,よりシンプルに考えることができます.
$\because$ 以下の2つの式を考えます.

$P(A \mid B) = \dfrac{P(A \land B)}{P(B)} \qquad \cdots (1)$
$P(B \mid A) = \dfrac{P(A \land B)}{P(A)} \qquad \cdots (2)$

この2つは皆さんおなじみの条件付き確率の式です.
$(2)$ を変形すると以下のようになります.
$P(A\land B) = P(B \mid A)P(A)$

さらに,遷移確率行列 $P$ を, 以下のように定めます.
$P_{i,j} = \begin{cases} 1/\deg(i) & ((i,j) \text{ が辺のとき}) \\ 0 & (\text{それ以外}) \end{cases}$

すると,$(P^k)_{i,j}$ は「頂点 $i$ からランダムウォークを $k$ 歩進めたとき,頂点 $j$ にいる確率」を表すことが知られています.

このとき,今回の量にベイズの定理を当てはめると,このような式になります.
ただし,「$S$ 日目に $A$」である事象を $X$, 「$T$ 日目に $B$」である事象を $Y$ とします.

$P(Y \mid X) = \frac{(P^{T-1})_{1,B} \cdot (P^{S-T})_{B,A}}{(P^{S-1})_{1,A}}$

これを,行列累乗を用いて実装しましょう.
繰り返し二乗法により $O(N^3 \log S)$ で計算することができます.

ちなみに,「$\textrm{mod }998244353$ ってなんだろう?」って方はこちらの記事を参考にしてみてください↓
※ばるとーく自身もこの問題を作る上ですっごくためになりました…!

「確率 mod 998244353」とか「期待値 mod 998244353」って何なの?という話 - 徒然
はじめに 分数のmodって何?AtCoderの注釈を読んでも意味わからないんだけど?といった方向けの記事です。 なおこの記事上は法(998244353や1000000007など)が素数であることを前提とします。

想定解コードはyukicoderの解説ページを参考にして下さい.

Footnotes

  1. https://ai-compass.weeybrid.co.jp/algorizm/markov-property-the-key-to-future-prediction-2/

  2. https://qiqumo.jp/contents/dictionary/3762/

タイトルとURLをコピーしました