有穷自动机

有穷自动机

\(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"))
posted @ 2024-10-31 17:48  -风间琉璃-  阅读(94)  评论(0)    收藏  举报