チューリング機械と計算機

Algorithms and Data Structures on C
チューリング機械と計算機
Algorithms and Data Structures on C
計算とは何か
• 計算するとは
– 入力を、ある決まりに従って変形し、出力すること
– y = f (x)
• x : 入力
• f : 決まり
• y : 出力
– 結果が出ない場合もありうる→計算不可能
• 計算の例:自然数の加算
– 1+1=2 , 1+2+3=6 , 1+1+3+2=7
入力
決まり
出力
●+●
●●
●+●●+●●●
●●●●●●
●+●+●●●+●●
●●●●●●●
Algorithms and Data Structures on C
チューリング機械
• Turing Machine
– Alan.M.Turingが1936年、「On computable numbers,
with an application to the entschidungsproblem(計算
可能数についてー決定問題への応用)」で発表
– 現在の計算機の基本的な動作は、チューリング機械の原
理と同等であるといえる。
• 計算機で原理上解ける問題=チューリング機械で解ける問題
• 数学の形式体系はチューリング機械の動作に還元可能
• 計算機の不完全性の証明
– 停止問題(チューリング機械が停止するかどうかを判定するチュー
リング機械を作ることはできない)
Algorithms and Data Structures on C
チューリング機械の構造
• 以下の3つの構成要素
– 右側に無限に長いテープ(記憶装置)
– テープを読み書きするヘッド(入出力装置)
– 内部状態
• 以下の動作を停止するまで繰り返す
–
–
–
–
–
a
ヘッドの位置のテープを読む(#は空白)
ヘッドの位置に文字を書く
機械の内部状態Sを変える
ヘッドを移動する(左、右、そのまま)
プログラムにない場合は停止する
b
#
a
c
左移動 (L)
c
#
#
S
ヘッド
#
H
e
l
l
右移動 (R)
o
#
#
#
1
2
3
#
Algorithms and Data Structures on C
チューリング機械のプログラム
• 5つの文字の組
–
–
–
–
–
現在の状態S0
テープから読んだ入力I
テープに書き込む出力O
ヘッドの移動M
次の状態S1
状態によって動作が異なる
↓
変数の役割
↓
状況に応じた処理(if文)
S0
I
O
M
S1
0
0
0
R
0
0
1
1
R
1
1
0
0
R
0
1
1
1
R
2
2
0
0
R
0
2
1
0
L
2
2
#
#
R
0
Algorithms and Data Structures on C
2つの自然数の加算
•
どんな決まりが必要か?
1.
2.
3.
4.
5.
6.
7.
8.
テープの先頭から読む
#(空白)が現れるまで右へ
#が現れたら左へ
●を#に変え左へ
+が来るまで左へ。
その途中で先頭まで戻ったら、
●がなくなるまで右へ行き、最
後の#を●に変えて終了
+を●に変える
2.へ戻る
●●+●●●####
●●+●●●####
●●+●●●####
●●+●●#####
●●+●●#####
●●●●●#####
●●●●●#####
●●●●######
●●●●######
●●●●●#####
Algorithms and Data Structures on C
自然数の加算のプログラム
State0
Input
Output
Movement
State1
0
●
☆
R
1
0
#
#
R
0
1
●
●
R
1
1
+
+
R
1
1
#
#
L
2
2
●
#
L
3
3
●
●
L
3
3
+
●
R
1
3
☆
●
R
4
4
●
●
R
4
4
#
●
R
5
ただし、#は空白をあらわす。
Algorithms and Data Structures on C
自然数の加算の状態遷移
#
1
0
●
数字を読んでいない
状態
数字を読んで右に移
動している状態
●、+
#
●
4
2
先頭まで戻って、右
に移動している状態
#
+
右端の空白を読んだ
状態
☆
●
5
終了した状態
3
最後の●を空白に置
き換えて左に戻って
いる状態
●
Algorithms and Data Structures on C
111→000問題
• テープ上に1が連続して3つ現れたら、それを0が3つ
の連続に置き換えよ。
S0
I
O
M
S1
0
0
0
1
0
0
1
1
1
1
1
0
0
1
0
1
1
1
1
2
2
0
0
1
0
2
1
0
-1
2
1
0
2
Algorithms and Data Structures on C
課題150930
• 前のページの111→000問題のチューリング機械の
プログラムの動作を、以下の要領で説明せよ。
– テープの初期状態が、
• 001110011011111000
の場合について、実行の順序に沿って説明せよ。
– 各状態は、どのような目的のために作られているかを、状
態遷移図を描いて説明せよ。
《提出要領》
• 作成方法:ワードで(ファイル名 scXXXXXX-al150930.docx)
• 提出方法:メールで
• 提出先:[email protected]
• メールタイトル: アルゴリズム課題150930 ←厳守!
• 提出期限:2015年10月4日(日)
• 警告:内容が酷似している2つ以上のレポートがあった場合は、双
方、不可になる可能性がある。
Algorithms and Data Structures on C
チューリング機械と計算機
終了
Algorithms and Data Structures on C
2つの自然数の加算(#版)
•
どんな決まりが必要か?
1.
2.
3.
4.
5.
6.
7.
8.
テープの先頭から読む
#(空白)が2つ連続するまで右
へ
#が2つ連続したら2つ左へ
●を#に変える
#が来るまで左へ。
その途中で先頭まで戻ったら、
●がなくなるまで右へ行き、最
後の#を●に変えて終了
#を●に変える
3.へ戻る
●●#●●●####
●●#●●●####
●●#●●●####
●●#●●#####
●●#●●#####
●●●●●#####
●●●●●#####
●●●●######
●●●●######
●●●●●#####
Algorithms and Data Structures on C
自然数の加算(#版)のプログラム
S0
I
O
M
S1
0
●
1
R
1
0
#
#
R
0
1
●
●
R
1
1
#
#
R
2
2
●
●
R
1
2
#
#
L
3
3
#
#
L
3
3
●
#
L
4
4
●
●
L
4
4
#
●
R
1
4
1
●
R
5
5
●
●
R
5
5
#
●
R
6
ただし、#は空白をあらわす。