有限状态机与正则表达式的闭包性质及等价性
1. 补集运算
补集运算是针对有限状态自动机(DFA)的一种操作。对于一个 DFA (M),其语言 (L(M)) 的补集 (\overline{L(M)}) 定义为:
(\overline{L(M)} = {w | w \notin L(M)})
也就是说,(\overline{L(M)}) 包含了所有不在 (L(M)) 中的字符串。
要构造一个能识别 (\overline{L(M)}) 的自动机,该自动机需要在 (M) 拒绝时接受,在 (M) 接受时拒绝。由于 (M) 是 DFA,我们可以通过反转 (M) 的状态角色来实现。具体而言,(M) 的终态在构造的自动机中不再是终态,而 (M) 中的其他状态则成为终态。
以下是补集构造器的实现代码:
;; dfa →dfa
;; Purpose: Construct a dfa for the complement of given dfa’s language
(define (complement-fsa M)
(let* [(new-finals (filter (λ (s) (not (member s (sm-finals M))))
(sm-states M)))]
(make-dfa (sm-states M)
(sm-sigma M)
(sm-start M)
new-finals
(sm-rules
超级会员免费看
订阅专栏 解锁全文
1705

被折叠的 条评论
为什么被折叠?



