院試hub

東京大学 院試 過去問 解答例

東大 情報理工学系研究科 コンピュータ科学専攻 専門科目(コンピュータ科学) 2025年度 院試 過去問 解答例・解説(全4問)

全4問。情報1問。テーマタグは1件(正規表現・形式言語)。2023年度と共通のテーマは正規表現・形式言語。

最終更新:

このページで公開
解説4問と大問1問の途中式・最終答(全4問)
解答PDFに収録
途中式と最終答(最終答つき4問)
問題本文
非収録

東大 専門科目(コンピュータ科学) 2025年度 院試 過去問の出題内容(全4問)

この4問の分野は情報1問です。

大問分野主題解説の小見出し最終答
第1問情報形式言語とオートマトン平方根言語の見方 / 正規言語で閉じる理由あり
第2問—パイプラインとキャッシュCPIの分解 / ラインサイズの決まり方あり
第3問—スケジューリングとセマフォ待ち時間の数え方 / SRTFとセマフォの相互作用あり
第4問—グラフの連結度とサイクルサイクルと2本のパス / 新しい頂点を足す補題あり

2025年度の出題テーマと、同じテーマを出した他大学・他年度

この年度は1問に1テーマが出ています。

テーマこの年度全体の出題実績他大学の直近出題
正規表現・形式言語第1問10大学・30問

前年度(2023年度)との違い

大問数
2023年度 4問 → 2025年度 4問
両年度に出たテーマ
正規表現・形式言語
2023年度のページを見る

第1問 — 形式言語とオートマトン

平方根言語の見方

H(L)H(L) は「同じ語を2回続けたものが LL に入るか」を見る操作である。 したがって,単に正規表現を半分に切るのではなく,wwww の前半と後半に同じ構造が 現れることを使う。(1)では2個の cc の位置が強い制約になっている。

正規言語で閉じる理由

正規言語では,語そのものを覚える必要はない。語 ww がDFAの状態集合上に作る 有限個の状態変換だけを覚えればよい。有限集合 QQ に対する写像は高々 ∣Q∣∣Q∣|Q|^{|Q|} 個なので,これを状態にしたDFAが作れる。

文脈自由言語で同じ議論が使えない理由

プッシュダウンオートマトンでは,ww を1回読んだあとに同じ ww をもう一度 同じ順序で読むことを有限制御だけでは表せない。スタックに ww を積むと取り出しは 逆順になるため,正規言語のように「変換だけを持つ」という処理ができない。 このため,文脈自由言語では反例が存在する。

解答

  1. 語 ww が H(L2)H(L_2) に属する条件は,wwww が a(a+b)∗c(a+b)∗bc a(a+b)^*c(a+b)^*bc の形に入ることである。この正規表現に現れる cc は2個であり,2個目は末尾の cc である。したがって wwww の前半 ww も1個の cc を含み,その cc は ww の末尾でなければならない。 w=xcw=xc と書くと, ww=xcxc ww=xcxc である。これが上の正規表現に入るためには,最初の xx は a(a+b)∗a(a+b)^* に属し,2つ目の xx は (a+b)∗b(a+b)^*b に属する必要がある。 よって x∈a(a+b)∗b x\in a(a+b)^*b であり, H(L2)=a(a+b)∗bc \boxed{H(L_2)=a(a+b)^*bc} となる。
  2. 各語が与える状態変換だけを見る。状態を q0,q1q_0,q_1 とし,文字1つが誘導する 写像を考えると q0q1aq0q0bq1q1cq1q0 \begin{array}{c|cc} & q_0 & q_1\\ \hline a & q_0 & q_0\\ b & q_1 & q_1\\ c & q_1 & q_0 \end{array} である。語 ww が誘導する写像を fwf_w と書くと, w∈H(L3)⟺fw(fw(q0))=q1 w\in H(L_3) \quad\Longleftrightarrow\quad f_w(f_w(q_0))=q_1 である。 到達し得る写像は次の4種類である。 I,C0:q0,q1↦q0,C1:q0,q1↦q1,S:q0↔q1. I,\quad C_0:q_0,q_1\mapsto q_0,\quad C_1:q_0,q_1\mapsto q_1,\quad S:q_0\leftrightarrow q_1. このうち f(f(q0))=q1f(f(q_0))=q_1 を満たすのは C1C_1 だけである。 ただし,II と SS はこの判定に関して同値であり,最小化すると3状態で足りる。 最小DFAを Q={A,B,C},qinit=A,F={C} Q=\{A,B,C\},\qquad q_{\mathrm{init}}=A,\qquad F=\{C\} とする。ここで AA は I,SI,S を併合した状態,B=C0B=C_0,C=C1C=C_1 である。 遷移は abcABCABBCCCBCB \begin{array}{c|ccc} & a & b & c\\ \hline A & B & C & A\\ B & B & C & C\\ C & B & C & B \end{array} で与えられる。
  3. 命題は真である。正規言語 LL を受理するDFAを M=(Q,Σ,δ,q0,F) M=(Q,\Sigma,\delta,q_0,F) とする。語 ww が MM 上で誘導する状態変換を fw(q)=δ(q,w) f_w(q)=\delta(q,w) とおく。すると w∈H(L)⟺δ(q0,ww)∈F⟺fw(fw(q0))∈F w\in H(L) \quad\Longleftrightarrow\quad \delta(q_0,ww)\in F \quad\Longleftrightarrow\quad f_w(f_w(q_0))\in F である。 そこで,状態集合を有限集合 QQQ^Q とするDFAを作る。初期状態は恒等写像 id\mathrm{id} とし,文字 xx を読んだとき f⟼δx∘f,δx(q)=δ(q,x) f\longmapsto \delta_x\circ f, \qquad \delta_x(q)=\delta(q,x) と更新する。受理状態は {f∈QQ∣f(f(q0))∈F} \{f\in Q^Q\mid f(f(q_0))\in F\} である。このDFAはちょうど H(L)H(L) を受理するので,H(L)H(L) は正規言語である。
  4. 命題は偽である。反例として L={anbna2mbkak∣n,m,k≥0} L=\{a^n b^n a^{2m}b^k a^k\mid n,m,k\ge 0\} を考える。この言語は anbn,a2m,bkak a^n b^n,\quad a^{2m},\quad b^k a^k を順に生成すればよいので文脈自由である。 一方,w∈H(L)w\in H(L) なら ww∈Lww\in L である。wwww が上の形に入るためには, ww は w=anbnan w=a^n b^n a^n の形でなければならない。実際, ww=anbnananbnan=anbna2nbnan ww=a^n b^n a^n a^n b^n a^n =a^n b^n a^{2n}b^n a^n であり,これは m=n, k=nm=n,\ k=n として LL に属する。逆も同様に従う。 したがって H(L)={anbnan∣n≥0} H(L)=\{a^n b^n a^n\mid n\ge 0\} である。これは標準的な非文脈自由言語である。よって,文脈自由言語全体は HH に関して閉じていない。

最終答

H(L2)=a(a+b)∗bc. H(L_2)=a(a+b)^*bc. H(L3)H(L_3) の最小DFAは3状態で,遷移表は本文の通り。 正規言語についての命題は真,文脈自由言語についての命題は偽である。

第2問 — パイプラインとキャッシュ

CPIの分解

この問題では,総サイクル数を 命令実行の基本サイクル+ロードユースストール+キャッシュミスストール+分岐ミスペナルティ \text{命令実行の基本サイクル} +\text{ロードユースストール} +\text{キャッシュミスストール} +\text{分岐ミスペナルティ} に分けると見通しがよい。パイプラインの立ち上がり・終了コストは問題文で無視してよい 扱いなので,基本サイクルは命令数そのものとして数える。

ラインサイズの決まり方

配列を4バイト刻みで順に読む場合,キャッシュラインサイズが BB バイトなら, 1本のラインに B/4B/4 個のアクセスが入る。初期状態が空なので,各ラインの最初の ロードだけがミスになる。ここでは合計1024バイトを走査してミスが32回なので, 1ラインは 1024/32=321024/32=32 バイトである。

命令フォーマットの比較

レジスタ番号の位置をそろえる設計は,レジスタファイルの読み出しポートに渡す信号を 単純にできる。一方で,即値を分割すると,命令種別に応じた連結・並べ替え・符号拡張の 回路が必要になる。実際の命令セットでも,この2つはしばしばトレードオフになる。

パイプラインとキャッシュの途中式・最終答をPDFで見る

第3問 — スケジューリングとセマフォ

待ち時間の数え方

待ち時間には実行可能キューで待つ時間だけでなく,セマフォの待ちキューで待つ時間も 含まれる。全プロセスが終了する場合は 待ち時間=終了時刻−到着時刻−実行時間 \text{待ち時間}=\text{終了時刻}-\text{到着時刻}-\text{実行時間} でまとめて計算できるので,途中でどのキューにいたかを細かく足し上げるより安全である。

SRTFとセマフォの相互作用

セマフォがないSRTFでは,時刻20に到着した短い P5P_5 が P1P_1 を中断する。 しかし(3)では P5P_5 は S1S_1 を取得できないため待ちに入り,P1P_1 がそのまま 終了まで進む。このように,優先度が高いプロセスでも資源を取れなければ実行できない。

デッドロックの確認

(4)のRRでは,P2P_2 と P3P_3 が逆順に S1,S2S_1,S_2 を要求する。 片方が S1S_1 を持って S2S_2 を待ち,もう片方が S2S_2 を持って S1S_1 を待つと, どちらも進めない。時刻80でこの循環待ちが完成する。

スケジューリングとセマフォの途中式・最終答をPDFで見る

第4問 — グラフの連結度とサイクル

サイクルと2本のパス

2点 a,ba,b を含むサイクルは,サイクル上で aa から bb へ進む2通りの向きの パスに分解できる。この2本は端点以外の頂点を共有しない。逆に,内点素な2本の aa-bb パスを合わせればサイクルになる。この対応が(1)の中心である。

新しい頂点を足す補題

(2)は,あとで「指定された点集合」を「新しい1点の近傍」として扱うための準備である。 uu を消さない場合でも,AA には kk 点あり,削除できるのは高々 k−1k-1 点なので, uu とつながる頂点が必ず1つ残る。この数え上げが証明の要点である。

一般化の構造

高連結性は,ある頂点から既存のサイクルへ多数の互いに独立な接続路を保証する。 接続点が指定点の数より1つ多くあるため,指定点を含まない弧を避けてサイクルを 作り直せる。これが「kk 連結なら任意の kk 点が同一サイクルに乗る」理由である。

グラフの連結度とサイクルの途中式・最終答をPDFで見る

東大 専門科目(コンピュータ科学) 院試 過去問の収録3年度

  • 2026年度(全4問)

    形式言語とオートマトン / ページングとTLB / パイプラインと論理回路

  • 2025年度(このページ・全4問)

    形式言語とオートマトン / パイプラインとキャッシュ / スケジューリングとセマフォ

  • 2023年度(全4問)

    半分接頭辞と言語クラス / 集合分割の近似アルゴリズム / ページ置換