忍者ブログ
情報処理技術者試験の合格を目指す全受験者のための、1問1問「徹底解説」ブログです。単なる過去問の暗記ではなく、なぜその答えになるのかを本質的に理解できるよう解説します。書籍などでは学べない最新用語やトレンドを踏まえてご紹介します。

【計算機理論】あらゆる計算を実行可能な計算能力!「チューリング完全」|情報処理問題1000本ノック

基本情報技術者試験や応用情報技術者試験、高度情報処理技術者試験(ITストラテジスト・エンベデッドなど)のアルゴリズム・計算機論分野で頻出の根幹概念。「チューリング完全」の定義と、実現に必要な最小限のプログラミング条件を攻略しましょう。

1. 【 問題 】:テクノロジ系(計算機理論・プログラミング言語論)

【 問題 】 プログラミング言語や計算モデルの計算能力に関する記述です。ある言語やシステムが「万能チューリングマシン」を模倣・シミュレートできる計算能力を備えており、十分な時間とメモリが与えられれば、原理的にどんな計算可能アルゴリズムでも実行・表現できる性質を表す用語として、適切なものはどれか。

(ア)フォン・ノイマン型(Von Neumann architecture)
(イ)チューリング完全(Turing Completeness)
(ウ)NP完全(NP-Complete)
(エ)停止性問題(Halting Problem)

2. 正解:

正解:(イ)チューリング完全(Turing Completeness)

3. 解説:「『原理的になんでも計算できる』という万能の証明!」

チューリング完全は、計算機科学の父と呼ばれるアラン・チューリング(Alan Turing)が提唱した「チューリングマシン」に由来します。
プログラミング言語がチューリング完全であるためには、**「変数の保持(メモリへの書き込み)」「条件分岐(ifなど)」「無限ループや再帰(繰返し)」**の3つの要素を備えていれば十分であるとされています。

【チューリング完全と非チューリング完全の例】 ← ポイント!

分類代表例計算能力の特徴
チューリング完全な言語 C, Python, Java, JavaScript, WebAssembly,
SQL(再帰クリCTE利用時), HTML5+CSS3 など
万能チューリングマシンをシミュレート可能。任意の複雑な計算を実行できる。
非チューリング完全な言語 正規表現(基本形), JSON, HTML(単体), マークダウン など データ表現や記述に特化しており、任意の繰り返し処理や汎用計算は行えない。

1. 理解のコツ:
・「Pythonでできる計算は、原理的にはC言語でもJavaScriptでもすべて計算できる(計算能力の限界が同じ)」ということです。
・一見ただのマークアップ言語に見える「HTML5 + CSS3」や「Minecraftのレッドストーン回路」も、工夫すれば万能チューリングマシンを作ることができるため「チューリング完全」であることが証明されています。

2. 試験対策の視点:
・問題文に「万能チューリングマシンをシミュレート」「原理的にあらゆる計算を実行可能」「任意のアルゴリズムを表現できる」と来たら、迷わずチューリング完全を選択しましょう。
・関連概念として「チューリング完全な言語では、プログラムが永久に止まらないか判定する『停止性問題』は解決不能(不可解)」という定理も超重要です!


4. まとめ

プログラミング言語が万能チューリングマシンと同等の計算能力を持ち、あらゆる計算可能問題をシミュレートできる性質。これがチューリング完全です。計算機理論の原点となる重要テーマとして確実に覚えておきましょう!


PR