有穷自动机
有穷自动机
\(FA\) 模型
转换图(Transition Graph)
-
结点: \(FA\)的状态
-
初始状态: 只有一个, 由start箭头指向
-
终止状态: 可以有多个,用双圈表示
-
带标记的有向边,如果对于输入a ,存在一个从状态p到状态q的转换,就在p,q之间画一条有向边,并标记上a
graph LR
start --> x1["0"]
x1["0"] --"\na"--> x1
x1["0"] --"\nb"--> x1
x1--"\na"--> x2["1"]
x2--"\nb"-->x3["2"]
x3--"\nb"-->x4((("3")))
\(FA\) 定义(接收)的语言
最长子串匹配原则
-
当输入串的多个前缀与一个或多个模式匹配时,总是选择最长的前缀进行匹配
graph LR start -->x0(("0")) x0 --"<\n\n"--> x1((("1"))) x1--"=\n\n"-->x2((("2"))) x0--"\n\n+"-->x3((("3"))) x3--"\n\n+"-->x4(("4")) -
在到达某个终态之后,只要输入带上还有符号,FA就继续前进,以便寻找尽可能长的匹配
\(FA\) 的分类
- 确定的 \(FA\) \((DFA)\)
- 非确定的 \(FA\) \((NFA)\)
\(DFA\)
\[M=(S,\Sigma ,\delta , s_0 ,F)
\]
- S : 有穷状态集
- \(\Sigma\) : 输入字母表。即输入符号集合。这里假设 \(\epsilon\) 不是 \(\Sigma\) 中的元素
- \(\delta\) : 将 $S \times \Sigma $ 映射到 \(S\) 的转换函数。\(\forall s \in S ,a \in \Sigma ,\delta(s,a)\)表示从状态s 出发,沿着标记为a的边所能达到的状态。
- \(s_0\) : 初始状态, \(s_0 \in S\)
- \(F\) : 终止状态 , \(F \subseteq S\)
- \(FA \ \Leftrightarrow 正则表达式 \Leftrightarrow 正则文法\)
带有 “\(\epsilon - 边\)” 的\(NFA\)
graph LR
start ---->x1(("A"))
x1--"\n\n0"-->x1
x2--"\n\n1"-->x2
x3--"\n\n2"-->x3
x1--"e\n\n"-->x2(("B"))
x2--"e \n\n"-->x3(("C"))
任何时候都有比放弃更好的选择。

浙公网安备 33010602011771号