解釋理論計算機科學(TOC)中正則語言的不同運算。
語言是從某個字母表(有限或無限)中的一組字串。換句話說,Σ*的任何子集L在TOC中都是一種語言。
一些**特殊語言**如下所示:
- {} 空集/語言,不包含任何字串。
- {ε} 包含一個字串的語言,空字串。
示例
Σ = {0, 1}
L = {x | x ∈ Σ* 且x包含偶數個0}
Σ = {0, 1, 2,…, 9, .}
L = {x | x ∈ Σ* 且x構成一個有限長度的實數}
= {0, 1.5, 9.326,.}
Σ = {a, b, c,…, z, A, B,…, Z}
L = {x | x ∈ Σ* 且x是Pascal保留字}
Σ = {BEGIN, END, IF,…}
Σ = {Pascal保留字} ∪ {(, ), ., :, ;,…} ∪ {合法的Pascal識別符號}
L = {x | x ∈ Σ* 且x是一個語法正確的Pascal程式}
Σ = {英語單詞}
L = {x | x ∈ Σ* 且x是一個語法正確的英語句子}
正則語言的運算
正則語言的一些運算如下:
- 並集
- 交集
- 差集
- 連線
- Kleene星閉包
讓我們一一瞭解這些運算。
並集
如果L1和L2是兩個正則語言,它們的並集L1∪L2也將是正則的。
例如,L1 = {an | n > 0} 和 L2 = {bn | n > 0}
L3 = L1 ∪ L2 = {an ∪ bn | n > 0} 也是正則的。
交集
如果L1和L2是兩個正則語言,它們的交集L1∩L2也將是正則的。
例如:
L1 = {ambn | n > 0 且 m > 0} 和
L2 = {ambn ∪ bnam | n > 0 且 m > 0}
L3 = L1 ∩ L2 = {ambn | n > 0 且 m > 0} 也是正則的。
連線
如果L1和L2是兩個正則語言,它們的連線L1.L2也將是正則的。
例如:
L1 = {an | n > 0} 和 L2 = {bn | n > 0}
L3 = L1.L2 = {am.bn | m > 0 且 n > 0} 也是正則的。
Kleene閉包
如果L1是一個正則語言,它的Kleene閉包L1*也將是正則的。
例如,L1 = (a ∪ b),L1* = (a ∪ b)*
補集
如果L(G)是一個正則語言,它的補集L'(G)也將是正則的。可以透過從所有可能的字串中減去L(G)中的字串來找到語言的補集。
例如:
L(G) = {an | n > 3}
L'(G) = {an | n ≤ 3}
注意:如果由兩個正則表示式生成的語言相同,則這兩個正則表示式是等價的。例如,(a+b*)* 和 (a+b)* 生成相同的語言。由(a+b*)*生成的每個字串也由(a+b)*生成,反之亦然。
示例1
編寫接受集合Σ={a}上所有a組合的語言的正則表示式。
所有a的組合意味著a可以是零個、一個、兩個等等。如果a出現零次,則表示空字串。也就是說,我們期望集合為{ε, a, aa, aaa, …}。
因此,我們給出如下正則表示式:
R = a*
即a的Kleene閉包。
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP