软件理论基础学习笔记——图灵机
目錄
- 圖靈機(jī)(turing machine)
- 例子
- 格局(configuration)
- Turing's Thesis
圖靈機(jī)(turing machine)
學(xué)過計算機(jī)的人總歸會多或少得聽說過圖靈機(jī)這種東西,但是圖靈機(jī)究竟是什么呢?圖靈機(jī)其實(shí)也是自動機(jī)的一種,并且圖靈機(jī)會在狀態(tài)轉(zhuǎn)換過程中操作一個無限的tape
tape的樣子如下圖所示,tape里面包含字符,其中后面那個兩豎一橫的符號是blank的意思,它是一個特殊的字符,用來填滿無限的tape
tape head指向當(dāng)前tape上的字符
tape上的操作
- 可以對tape head指向的字符進(jìn)行讀/掃描操作
- 可以對tape head指向的字符進(jìn)行寫/更新操作
- 將tape head左移一格
- 將tape head右移一格
操作規(guī)則:
1、
每一步操作都要執(zhí)行一下操作
- 讀取當(dāng)前的字符
- 更新當(dāng)前格子中的字符
- 左移一格或者右移一格
如果當(dāng)前tape指向最左邊的格子,那么執(zhí)行左移操作將不會發(fā)生移動
如果你不想更改當(dāng)前格的字符,那么執(zhí)行更新操作的時候只要讓它更新為和當(dāng)前字符一樣即可
2、
操作行為類似于有限狀態(tài)機(jī)
有初始狀態(tài)
終止?fàn)顟B(tài)有兩種:
- accept state
- reject state
計算結(jié)束后狀態(tài)會變成下列三種中的一種:
- 終止并且接受(accept)
- 終止并且拒絕(reject)
- 循環(huán)(loop,就是說沒有終止)
下面是圖靈機(jī)的正式定義,Turing Machine可以表示為一個七元組(S,Σ,Γ,δ,s0,b,F)(S,Σ,Γ,δ,s_{0},b,F)(S,Σ,Γ,δ,s0?,b,F)
- S是一組狀態(tài)的集合
- ΣΣΣ是輸入字母表
- ΓΓΓ是tape的字母表
- δδδ是轉(zhuǎn)換函數(shù)
- s0s_{0}s0?是初始狀態(tài)
- bbb是空符號
- FFF是終止?fàn)顟B(tài)的集合(包括accept或reject)
轉(zhuǎn)換函數(shù) δδδ定義為:
S×Σ→Γ×(R/L)×SS×Σ\rightarrow Γ×(R/L)×S S×Σ→Γ×(R/L)×S
這里的(R/L)就是執(zhí)行左移或者右移操作,R就是向右(right)移動,L就是向左(left)移動
以下面這張圖為例,在圖上0→1,R0\rightarrow 1,R0→1,R代表的含義是,在狀態(tài)A時接收字符0,那么將會轉(zhuǎn)變?yōu)闋顟B(tài)B,并且在當(dāng)前磁頭位置寫下1這個字符,然后磁頭向右移動一格
例子
接下來我們通過構(gòu)建一個圖靈機(jī),并且實(shí)際運(yùn)算一下,看看圖靈機(jī)究竟是如何進(jìn)行計算的
我們要構(gòu)建圖靈機(jī),用于計算n+1函數(shù),下圖的初始狀態(tài)是q1,結(jié)束狀態(tài)是qa
假設(shè)輸入的數(shù)字為1011(二進(jìn)制),初始時tape head指向第一個值
第一步讀取一個1,自動機(jī)會通過1→1,R1\rightarrow 1,R1→1,R這個轉(zhuǎn)換,轉(zhuǎn)換后仍然變成q1q_{1}q1?,在第一格寫入1,并將tape head右移一格
接下來的步驟和上面一樣分別讀取0,1,1仍然轉(zhuǎn)變?yōu)?span id="ozvdkddzhkzd" class="katex--inline">q1q_{1}q1?,并且寫上和原來相同的數(shù)字
這時候的tape head指向了空字符,按照狀態(tài)機(jī)的轉(zhuǎn)換q1q_{1}q1?只能轉(zhuǎn)變?yōu)?span id="ozvdkddzhkzd" class="katex--inline">q2q_{2}q2?,要注意的是,tape head會往左移動一格
我們看看q2q_{2}q2?這邊的轉(zhuǎn)換,碰到1就寫入0,并且向左移動tape head,因為按照二進(jìn)制加法的邏輯,最后一位如果是1,那么+1后變成0,并且會進(jìn)一位,如果最后一位是0,那么就直接變成1就行了,故此有了圖上q2q_{2}q2?的轉(zhuǎn)換
再執(zhí)行一次上面的操作
這次讀取到了0,所以狀態(tài)q2q_{2}q2?將會轉(zhuǎn)變?yōu)?span id="ozvdkddzhkzd" class="katex--inline">q3q_{3}q3?,并且將0覆寫為1,然后向右移動一格
來到了q3q_{3}q3?狀態(tài),在這個狀態(tài)下,只要單純向右移動即可,因為寫入的數(shù)字是相同的
終于到了最后一步啦,看到讀取空字符,然后q3q_{3}q3?狀態(tài)就會轉(zhuǎn)變?yōu)?span id="ozvdkddzhkzd" class="katex--inline">qaq_{a}qa?的接受狀態(tài),因為到達(dá)了終止?fàn)顟B(tài),滿足了圖靈機(jī)的終止條件,所以圖靈機(jī)運(yùn)行完畢
我們來看看,我們輸入的數(shù)字是1011,然后輸出的數(shù)字是1100,所以我們實(shí)現(xiàn)的這個圖靈機(jī)完成了n+1這個函數(shù)的操作步驟
格局(configuration)
configuration翻譯成了格局,但這個東西其實(shí)就是一個圖靈機(jī)在當(dāng)前狀態(tài)下的快照,由當(dāng)前狀態(tài)下tape中的字符,tape head指向的位置,以及當(dāng)前自動機(jī)的狀態(tài)這三個元素組成,可以簡單的用如下圖所示圖靈機(jī)的格局
用字符串表示格局的話,是類似于下面這樣的:
?\triangleright? 1100q1q_{1}q1? 11001
?\triangleright?符號代表開始位置,里面的q1q_{1}q1?代表當(dāng)前的狀態(tài),里面的字符代表的tape中的字符,tape head指向的是狀態(tài)右邊的第一個字符,所以在這個例子里面,tape head指向的是1
Turing’s Thesis
Turing’s Thesis
1、任何能被數(shù)字計算機(jī)執(zhí)行的事情,Turing Machine同樣也能夠完成(從這里可以看出Turing Machine能力相當(dāng)強(qiáng)大)
2、如果你能寫出一個算法來解決某個問題,那么同樣可以寫出一個圖靈機(jī)程序來解決相同的問題
總結(jié)
以上是生活随笔為你收集整理的软件理论基础学习笔记——图灵机的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中文版Eclipse变英文版
- 下一篇: HDMI之启发篇