視頻課程:北大的劉田老師的理論計算機基礎
書籍:1.《計算理論導引》,麻省理工,中文翻譯本 2. 《computational complexity: a modern approach》,普林斯頓
本質:通過學習這一個課程,解決什么問題是能計算的,什么是不能計算的?有多快,要用多少存儲?以及采用什么計算模式?
課程結構:針對上述課程關心的三個問題,分為三大塊,
1)自動機:即形式語言、自動機;采用什么計算模型?
2)可計算性:即可計算理論及算法;解決哪些是可計算的、哪些是不可計算的?
3)復雜性:即計算復雜性理論;要用多少時間、要用多少存儲?
1 自動機與語言
這一部分解決:有哪些計算裝置?能力如何?
包括有窮自動機、下推自動機、圖靈機
1.1 有窮自動機與正則語言
包括確定性有窮自動機(deterministic finite automaton,DFA)、非確定性有窮自動機(nondeterministic finite automaton,NFA)
1.1.1 確定性有窮自動機DFA
有窮自動機兩個要素:狀態、轉移
一般用狀態圖或狀態表來表示自動機
有窮指的的是有窮個狀態,確定指的是接受輸入后狀態的轉移是確定的
接受狀態、拒絕狀態、初始狀態
馬爾科夫鏈
有窮自動機的形式定義:一個5元組
計算的形式定義:
如果一個語言被一台有窮自動機識別,則稱它是正則語言
正則運算:包括連接、並、星號(注意不包括補、交)
正則語言對正則運算封閉,也對補運算、交運算封閉(即對A,B兩個正則語言做並、連接、星號、補或交運算之后仍然是正則語言)
補運算證明思路:只要將接受狀態改動下即可補運算
並運算證明思路:讓兩個自動機同時運行 只要兩個自動機有一個接受 我就接受
交運算證明思路:1)交可以根據布爾運算轉化為補和並2)構造自動機,讓2個自動機同時運行
連接運算證明思路:還是運行2自動機,和交運算並運算不同,不是同時運行,是先后運行;把輸入分割為2部分,先后輸入到2自動機,難點是何處斷開;當遇到第一個斷開點,第一個自動機不停繼續走,第二個自動機開始啟動,那么每次遇到一個斷開點,第一個自動機保留一個副本,繼續往下走,第二個自動機啟動新副本從這兒往下走;那么只要控制斷開點是常數個,就可以設計有窮自動機了
星號運算證明思路:類似證明,不過是啟動一個自動機,把輸入串截成若干段,每段都是接受的,每段都是重啟自動機,難點和連接運算一樣,在何處截斷?
1.1.2 非確定性有窮自動機NFA
下一個狀態可以不唯一確定
包含ε移動,多種選擇(含0種選擇)
計算樹
非確定性自動機可以讓證明簡單,也可以讓自動機變得簡單
非確定性自動機是概念上的突破 更簡單
確定性自動機的狀態數更多,計算簡單:描述復雜,分析簡單
非確定性自動機狀態數簡單,計算復雜:描述簡單,分析復雜
確定性自動機是真實的
非確定性自動機只是方便分析,沒有實物,無法制造,只是數學概念
非確定有窮自動機的形式定義:
計算的定義:
等價性:每台DFA都有對應的NFA,兩台機器識別相同語言
推論:一個語言是正則的,當且僅當有一台NFA識別它
用NFA對正則運算的封閉性證明更加簡單,用ε移動連接一下就搞定了
1.1.3 正則表達式
正則表達式是描述模式的手段
正則表達式形式定義:
是一個歸納定義
省略最外層括號
規定優先級,星號 > 連接 > 並
正則表達式 等價於 正則語言 等價於 有窮自動機
利用泵引理證明一個語言是非正則語言
1.2 下推自動機與上下文無關文法
1.2.1 上下文無關文法
文法 文法(生成的)語言
產生式 替換規則 產生式縮寫
變元 非終結符 初始符
非變元 終結符
派生 語法分析樹
上下文無關文法CFG定義
一步生成 任意步生成(派生,推導)
上下文無關文法生成的語言稱為上下文無關語言CFG
設計CFG:合並、正則、匹配、遞歸
正則語言是實際上CFG的一種特例
ww是上下文有關的 非ww是上下文有關的
定理:CFG對並運算封閉
定理:正則語言都是上下文無關語言
最左派生 文法的歧義性 歧義文法 固有歧義語言
非確定性
喬姆斯基范式CNF
等價:兩個文法生成相同語言
定理:任意CFG都有等價的CNF
形式語言:零型文法(任意圖靈機識別的文法TM) 一型文法(上下文有關文法 線性有界自動機LBA) 二型文法(上下文無關文法 下推自動機PDA) 三型文法(典型代表正則表達式 NFA DFA)
1.2.2 下推自動機PDA
比非確定性有窮自動機多了個設備--棧,棧可以做推入和彈出
下推自動機有非確定性的,這個非確定性直接擴展了下推自動機的能力,比如固有歧義文法,和有窮自動機不同,有窮自動機的確定性與否,實際上是等價的,不改變自動機的能力
所以一般下推自動機指非確定性下推自動機,即PDA即NPDA
形式定義,6元組
PDA計算
另一個例子
的