正則表達式構造NFA在轉化為DFA[正則表達式][有限狀態機DFA][不確定的有限狀態機NFA]


DFA-[Deterministic Finite Automaton]

在計算理論中,確定有限狀態自動機或確定有限自動機(英語:deterministic finite automaton, DFA)是一個能實現狀態轉移的自動機。對於一個給定的屬於該自動機的狀態和一個屬於該自動機字母表Σ的字符,它都能根據事先給定的轉移函數轉移到下一個狀態(這個狀態可以是先前那個狀態)。
可以通過建立狀態機來解決問題。
每次輸入都會引起狀態的改變或者不變。再次輸入一個值,狀態又會改變。
我們把所有狀態羅列出來,每次輸入都改變他的狀態。如果最后的狀態是合法的,那么證明這個輸入符合條件。
相應的數學建模中也用到類似的算法思想,解決商人過河問題、人狼羊菜過河問題,以及操作系統中也有涉獵,輸出進程安全序列也是類似的思想

DFA是一個由五元組定義的數學模型:M=(S,∑,δ,s0,F)

 

 

 

(2)S是一個有窮狀態集合

(3)∑是一個有窮的輸入字母表

(4)δ是狀態轉換函數,是SX∑->S上的單值部分映射,δ(s,a)=s'(s∈S,s'∈S)

(5)s0是唯一初態

(6)F是終態集合,F是S的子集

 

NFA

M = ( S,Σ ,δ,s0,F )

(1) S:有窮狀態集
(2)Σ:輸入符號集合,即輸入字母表。假設ε 不是Σ中的元素
(3)δ:將S×Σ映射到2S的轉換函數。s∈S, a∈Σ, δ(s,a)表示從狀態s出發,沿着標記為a的邊所能到達的狀態集合
(4)s0:開始狀態 (或初始狀態),s0∈S
(5)F:接收狀態(或終止狀態)集合,F⊆ S

dfa和nfa的區別

  NFA DFA
初始狀態 不唯一 唯一
弧上的標記 字(單字符字/ε) 字符(串)
轉換關系 非確定 確定

兩個DFA的等價指的是對任何兩個DFA,M和M',如果L(M)=L(M'),則稱兩者是等價的

 

 NFA的確定化-子集法

思路:DFA的每一個狀態對應於NFA的一組狀態,用DFA的一個狀態去記錄NFA輸入一個符號后可能達到的狀態集合

(1)狀態集合I的閉包ε-Closure(I),定義

  1. 若q∈I,q∈ε-Closure(I)
  2. 若q∈I,設從q出發經過任意條ε弧能達到的狀態為q‘,則q’∈ε-Closure(I)

(2)狀態集合I的a弧轉換表示為Ia,Ia=ε-Closure(move(I,a))

 

DFA的最小化

對於給定的DFA    M,尋找一個狀態數比M小的DFA    M'使得L(M)=L(M')

1.狀態的等價性:

假設s和t為M的兩個狀態(終態和非終態)

①若分別從狀態s和狀態t出發都能讀出某個字α而停止於終態,則稱s和t等價

②存在一個字α,使得s和t一個讀出α停止於終態,另一個讀出α停止於非終態,則稱s和t可區別

2.基本思想:

①把M的狀態集分為一些不相交的子集,使任何兩個不同子集狀態是可區別的,而同一子集的任何兩個狀態是等價的

②讓每個子集選出一個代表,同時消去其他狀態

3.划分

①把S划分為終態和非終態兩個子集,形成基本划分∏

②假定某個時候∏已含m個子集,記為∏={I(1),I(2),…,I(m)},檢查∏中的每個子集能否進一步划分:

    (a)假定s1和s2是I(i)={s1,s2,…sk}中的兩個狀態,它們經過a弧分別到達t1和t2,而t1和t2屬於現行∏中的兩個不同子集,則s1和s2不等價

 

    (b)一般地,對於某個I(i),若Ia(i)落於現行∏中N個不同的子集,則應把I(i)划分成N個不相交的組

例:

 

 

 

正則表達式

語言 L = { a } { a , b } ∗ ( { ϵ } ∪ ( { . , _ } { a , b } { a , b } ∗ ) ) L=\{a\}\{a,b\}^*(\{\epsilon \} \cup (\{.,\_\}\{a,b\}\{a,b\}^*))L={a}{a,b}({ϵ}({.,_}{a,b}{a,b}))

 

這個語言是指,由a開頭,后接任意長度的a、b串,然后再接空串(代表結束)。或者是接以._開頭的,后接長度大於等於1的a、b串。

正則表達式(Regular Expression, RE)是一種用來描述正則語言的更緊湊的表示方法。

以上面的語言舉例,寫成正則表達式則可表示成:r = a ( a ∣ b ) ∗ ( ϵ ∣ ( . ∣ ) ( a ∣ b ) ( a ∣ b ) ∗ ) r=a(a|b)^*(\epsilon | (.|_)(a|b)(a|b)^*)r=a(ab)(ϵ(.)(ab)(ab))

正則表達式可以由較小的正則表達式按照特定規則遞歸地構建。每個正則表達式r定義一個語言。記為L(r)。這個語言也是根據r的子表達式所表示的語言遞歸定義的。

定義

  • 如果ϵ \epsilonϵ是一個RE,L ( ϵ ) = { ϵ } L(\epsilon) = \{\epsilon\}L(ϵ)={ϵ}
  • 如果α ∈ ∑ \alpha \in \sumα∑,則α \alphaα是一個RE,L ( α ) = { α } L(\alpha)=\{\alpha\}L(α)={α}
  • 假設rs都是RE,表示的語言分別是L(r)L(s),則
    • r ∣ s r|srs是一個RE,L ( r ∣ s ) = L ( r ) ∪ L ( s ) L(r|s) = L(r) \cup L(s)L(rs)=L(r)L(s)
    • rs(r連接s)是一個RE,L ( r ∣ s ) = L ( r ) L ( s ) L(r|s) = L(r)L(s)L(rs)=L(r)L(s)
    • r ∗ r^*r∗是一個RE,L ( r ∗ ) = ( L ( r ) ) ∗ L(r^*) = (L(r))^*L(r)=(L(r))
    • ( r ) (r)(r)是一個RE,L ( ( r ) ) = L ( r ) L((r)) = L(r)L((r))=L(r)

注:運算的優先級:*、連接、|

例:∑ = { a , b } \sum = \{a,b\}={a,b},則

  • L ( a ∣ b ) = L ( a ) ∪ L ( b ) = { a } ∪ { b } = { a , b } L(a|b) = L(a) \cup L(b) = \{a\} \cup \{b\} = \{a,b\}L(ab)=L(a)L(b)={a}{b}={a,b}
  • L ( ( a ∣ b ) ( a ∣ b ) ) = L ( a ∣ b ) L ( a ∣ b ) = { a , b } { a , b } = { a a , a b , b a , b b } L((a|b)(a|b)) = L(a|b)L(a|b) = \{a,b\}\{a,b\} = \{aa,ab,ba,bb\}L((ab)(ab))=L(ab)L(ab)={a,b}{a,b}={aa,ab,ba,bb}
  • L ( a ∗ ) = ( L ( a ) ) ∗ = { a } ∗ = { ϵ , a , a a , a a a , . . . } L(a^*) = (L(a))^* = \{a\}^* = \{\epsilon,a,aa,aaa,...\}L(a)=(L(a))={a}={ϵ,a,aa,aaa,...}
  • L ( ( a ∣ b ) ∗ ) = ( L ( a ∣ b ) ) ∗ = a , b ∗ = { ϵ , a , b , a a , a b , b a , b b , . . . } L((a|b)^*) = (L(a|b))^* = {a,b}^* = \{\epsilon,a,b,aa,ab,ba,bb,...\}L((ab))=(L(ab))=a,b={ϵ,a,b,aa,ab,ba,bb,...}
  • L ( a ∣ a ∗ b ) = L ( a ) ∪ L ( a ∗ b ) = L ( a ) ∪ L ( a ∗ ) L ( b ) = { a , b , a b , a a b , a a a b , . . . } L(a|a^*b) = L(a) \cup L(a^*b) = L(a) \cup L(a^*)L(b) = \{a,b,ab,aab,aaab,...\}L(aab)=L(a)L(ab)=L(a)L(a)L(b)={a,b,ab,aab,aaab,...}

注:可以用RE定義的語言叫做正則語言(regular language)或正則集合(regular set)。

RE的代數定理

定律 描述
r | s = s | r | 是可以交換的
r | (s | t) = (r | s) | t | 是可以結合的
r ( s t ) = ( r s ) t 連接是可以結合的
r (s | t) = rs | rt 連接對 | 是可分配的
ϵ r = r ϵ = r \epsilon r = r \epsilon = rϵr=rϵ=r ϵ \epsilonϵ是連接的單位元
$r^* = (r \epsilon)^*$
r ∗ ∗ = r ∗ r^{**} = r^*r=r *具有冪等性

正則文法與正則表達式等價

  • 對任何正則文法G,存在定義同一語言的正則表達式r
  • 對任何正則表達式r,存在生成同一語言的正則文法


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM