形式語言與自動機 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 基礎

  • 性質:
    1. 每個過程都是有窮可描述的。
    2. 過程是離散可執行的。
  • 基本模型:
    1. 一個讀寫頭配一個右端無限的紙帶。讀寫頭有狀態,這些狀態屬於有限狀態集QQ.有一個開始狀態q0q0Qq_0 ,q_0\in Q,被接受的狀態集合是F,FQF,F\sube Q.
    2. 紙帶有單元格(cell),單元格上書寫帶符(tape symbol),這些帶符屬於有限帶符號集Σ\Sigma.有一個特殊帶符空白符BB.
    3. 讀寫頭每次從紙帶讀取一個符號,這些符號屬於有限輸入符號集TT.輸入符號的種類可能比紙帶的符號種類少(TΣT\sube \Sigma),最起碼空白符BB在紙帶上而不在輸入符號集裏(BΣTB\in \Sigma-T)。
    4. 圖靈機可以根據狀態和輸入字符向左向右移動,並且在紙帶上寫字,這全由轉移函數δ:Q×ΣQ×Σ×{L,R}\delta:Q\times \Sigma \to Q\times \Sigma \times \{L,R\}決定。其含義是δ()=()\delta(當前狀態,讀入字符)=(下一個狀態,寫下的字符,向左向右移動)
    5. 由於圖靈機是上下文有關的,所以其格局爲ω1qω2\omega_1q\omega_2,描述圖靈機(Turning Machine, TM)的瞬間工作終態。ω1ω2\omega_1\omega_2是從左端到右端空白符號爲止的內容。(因爲右端無限長)。
      ω1qω2\omega_1q\omega_2表示讀寫頭正在掃描ω2\omega_2的最左字符。
      ω2=ϵ\omega_2=\epsilon表示讀寫頭正在掃描空白字符。
      當讀寫頭在最左邊還要求向左時,拒絕移動,仍然停留在最左端。
    6. 圖靈機是狀態接受的。起初有一個字符串在紙帶上,讀寫頭指向最左單元,其實狀態是q0q_0,只要能在工作過程中進入某個接受狀態,則立即停機,認爲接受。
    7. 無法判斷圖靈機MM在接受某個串ωT\omega\in T^*後是否停機,因爲很容易可以寫出死循環。停機問題是不可判定的。被接受的字符串一定會停機,不被接受的就不知道了。

6.2 圖靈機設計實例

6.2.1 L={anbn}L=\{a^nb^n\}

  • 思路:一一配對,從最左的a開始,每讀取一個a置爲無關字符x,然後到b串裏讀取最左一個b,再把b置爲,在找最左的a,循環往復。凡是在配對中找不到另一個字符的,說明a<ba\lt b或者a>ba\gt b,就立即停機,不接受。

6.2.2 L={0n1n2n}L=\{0^n1^n2^n\}

  • 同理,消除一個0就把1和2置爲無用字符。

6.2.3 整數函數計算

  • 思路:轉化爲1進制,即把整數i0i\ge 0表示成0i0^iii個0)。
  • 如果一個函數有kk自變量i1,i2,,iki_1,i_2,\dots,i_k,則開始時把整數挨個放置,並且中間用11隔開:0i110i2110ik0^{i_1}10^{i_2}1\dots10^{i_k}.
  • 如果圖靈機停止(不論狀態是否接受),則帶上的結果0m0^mf(i1,i2,,ik)=mf(i_1,i_2,\dots,i_k)=m的計算結果。
  • 所有常用的整數算數函數都是全遞歸。

6.2.4 真減法:mΘn=(m>n)?mn:0m\Theta n=(m>n)?m-n:0

  • 思路:用0m10n0^m10^n作爲帶子,每讀一個0m0^m最左端的0就置爲B,把0n0^n最左端的0置爲1(不能置空,因爲在11100B中,如果變成了BBBBB,就不知道是否用完了0)。讓再回去找0m0^m的0.如果有在0n0^n找0遇到B,說明 m>nm\gt n,則將所有非B的符號全部換成0,這些0有0nm0^{n-m}個。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章