无编辑摘要 |
(→扩展转移函数) |
||
第47行: | 第47行: | ||
=== 扩展转移函数 === | === 扩展转移函数 === | ||
扩展<math>\delta</math>到字符串,定义扩展转移函数<math>\hat{\delta}:Q×\Sigma^* \rightarrow Q</math>为 | 扩展<math>\delta</math>到字符串,定义扩展转移函数<math>\hat{\delta}:Q×\Sigma^* \rightarrow Q</math>为 | ||
<math> | <math> | ||
\hat{\delta}(q,w)=\begin{cases} | \hat{\delta}(q,w)=\begin{cases} | ||
第53行: | 第54行: | ||
\end{cases} | \end{cases} | ||
</math> | </math> | ||
其中<math>q \in Q$,$a \in \Sigma</math>, <math>w,x \in \Sigma^*</math> | 其中<math>q \in Q$,$a \in \Sigma</math>, <math>w,x \in \Sigma^*</math> | ||
2022年2月19日 (六) 17:12的版本
确定性有穷自动机
定义
确定性有穷自动机(Deterministic Finite Automaton, DFA)是一个5元组[math]\displaystyle{ (Q,\Sigma,\delta,q_0,F) }[/math],其中
- Q是一个有穷集合,称为状态集
- [math]\displaystyle{ \Sigma }[/math]是一个有穷集合,称为字母表
- [math]\displaystyle{ \delta:Q×\Sigma \rightarrow Q }[/math]是状态转移函数
- [math]\displaystyle{ q_0\in Q }[/math]是起始状态
- [math]\displaystyle{ F\subseteq Q }[/math]是接受状态集
一台确定性有穷自动机有如上五个部分组成,介绍如下:
- 它有一个状态集,表示它有的全部状态
- 它有一个输入字母表,指明所有允许的输入符号
- 它有一个根据一个输入字符从一个状态到另一个状态的规则
- 它有一个起始状态,表示处理所起始的状态
- 它有一个接受状态集,表示处理表达为接受的状态
用处
主要对于输入的字符串判定是否该确定性有穷自动机所识别的语言,对此表示接受及不接受。
而如上的确定性有穷自动机是识别以0结尾的串,对于以0结尾的串[math]\displaystyle{ x \in \Sigma^* }[/math],表示接受,反之不接受。
确定性有穷自动机可以用来定义语言也可用于识别语言。
运算
假如现在有个确定性有穷自动机[math]\displaystyle{ \mathcal M_1=(Q,\Sigma,\delta,q_0,F) }[/math]
[math]\displaystyle{ \begin{align} Q=\{q_0,q_1\}\\ \Sigma=\{0,1\}\\ \delta=\begin{Bmatrix} \delta(q_0,0)=q_1\\ \delta(q_0,1)=q_0\\ \delta(q_1,0)=q_1\\ \delta(q_1,1)=q_0 \end{Bmatrix}\\ F=\{q_1\} \end{align} }[/math]
假如对于上面的确定性有穷自动机[math]\displaystyle{ \mathcal M_1 }[/math],输入字符串[math]\displaystyle{ 010 }[/math],此时从初始状态[math]\displaystyle{ q_0 }[/math]开始,读入第一个字符[math]\displaystyle{ 0 }[/math],因为[math]\displaystyle{ \delta(q_0,0)=q_1 }[/math],所以转移状态至[math]\displaystyle{ q_1 }[/math],继续读入下一个字符[math]\displaystyle{ 1 }[/math],因为[math]\displaystyle{ \delta(q_1,1)=q_0 }[/math],所以转移状态至$q_0$,继续读入下一个字符[math]\displaystyle{ 0 }[/math],因为[math]\displaystyle{ \delta(q_0,0)=1 }[/math]所以转移状态至[math]\displaystyle{ q_1 }[/math],运算结束。因为最后停在状态[math]\displaystyle{ q_1 }[/math],因为[math]\displaystyle{ q_1 \in F }[/math],所以确定性有穷自动机[math]\displaystyle{ \mathcal M_1 }[/math]接受字符串[math]\displaystyle{ 010 }[/math]。
扩展转移函数
扩展[math]\displaystyle{ \delta }[/math]到字符串,定义扩展转移函数[math]\displaystyle{ \hat{\delta}:Q×\Sigma^* \rightarrow Q }[/math]为
[math]\displaystyle{ \hat{\delta}(q,w)=\begin{cases} q &w=\varepsilon \\ \delta(\hat{\delta}(q,x),a)&w=xa \end{cases} }[/math]
其中[math]\displaystyle{ q \in Q$,$a \in \Sigma }[/math], [math]\displaystyle{ w,x \in \Sigma^* }[/math]
定理一
[math]\displaystyle{ \hat{\delta}(q,xy)=\hat{\delta}(\hat{\delta}(q,x),y) }[/math]
- DFA的语言
若[math]\displaystyle{ M=(Q,\Sigma,\delta,q_0,F) }[/math]是一个确定性有穷自动机,则M接受的语言为
[math]\displaystyle{ \mathcal{L(M)}=\{w\in \Sigma^*|\hat{\delta}(q_0,w)\in F\} }[/math]