形式语言与自动机 Part.6 图灵机
生活随笔
收集整理的這篇文章主要介紹了
形式语言与自动机 Part.6 图灵机
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
課程名:形式語言與自動機
作者:Lupinus_Linn
許可證:CC-BY-NC-SA 3.0 創作共用-署名-非商業性-相同方式共享
- 署名(英語:Attribution,BY):您(用戶)可以復制、發行、展覽、表演、放映、廣播或通過信息網絡傳播本作品;您必須按照作者或者許可人指定的方式對作品進行署名。
- 非商業性使用(英語:Noncommercial,NC):您可以自由復制、散布、展示及演出本作品;您不得為商業目的而使用本作品。
- 相同方式共享(英語:Sharealike,SA):您可以自由復制、散布、展示及演出本作品;若您改變、轉變或更改本作品,僅在遵守與本作品相同的許可條款下,您才能散布由本作品產生的派生作品。(參見copyleft。)
引用:
- 本文中部分文字與圖片引用自北京郵電大學計算機學院王柏教授的《形式語言與自動機》課程課件。
- 緒論中的證明方法部分引自清華大學王生原老師課件。
- 部分題目插圖引用自北京郵電大學出版社《形式語言與自動機 第二版》教材。
在此一并表示感謝,并不做商業用途。
本筆記所有內容的傳送門
Part.1緒論, Part.2 語言與文法
Part 3.有限自動機
Part.4 正則語言,2DFA,Mealy&Moore機
Part.5 上下文無關語言與下推自動機(PDA)
Part.6 圖靈機
文章目錄
- Part.6 圖靈機
- 6.1 基礎
- 6.2 圖靈機設計實例
- 6.2.1 L = { a n b n } L=\{a^nb^n\} L={anbn}
- 6.2.2 L = { 0 n 1 n 2 n } L=\{0^n1^n2^n\} L={0n1n2n}
- 6.2.3 整數函數計算
- 6.2.4 真減法: m Θ n = ( m > n ) ? m ? n : 0 m\Theta n=(m>n)?m-n:0 mΘn=(m>n)?m?n:0
Part.6 圖靈機
6.1 基礎
- 性質:
- 每個過程都是有窮可描述的。
- 過程是離散可執行的。
- 基本模型:
- 一個讀寫頭配一個右端無限的紙帶。讀寫頭有狀態,這些狀態屬于有限狀態集 Q Q Q.有一個開始狀態 q 0 , q 0 ∈ Q q_0 ,q_0\in Q q0?,q0?∈Q,被接受的狀態集合是 F , F ? Q F,F\sube Q F,F?Q.
- 紙帶有單元格(cell),單元格上書寫帶符(tape symbol),這些帶符屬于有限帶符號集 Σ \Sigma Σ.有一個特殊帶符空白符 B B B.
- 讀寫頭每次從紙帶讀取一個符號,這些符號屬于有限輸入符號集 T T T.輸入符號的種類可能比紙帶的符號種類少( T ? Σ T\sube \Sigma T?Σ),最起碼空白符 B B B在紙帶上而不在輸入符號集里( B ∈ Σ ? T B\in \Sigma-T B∈Σ?T)。
- 圖靈機可以根據狀態和輸入字符向左向右移動,并且在紙帶上寫字,這全由轉移函數 δ : Q × Σ → Q × Σ × { L , R } \delta:Q\times \Sigma \to Q\times \Sigma \times \{L,R\} δ:Q×Σ→Q×Σ×{L,R}決定。其含義是 δ ( 當 前 狀 態 , 讀 入 字 符 ) = ( 下 一 個 狀 態 , 寫 下 的 字 符 , 向 左 向 右 移 動 ) \delta(當前狀態,讀入字符)=(下一個狀態,寫下的字符,向左向右移動) δ(當前狀態,讀入字符)=(下一個狀態,寫下的字符,向左向右移動)
- 由于圖靈機是上下文有關的,所以其格局為 ω 1 q ω 2 \omega_1q\omega_2 ω1?qω2?,描述圖靈機(Turning Machine, TM)的瞬間工作終態。 ω 1 ω 2 \omega_1\omega_2 ω1?ω2?是從左端到右端空白符號為止的內容。(因為右端無限長)。
ω 1 q ω 2 \omega_1q\omega_2 ω1?qω2?表示讀寫頭正在掃描 ω 2 \omega_2 ω2?的最左字符。
ω 2 = ? \omega_2=\epsilon ω2?=?表示讀寫頭正在掃描空白字符。
當讀寫頭在最左邊還要求向左時,拒絕移動,仍然停留在最左端。 - 圖靈機是狀態接受的。起初有一個字符串在紙帶上,讀寫頭指向最左單元,其實狀態是 q 0 q_0 q0?,只要能在工作過程中進入某個接受狀態,則立即停機,認為接受。
- 無法判斷圖靈機 M M M在接受某個串 ω ∈ T ? \omega\in T^* ω∈T?后是否停機,因為很容易可以寫出死循環。停機問題是不可判定的。被接受的字符串一定會停機,不被接受的就不知道了。
6.2 圖靈機設計實例
6.2.1 L = { a n b n } L=\{a^nb^n\} L={anbn}
- 思路:一一配對,從最左的a開始,每讀取一個a置為無關字符x,然后到b串里讀取最左一個b,再把b置為,在找最左的a,循環往復。凡是在配對中找不到另一個字符的,說明 a < b a\lt b a<b或者 a > b a\gt b a>b,就立即停機,不接受。
6.2.2 L = { 0 n 1 n 2 n } L=\{0^n1^n2^n\} L={0n1n2n}
- 同理,消除一個0就把1和2置為無用字符。
6.2.3 整數函數計算
- 思路:轉化為1進制,即把整數 i ≥ 0 i\ge 0 i≥0表示成 0 i 0^i 0i( i i i個0)。
- 如果一個函數有 k k k自變量 i 1 , i 2 , … , i k i_1,i_2,\dots,i_k i1?,i2?,…,ik?,則開始時把整數挨個放置,并且中間用 1 1 1隔開: 0 i 1 1 0 i 2 1 … 1 0 i k 0^{i_1}10^{i_2}1\dots10^{i_k} 0i1?10i2?1…10ik?.
- 如果圖靈機停止(不論狀態是否接受),則帶上的結果 0 m 0^m 0m為 f ( i 1 , i 2 , … , i k ) = m f(i_1,i_2,\dots,i_k)=m f(i1?,i2?,…,ik?)=m的計算結果。
- 所有常用的整數算數函數都是全遞歸。
6.2.4 真減法: m Θ n = ( m > n ) ? m ? n : 0 m\Theta n=(m>n)?m-n:0 mΘn=(m>n)?m?n:0
- 思路:用 0 m 1 0 n 0^m10^n 0m10n作為帶子,每讀一個 0 m 0^m 0m最左端的0就置為B,把 0 n 0^n 0n最左端的0置為1(不能置空,因為在11100B中,如果變成了BBBBB,就不知道是否用完了0)。讓再回去找 0 m 0^m 0m的0.如果有在 0 n 0^n 0n找0遇到B,說明 m > n m\gt n m>n,則將所有非B的符號全部換成0,這些0有 0 n ? m 0^{n-m} 0n?m個。
總結
以上是生活随笔為你收集整理的形式语言与自动机 Part.6 图灵机的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ctone T01双卡双待Android
- 下一篇: Linux基础知识与实操-篇三: 文件压