資格道場 › レッスン一覧 › 基礎理論
基礎理論・11/13・13分

状態遷移・構文規則・マルコフ過程

ゴール

状態遷移図・状態遷移表を1文字ずつ正確にたどって出力や合否を決められるようになる。BNFで書かれた規則に文字列が合うかを判定し、遷移確率の表から2回後の確率を計算できるようになる。

どれも「規則どおりに1歩ずつ進める」だけで解ける問題で、暗記がほとんど要らないので確実な得点源になる。仕様書の画面遷移図や入力チェック、API の入力値の書式定義と同じ考え方なので、実務の要件定義にもそのまま役立つ。

このレッスンで稽古する(用語チェック・過去問)

このレッスンの全体像:4種類とも「表や図を機械的にたどる」だけ

状態遷移・構文規則・マルコフ過程は見た目が違いますが、解き方はどれも同じです。決められた規則を、入力の左から1つずつ当てはめるだけです。頭の中で近道をすると間違えるので、紙に途中経過を書きながら進めるのが正攻法です。

出題パターン 与えられるもの 聞かれること 解き方の要点
状態遷移図の読解 丸(状態)と矢印(遷移)の図 出力の列/受理されるか/条件に合う図 初期状態から1文字ずつ矢印をたどる
状態遷移表の文字列検査 行=今の状態、列=入力の表 不合格(e)になる文字列 行と列の交点で次の状態を読む
BNF構文規則 ::= で書かれた生成規則 規則に合う文字列 規則を展開して作れるか確かめる
遷移確率・マルコフ過程 確率の表や図 行和の性質/2回後の確率 経由する経路ごとに掛けて足す

状態遷移図の読み方(最頻出)

状態遷移図は「今どの状態にいて、何が入力されたら、どこへ移るか」を描いた図です。丸が状態、矢印が遷移で、矢印のラベル「入力/出力」は「この入力が来たらこれを出力して矢印の先へ移る」という意味です。自動改札機が「待機中→ICカードをタッチ→残高OKならゲートを開く」と動くのと同じで、今の状態と入力だけで次の動きが決まるのがポイントです。

図の読み方の約束事は次のとおりです。

図の記号 意味
何もない所から入る矢印(太い矢印) 初期状態(スタート地点)
二重丸 受理状態(終了状態)。入力を読み終えたときここにいれば「受理」
自分に戻る矢印(自己ループ) その入力では状態が変わらない
ラベル「a/1」 入力 a で、1 を出力して遷移する

出題は3つの型に分かれます。

  • 出力の列を求める型:遷移のたびに出力を1文字ずつ並べる。
  • 受理されるか判定する型:最後の文字を読んだ時点で二重丸にいるかを見る。途中で二重丸を通っても、最後にいなければ受理ではありません。
  • 仕様に合う図を選ぶ型(自動販売機など):「何回目の入力で何を出力するか」を選択肢の図ごとにたどって確かめる。

例えば「300円の商品・100円硬貨だけ受け付ける自販機」なら、正しい図は 100円を3枚入れた3回目の遷移で初めて「/1」(販売)が出て初期状態に戻り、100円以外の硬貨は各状態の自己ループ「b/0」で返却されるものです。2枚目で「/1」が出る図や、a と b の役割が逆の図がひっかけです。

b/0b/0b/00円初期100円200円a/0a/0a/1(3枚目で販売して戻る)スタートa=100円硬貨 b=100円以外(返却)2枚目で /1 が出る図はひっかけ
300円・100円硬貨だけ受け付ける自販機の正しい状態遷移図。a(100円)を3枚入れた3回目で初めて「/1」(販売)が出て初期状態に戻り、b(100円以外)は自己ループで返却される。

状態遷移図の手順を図で確認

次の図は例題(平成30年度春期 午前 問4)の状態遷移図を描き直したものです。S3 から 0 で S1 に戻る矢印の出力は 0 です。ここを1と読み違えるのが典型的なミスです。

flowchart LR
  S1["S1(初期状態)"] -->|"0/0"| S1
  S1 -->|"1/0"| S2["S2"]
  S2 -->|"0/0"| S1
  S2 -->|"1/1"| S3["S3"]
  S3 -->|"1/1"| S3
  S3 -->|"0/0"| S1

この機械は「1 が2つ以上続いたら、2つ目以降の 1 で 1 を出力する」動きをしています。ただし試験では意味を考えるより、1文字ずつたどるほうが速く確実です。

状態遷移表による文字列検査

状態遷移表は状態遷移図を表にしたもので、行=今の状態、列=読んだ文字、交点=次の状態です。入力チェックの仕組みを表にしたものと考えてください。数値として正しい書き方かを1文字ずつ判定し、ダメなら e(エラー状態)へ落とします。

頻出の表(初期状態 a、e になったら不合格)では、それぞれの状態は次のように読めます。

状態 意味(読み取り) 次に来てはいけない文字
a 開始直後・区切りの空白の後 その他の文字
b 数字を読んでいる途中 符号・その他
c 符号(+−)を読んだ直後 空白・符号・その他
d 小数点を読んだ直後 数字・符号・小数点・その他(空白だけ可)

つまりこの表では、小数点の後に数字が来ると e になります。だから「12.2」が不合格で、「9.△」(小数点の後が空白)は合格です。普通の感覚では 12.2 が正しい数に見えるので、常識で判断すると間違えます。表に書いてあることだけが正解です。

免除試験では「末尾が 110 で終わる列を受理するにはどの状態を受理状態にするか」という逆向きの問題も出ます。表を見ると、各状態は 直前2文字 を覚えていることが分かります(a=00、b=01、c=10、d=11)。末尾が 110 なら直前2文字は 10 なので、c に必ず着きます。

「12.2」をたどるabbde12.2e=不合格(小数点の後に数字)「9.△」をたどるabda9.△合格(小数点の後は空白)d(小数点の直後)に来てよいのは空白だけ
状態遷移表を1文字ずつたどった様子。「12.2」は小数点の直後 d で数字を読んで e(不合格)に落ち、「9.△」は d で空白を読むので合格になる。

BNF(構文規則)の適合判定

**BNF(バッカス・ナウア記法)**は「どんな文字の並びが正しいか」を規則で定義する書き方です。プログラミング言語の文法や入力値の書式を厳密に決めるのに使います。API 設計で「ID は英字で始まり、英数字が続く」と仕様に書くのを、記号で正確に書いたものと考えてください。

記号 意味
::= 左辺は右辺のように定義される
| または(どれか1つを選ぶ)
<名前> 非終端記号(さらに展開される部品)
A、0、( など 終端記号(実際に現れる文字)

読み方のコツは再帰(自分自身を使う定義)です。 <変数名> ::= <英字> | <変数名><英数字> は、「英字1文字は変数名」「変数名の後ろに英数字を1つ足したものも変数名」という意味です。つまり先頭は必ず英字(この問題では A〜F だけ)、2文字目以降は英字・数字・_ のどれでもよいとなります。

判定の手順は次の3つです。

  1. 各規則が「先頭に何を許すか」「何を繰り返せるか」を日本語に言い換える。
  2. 選択肢を先頭の文字から当てはめ、規則で作れない箇所が1つでもあれば除外する。
  3. 括弧や演算子の付き方は、規則に書いてある形でしか作れないことに注意する。

免除試験には、R0・R1・R2 が「3で割った余りが0・1・2の数字」、〈A〉が「各桁の和が3で割り切れる数字の列」を表す応用問題も出ています。〈B〉+R2 なら余り 1+2=3 で割り切れる、という組合せを見抜けば、各桁の和が3の倍数かを確かめるだけで答えが出ます(1+2+3=6 なので 123)。

<変数名>を組み立てる<英字>(先頭)A<変数名><英数字>A+1 → A1<変数名><英数字>A1+_ → A1_規則では作れない例1A先頭が数字G1G は A〜F にない
再帰の規則で変数名が1文字ずつ伸びていく様子と、規則では作れない例。先頭は英字(A〜F)だけ、2文字目以降は英字・数字・_ のどれでもよい。

遷移確率行列の性質(行和=1)

遷移確率は「今の状態がこれのとき、次にこの状態になる確率」です。これを表にしたものを遷移確率行列といいます。行(横の並び)が「今」、列(縦の並び)が「次」です。

同じ行の確率を全部足すと必ず 1(100%)になります。今が「入力0」なら、次は出力0か出力1のどちらかに必ずなるからです。天気予報で「明日は晴れ40%・曇り40%・雨20%」の合計が100%になるのと同じです。

表 行和(横の合計) 列和(縦の合計)
遷移確率行列 必ず 1 1 とは限らない

よって入力0の行 a+b=1、入力1の行 c+d=1 となります。

マルコフ過程:2回後の確率

単純マルコフ過程は「次の状態の確率が今の状態だけで決まり、それより前の履歴は関係しない」という仮定です。雨の翌日の天気を考えるとき、一昨日が晴れだったかは気にしません。

2日後の確率を求めるときは、1日目にどの状態を経由するかで経路を全部挙げます。経路ごとに確率を掛け、最後に全経路を足します。計算に使うのは今日の状態と表だけです。

2日後に X になる確率 = Σ(今日→1日目の確率 × 1日目→X の確率)

市場シェア型(2つのブランドA・B)の問題も同じ計算です。違いは、出発点が「今日は雨」のような1つの状態ではなく「A 50%・B 50%」という割合になることだけです。1回ごとに「今のシェア×遷移確率」を足して、それを2回繰り返します。

今日1日目(経由)2日後雨晴れ曇り雨XXXアイウエオカX の確率 = ア×エ + イ×オ + ウ×カ経路ごとに掛けて、最後に全経路を足す
2日後の確率は、1日目にどこを経由するかで経路を全部挙げ、経路ごとに掛けてから全部足す。

試験での問われ方

  • 状態遷移図:出力列の選択肢は1〜2文字しか違いません。S3→S1 のように状態が戻る遷移の出力を取り違えさせる作りです。全文字たどってから選びましょう。
  • 状態遷移表:同じ表(a〜e、空白・数字・符号・小数点・その他)が何度も出ています。12.2 のような常識的には正しい文字列が不合格になります。
  • BNF:先頭に数字や _ が来る選択肢、定義されていない英字(例:A〜F 限定なのに G)を使う選択肢、規則にない括弧の付け方をした式が並びます。
  • 遷移確率:行和・列和・全体の合計・対角の和の4択がそのまま選択肢になります。
  • マルコフ過程:選択肢に「1日分の確率(30%)」や「1経路だけ掛けた値(0.12や0.15)」が並びます。1回分で計算を止めた値(10%)も並びます。
例題 1

状態遷移図から出力列を求める(出典:平成30年度 春期 基本情報技術者試験 午前 問4)

入力記号,出力記号の集合が {0, 1} であり,状態遷移図で示されるオートマトンがある。0011001110 を入力記号とした場合の出力記号はどれか。ここで,S1 は初期状態を表し,グラフの辺のラベルは,入力/出力を表している。
〔状態遷移図〕状態 S1(初期状態,矢印で示される),S2,S3。遷移(入力/出力): S1→S1 は 0/0(自己ループ),S1→S2 は 1/0,S2→S1 は 0/0,S2→S3 は 1/1,S3→S3 は 1/1(自己ループ),S3→S1 は 0/0。

ア 0001000110
イ 0001001110
ウ 0010001000
エ 0011111110

出典:平成30年度 春期 基本情報技術者試験 午前 問4

解き方と答えを見る
  1. 入力 0011001110 を1文字ずつ区切り、現在の状態と出力を表に書いていく。初期状態は S1。
  2. 1文字目 0:S1 で 0 → 自己ループ(0/0)。出力 0、状態 S1。
  3. 2文字目 0:S1 で 0 → 出力 0、状態 S1。
  4. 3文字目 1:S1 で 1 → S2 へ(1/0)。出力 0、状態 S2。
  5. 4文字目 1:S2 で 1 → S3 へ(1/1)。出力 1、状態 S3。
  6. 5文字目 0:S3 で 0 → S1 へ(0/0)。出力 0、状態 S1。
  7. 6文字目 0:S1 で 0 → 出力 0、状態 S1。
  8. 7文字目 1:S1 で 1 → S2 へ。出力 0、状態 S2。
  9. 8文字目 1:S2 で 1 → S3 へ。出力 1、状態 S3。
  10. 9文字目 1:S3 で 1 → 自己ループ(1/1)。出力 1、状態 S3。
  11. 10文字目 0:S3 で 0 → S1 へ。出力 0、状態 S1。
  12. 出力を順に並べると 0,0,0,1,0,0,0,1,1,0 → 0001000110。

答え:ア(0001000110)

例題 2

状態遷移表で不合格の文字列を見つける(出典:平成26年度 春期 基本情報技術者試験 午前 問5)

表は,文字列を検査するための状態遷移表である。検査では,初期状態を a とし,文字列の検査中に状態が e になれば不合格とする。 解答群で示される文字列のうち,不合格となるものはどれか。ここで,文字列は左端から検査し,解答群中の△は空白を表す。
状態遷移表(行=現在の状態,列=文字)
現在の状態\文字空白数字符号小数点その他
aabcde
babede
cebede
daeeee

ア +0010
イ −1
ウ 12.2
エ 9.△

出典:平成26年度 春期 基本情報技術者試験 午前 問5

解き方と答えを見る
  1. ア +0010:a で符号 → c、c で数字 0 → b、以降の数字 0,1,0 は b のまま。e にならないので合格。
  2. イ −1:a で符号 → c、c で数字 1 → b。合格。
  3. ウ 12.2:a で数字 1 → b、b で数字 2 → b、b で小数点 → d、d で数字 2 → **e**。ここで不合格。
  4. エ 9.△:a で数字 9 → b、b で小数点 → d、d で空白 → a。合格。
  5. e になったのはウだけ。

答え:ウ(12.2)

例題 3

BNFの規則から生成できる式を選ぶ(出典:平成23年度 秋期 基本情報技術者試験 午前 問4)

次の規則から生成することができる式はどれか。
〔規則〕 <式> ::= <変数> | (<式>+<式>) | <式>*<式> <変数> ::= A | B | C | D

ア A+(B+C)*D
イ (A+B)+(C+D)
ウ (A+B)*(C+D)
エ (A*B)+(C*D)

出典:平成23年度 秋期 基本情報技術者試験 午前 問4

解き方と答えを見る
  1. 規則を言い換える:式は「変数1文字」か「(式+式)」か「式*式」。**+は必ず括弧付きで作られる**。括弧は+を作るときにしか付かない。
  2. ア A+(B+C)*D:先頭の A+ に括弧がない。全体を(…)で囲む形にもなっていないので作れない。
  3. イ (A+B)+(C+D):真ん中の+に外側の括弧がない。作れない。
  4. ウ (A+B)*(C+D):(A+B) は (式+式)、(C+D) も (式+式)。それを 式*式 でつなげば作れる。
  5. エ (A*B)+(C*D):(A*B) のように*を括弧で囲む規則がない。外側の+にも括弧がない。作れない。

答え:ウ((A+B)*(C+D))

例題 4

雨の2日後が晴れの確率(出典:平成22年度 秋期 基本情報技術者試験 午前 問3)

表は,ある地方の天気の移り変わりを示したものである。例えば,晴れの翌日の天気は,40%の確率で晴れ,40%の確率で曇り,20%の確率で雨であることを表している。天気の移り変わりが単純マルコフ過程であると考えたとき,雨の 2 日後が晴れである確率は何%か。
単位 %
翌日晴れ翌日曇り翌日雨
晴れ404020
曇り304030
雨305020

ア 15
イ 27
ウ 30
エ 33

出典:平成22年度 秋期 基本情報技術者試験 午前 問3

解き方と答えを見る
  1. 雨の行を読む:翌日は 晴れ 0.3、曇り 0.5、雨 0.2。
  2. 経路1 雨→晴れ→晴れ:0.3 × 0.4(晴れ→晴れ)= 0.12。
  3. 経路2 雨→曇り→晴れ:0.5 × 0.3(曇り→晴れ)= 0.15。
  4. 経路3 雨→雨→晴れ:0.2 × 0.3(雨→晴れ)= 0.06。
  5. 合計:0.12 + 0.15 + 0.06 = 0.33 → 33%。

答え:エ(33%)

例題 5

2回購入後の市場シェア(出典:平成21年7月 基本情報技術者試験 免除試験 問69)

市場で競合する二つの銘柄 A,B 間の推移確率行列は,表のとおりである。例えば,A を購入した人が次回に B を購入する確率は,20%である。A と B の市場シェアが,それぞれ 50%であるとき,全員が 2 回購入した後の市場シェアはどうなるか。
推移確率行列(行=今回,列=次回)
今回\次回AB
A0.80.2
B0.40.6

ア A のシェアは 10%上がり,B のシェアは 10%下がる。
イ A のシェアは 10%下がり,B のシェアは 10%上がる。
ウ A のシェアは 14%上がり,B のシェアは 14%下がる。
エ A のシェアは 14%下がり,B のシェアは 14%上がる。

出典:基本情報技術者試験 科目A免除 修了試験 200907 実施分 問69

解き方と答えを見る
  1. 初期シェア:A=0.5、B=0.5。
  2. 1回後の A:0.5×0.8(A→A)+ 0.5×0.4(B→A)= 0.40 + 0.20 = 0.60。B = 1 − 0.60 = 0.40。
  3. 2回後の A:0.60×0.8 + 0.40×0.4 = 0.48 + 0.16 = 0.64。B = 1 − 0.64 = 0.36。
  4. 変化:A は 50% → 64% で 14ポイント上がる。B は 50% → 36% で 14ポイント下がる。

答え:ウ(A のシェアは 14%上がり、B のシェアは 14%下がる)

要点(試験直前に読む)

  • 状態遷移図・表は、初期状態から1文字ずつたどる。暗算せず、状態と出力を書き並べる。
  • 受理の判定は、最後の文字を読んだ直後に二重丸(受理状態)にいるかどうかで決まる。
  • 頻出の検査表では、小数点の直後に数字が来ると e(不合格)。12.2 が不合格、9.△ は合格。
  • BNF は「先頭に何が許されるか」「何を繰り返せるか」を言い換えてから選択肢に当てはめる。括弧は規則にある形でしか付かない。
  • 遷移確率行列は行和=1(同じ「今」から次のどれかに必ずなる)。
  • 2回後の確率は、1回目の経由先ごとに掛けて全部足す。雨→2日後晴れは 0.12+0.15+0.06=0.33。

ひっかけ

  • 状態が戻る遷移(S3→S1 など)の出力を読み違える。全文字をたどり終えてから選択肢と照らし合わせる。
  • 常識的に正しい数(12.2)を合格と思い込む。表に書かれた遷移だけを根拠にする。
  • BNF で先頭が数字や _ の選択肢、定義にない英字を使う選択肢を通してしまう。最初の1文字の規則を先に確かめる。
  • 遷移確率の性質で「列和=1」や「全体の合計=1」を選ぶ。行は「今」、合計1になるのは行。
  • マルコフ過程で、1日分の確率(30%)や1経路だけの値(0.12)、1回分で止めた値(シェア+10%)を選ぶ。経路をすべて挙げ、回数分くり返す。

用語(14)

オートマトン automaton(自動機械)
有限個の状態を持ち、入力を1つ読むたびに決まった規則で状態を移していく抽象的な機械のこと。
有限オートマトン ゆうげんオートマトン(finite automaton)
状態の数が有限のオートマトンで、入力列を読み終えたとき受理状態にいるかどうかで、その列を受理するか判定するもの。
状態遷移図 じょうたいせんいず
状態を丸、遷移を矢印、きっかけになる入力(と出力)を矢印のラベルで表した図。
⚠ 状態遷移表と中身は同じで、表し方だけが違う。図は矢印をたどり、表は行(今の状態)と列(入力)の交点を読む。
状態遷移表 じょうたいせんいひょう
行に今の状態、列に入力を取り、交点に次の状態を書いた表。
⚠ 遷移確率行列も行と列の表だが、交点にあるのは次の状態ではなく確率の値。
初期状態 しょきじょうたい
入力を読み始める前にいる状態で、図では何もない所から入る矢印で示される。
⚠ 受理状態(二重丸)と混同しない。自販機の問題のように、1つの状態が初期状態と受理状態を兼ねることもある。
受理状態 じゅりじょうたい(終了状態)
入力をすべて読み終えたときにそこにいれば、その入力列を「受理」と判定する状態で、図では二重丸で描く。
⚠ 途中で通過しただけでは受理にならない。判定するのは最後の文字を読んだ直後にいる状態。
自己ループ じこループ
ある入力を読んでも同じ状態にとどまることを表す、自分自身に戻る矢印。
BNF Backus-Naur Form(バッカス・ナウア記法)
「::=」と「|」を使い、どんな記号の並びが正しいかを生成規則として定義する記法。
非終端記号 ひしゅうたんきごう
<変数名>のように、規則によってさらに別の記号へ展開される部品の名前。
⚠ 終端記号はそれ以上展開されず、実際の文字列に現れる文字(A、0、( など)。山括弧で囲まれていれば非終端記号。
終端記号 しゅうたんきごう
展開の最後に残り、実際の文字列としてそのまま現れる文字。
⚠ 非終端記号と対になる。見分け方は上と同じ。
再帰的定義 さいきてきていぎ
<変数名>::=<変数名><英数字>のように、定義の中で自分自身を使い、繰り返しを表す書き方。
⚠ 先頭に置かれる部品(例:<英字>)が「1文字目の制約」、後ろに足す部品(例:<英数字>)が「2文字目以降に使える文字」と読み分ける。
遷移確率 せんいかくりつ
今の状態がある値のとき、次に特定の状態になる確率。
遷移確率行列 せんいかくりつぎょうれつ(推移確率行列)
行に今の状態、列に次の状態を取り、遷移確率を並べた表で、各行の合計は必ず1になる。
⚠ 列の合計(縦の和)は1になるとは限らない。1になるのは行の合計(横の和)。
単純マルコフ過程 たんじゅんマルコフかてい
次の状態の確率が今の状態だけで決まり、それより前の履歴には左右されないとみなす確率の変化のモデル。
⚠ 2日後の確率も今日の状態だけで決まる。ただし1日目にどの状態を経由するかで経路が分かれるので、経路ごとに確率を掛けて足す必要がある。1日分の確率だけで答えない。

このレッスンの過去問

このレッスンで稽古する