解釋理論計算機科學(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閉包。

更新於:2021年6月11日

14K+ 次瀏覽

啟動您的職業生涯

透過完成課程獲得認證

開始
廣告
© . All rights reserved.