1. 有限状态机 (FSM) 的目的
我们需要描述一个系统的控制方面,以使其规范更加精确。
- 这里的“控制”是指系统内部如何根据输入事件作出反应和变化。比如,电梯如何根据你按下的按钮选择楼层,或者自动售货机如何根据你选择的商品进行操作。
2. 有限状态机适用于描述的系统特点
有限状态机适用于描述具有以下特征的系统:
- 有有限的状态集:
- 一个系统的状态就是它当前所处的“情况”或“状态”。比如一个电梯可以有“在底层”,“在中间楼层”,“到达目标楼层”这些不同的状态。有限状态机假设状态数目是有限的,不是无限的。
- 可以从一个状态转移到另一个状态,这种转移是由某个事件(输入)引起的:
- 这意味着,系统的状态变化是由外部的输入或事件触发的。比如电梯从“底层”状态切换到“中间楼层”状态,是因为你按了中间楼层的按钮,这个按钮就是一个输入事件。
1. 有限状态机的基本元素:
有限状态机有三个基本要素:
-
状态集(Q):
- 这是系统可以处于的所有状态的集合。每个状态代表了系统的一种可能情况。例如,在自动售货机中,状态可以是“等待投币”,“等待选择商品”,或者“交易完成”等。
- 这里的“有限”意思是系统的状态数量是有限的,不是无限的。
-
输入集(I):
- 输入集代表所有可能的输入事件。这些输入事件会触发状态的转变。比如,在自动售货机中,输入可以是“投币”,“选择商品”,“取消选择”等。
- 每个输入事件都会导致系统从一个状态转移到另一个状态。
-
转移函数(δ):
- 转移函数是描述状态如何从一个转移到另一个的规则。具体地,转移函数是从状态集和输入集的笛卡尔积(Q × I)到状态集Q的映射。
- 也就是说,给定一个状态和一个输入事件,转移函数会告诉我们应该转移到哪个新状态。
- 需要注意的是,转移函数可能是一个部分函数(partial function),即对于某些输入,可能没有定义。这表示在某些状态下某些输入事件可能不会导致任何转移。
2. 图示说明:
- 图中有两个状态:qj 和 qk。
- 从状态 qj 到状态 qk 的转移是由输入事件i触发的。
- 这表示如果当前系统处于状态 qj,并且输入事件是 i,那么系统会根据转移函数δ进入状态 qk。
- 公式表示:iff δ(qj, i) = qk,即当且仅当转移函数 δ 的值是 qk 时,从状态 qj 会转移到状态 qk。
1. 有限状态机用于指定可接受的字符串集合:
有限状态机可以用来描述某些输入事件序列(即字符串)是否被接受。例如,假设我们有一个字符集 {a, b},通过有限状态机我们可以指定哪些字符串是接受的(比如 "aab")以及哪些字符串是拒绝的(比如 "ab")。有限状态机帮助我们理解哪些输入序列能使系统最终处于接受状态。
2. 增强术语:
为了使有限状态机更加强大,我们可以引入一些增强的术语:
-
一个初始状态(q₀ ∈ Q):
- 系统开始时会处于一个特定的状态,这个状态被称为初始状态。例如,假设状态集 Q = {q₀, q₁, q₂},那么初始状态是 q₀。
-
一组最终状态(F, F ⊆ Q):
- 最终状态是指一组能够“接受”输入的状态。当有限状态机到达某个最终状态时,意味着它接受了输入字符串。在图中,这些最终状态通常用双圈表示。
-
有限的输出集(O):
- 除了状态转移,有限状态机还可以输出信号或值。输出集表示所有可能的输出值。例如,输出可以是“通过”或“失败”,或者是某个具体的数字。
-
转移函数(δ)增强以产生输出信号:
- 原始的转移函数只是描述状态之间的转移,而增强后的转移函数不仅描述状态的转移,还生成输出信号。新的转移函数的形式是:
- δ: Q × I → Q × O,这表示转移函数不仅根据输入事件从一个状态转移到另一个状态,还会生成一个输出信号。
- 例如,如果系统在状态 qj 并且接收到输入 i,转移到状态 qk,并且输出信号 o,则表示为:δ(qj, i) = (qk, o)。
- 原始的转移函数只是描述状态之间的转移,而增强后的转移函数不仅描述状态的转移,还生成输出信号。新的转移函数的形式是:
3. 图示说明:
- 图中的箭头从状态 qj 到状态 qk,标有输入事件 i 和输出 o。
- 这意味着:如果系统当前在状态 qj,并且接收到输入 i,它将转移到状态 qk,同时产生输出信号 o。
1. 有限状态机(FSM)用于指定可接受字符串
- 想象你有一个机器(例如自动售货机)。你可以给机器输入一串操作,比如投币、选择商品等。有限状态机的作用是帮助我们定义“什么样的操作序列(输入的字符串)是机器能够接受的”。
- 例如,假设机器规定,必须先投币再选择商品,如果你不按照这个顺序操作,机器就不接受。
2. 增强的术语
在之前的基本概念(状态、输入、转移)上,我们又加入了几个新的概念来让有限状态机更加复杂和有用。接下来就是这些新概念的简单解释:
-
初始状态(q₀ ∈ Q):
- 这是机器刚开始工作时的状态。就像你进了一个自动售货机,开始时机器是“等待投币”的状态。
-
最终状态(F, F ⊆ Q):
- 这是机器可以接受操作的状态。换句话说,机器到达最终状态时,它会“接受”你输入的操作(比如选择商品,交易完成)。这些状态通常用双圈表示,表示“完成交易”或“操作成功”。
-
输出集(O):
- 除了状态转换,有限状态机还可以“输出”一些东西。这些输出可以是提示信息、操作结果等。比如,你选择了商品,机器可能输出“商品已选”,或者“请插入更多硬币”。
-
增强的转移函数:
- 转移函数是用来决定机器如何从一个状态到另一个状态的规则。这个增强后的转移函数不仅告诉我们机器从一个状态转移到另一个状态,还能产生一个输出。例如,机器从“等待投币”状态转移到“商品选择”状态时,它还会输出“请选择商品”。
- 这种增强的转移函数看起来像这样:
δ(qj, i) = (qk, o)
这意思是:当机器处于状态 qj,并接收到输入 i 时,它会转移到状态 qk,并输出信号 o(比如“请选择商品”)。
3. 图示解释
图中的内容意思是:
- qj 是当前状态,i 是输入(比如投币)。
- 如果机器接收到 i(投币),它就会从状态 qj 转移到下一个状态 qk(比如“商品选择”状态),并输出 o(比如“请选择商品”)。
总结
通过这些增强的术语,我们给有限状态机增加了更多功能:
- 初始状态:定义机器一开始的状态;
- 最终状态:定义机器能接受并完成操作的状态;
- 输出:在状态转移时,机器输出的提示或操作结果;
- 转移函数:不仅决定机器如何从一个状态到另一个状态,还包括它在转移过程中输出的内容。
这些增强让有限状态机不仅仅用来描述状态之间的转换,还能控制机器的行为,确保机器按照预定的规则运行。
1. 假设输入是一个符号(token),没有空格:
- 在这个例子中,输入是一个符号流(没有空格),例如一串字母。有限状态机的任务就是根据字母的顺序,判断这串字母是否符合特定的规则。
2. 示例FSM:
这个图展示了一个有限状态机,设计来识别关键字“begin”和“end”。
-
初始状态(q₀):
- 系统开始时处于状态 q₀。
-
状态转移:
- 从 q₀ 开始,如果输入字母是“b”,则转到 q₁。
- 如果输入字母是“e”,从 q₀ 也可以转到 q₅。
- 然后根据接收到的字母,有限状态机会从一个状态转移到下一个状态,直到输入的字母匹配完整的“begin”或“end”。
-
最终状态(qₓ):
- qf 是最终状态,代表成功地识别了输入的字母序列,确认它是一个有效的关键字(例如“begin”或“end”)。
3. 如何判断输入是否合法:
- 如果输入的是“begin”,有限状态机会从 q₀ 开始,逐字匹配“begin”中的字母,最后到达 qf。
- 如果输入的是“end”,同样的规则会适用,系统会根据字母的顺序进行状态转移,最后到达 qf。
- 如果输入的字母不是“begin”或“end”中的字母,有限状态机会在中途停下来,无法到达 qf,此时该输入就不会被接受。
4. 补充说明:
- 任何不是“begin”或“end”的字母,都会导致系统的状态无法正确转换到最终状态 qf,从而拒绝该输入。
1. 有限状态机作为识别器(FSM as Recognizers)
这张幻灯片讲的是如何使用有限状态机(FSM)来识别某些特定的字词(比如 "begin" 和 "end")。我们的目标是判断输入的字母是不是这两个特定的关键字之一。如果输入的字母是“begin”或“end”,那么FSM会接受这个输入;如果是其他字母,则不接受。
2. 假设输入是一个符号(token),没有空格
- 在这个例子中,输入的内容没有空格,它就是一串字母。我们希望FSM能够判断这些字母是否符合预定的关键字(例如 "begin" 或 "end")。
3. 图示说明:
- q₀是初始状态,表示一开始系统处于什么状态。
- 从状态 q₀ 开始,如果第一个字母是 b,系统就转到 q₁,如果是 e,系统就转到 q₅。
- 之后,系统继续根据输入的每个字母转移到不同的状态,直到完全识别出一个特定的单词(“begin”或者“end”)。
- 最终状态 qf:如果最终输入符合“begin”或者“end”,状态机会进入 qf,表示输入被接受。如果不是这两个字词,系统会停在其他状态,不会进入 qf。
4. 如何判断是否接受:
- 假如你输入的是“begin”:
- 系统从初始状态 q₀ 开始,接收第一个字母 b,然后转到 q₁。
- 接着输入字母 e,系统再转到 q₂。
- 然后是字母 g,系统转到 q₃。
- 继续输入字母 i,系统转到 q₄。
- 最后输入字母 n,系统进入最终状态 qf。
- 这时,系统接受“begin”。
- 如果输入的是“end”:
- 系统从初始状态 q₀ 开始,接收字母 e,转到 q₅。
- 然后输入字母 n,系统转到 q₆。
- 最后输入字母 d,系统进入最终状态 qf。
- 这时,系统接受“end”。
- 如果输入的字母是其他的字母或顺序不对,系统会无法到达最终状态 qf,就会拒绝输入。
5. 总结
这个有限状态机就是为了判断输入的字母序列是不是“begin”或“end”。如果是其中一个,FSM会接受并进入最终状态;如果输入的是其他字母组合,FSM就不会接受并不会进入最终状态。
这张幻灯片描述了一个要求:绘制一个有限状态机(FSM),用于识别编程语言中的标识符。这些标识符必须满足以下条件:
- 以字母开头:标识符的第一个字符必须是字母(a-z或A-Z)。
- 可以包含字母、数字和下划线(_):标识符可以包含字母、数字(0-9)和下划线(_)。
- 不能以下划线结尾:标识符不能以下划线(_)结尾。
FSM设计步骤
-
初始状态(q₀):
- 机器开始时的状态,表示标识符的第一个字符尚未输入。
- 一旦输入字母,机器进入一个接受标识符的状态。
-
接受字母的状态:
- 从初始状态 q₀,如果输入字母(a-z 或 A-Z),转移到一个新的状态,表示标识符的开始部分(例如,状态 q₁)。
- 在 q₁ 状态中,标识符可以继续接受字母、数字或者下划线(_),即机器继续处于 q₁ 状态,直到输入的最后一个字符。
-
接受数字和下划线:
- 从状态 q₁,如果输入的是数字(0-9)或者下划线(_),机器可以继续留在状态 q₁,表示标识符的后续部分。
-
结束条件:
- 如果标识符以下划线结尾,则不能接受此输入。
- 如果输入完所有字符并且不是以下划线结尾,机器就会进入一个 接受状态(例如 q_accept)。
- Accepting State or Final State - A set of states which the machine may halt in, provided it has no input left, in order to accept the string as part of the language. Throughout this course we will exclusively use the term Accepting because I think it is a more descriptive term, but be aware that other places will use the term Final to mean the same thing. Graphically, accepting states are indicated distinctly from other states in any of a number of ways. Common ways include bolding or underlining the name, or using a double circle instead of a single. If the machine has only 1 accepting state, it is oftentimes named with the letter A. It is worth noting that a machine with no accepting states does not accept any string as part of the language (not even the empty string) - it is essentially the Empty Language, ∅.Automata theory/Finite automata - Wikiversity
双圈:最常见的方式是使用双圈(两个圆圈)来表示接受状态。这种表示法让图中的接受状态更加显眼,便于区分。
优点:
-
简单(Simple):
- 有限状态机的结构非常简单,容易理解和实现。它通过明确的状态和状态转移规则来进行操作。
-
广泛使用(Widely used):
- 有限状态机在很多领域都有应用,尤其是在编译器(Compiler)、编程语言(PL)、人工智能(AI)等领域。
缺点:
-
计算能力有限(Its computational power is limited):
- 由于有限状态机的内存限制,它在处理无限的实数等复杂数据时存在困难。FSM的每个状态和转移都需要明确的表示,这使得它无法处理无限可能的状态值。
-
状态数可能爆炸(Number of states may be explosive):
- 有限状态机的状态数目可能会急剧增加,尤其是在处理复杂系统时,状态的数量可能会变得非常大,从而导致难以管理和处理。
-
同步模型(FSMs are essentially a synchronous model):
- 有限状态机本质上是一个同步模型,它假设所有状态转移都在同一时刻发生。这使得它不适合处理需要并发或异步操作的系统。
额外说明:
- 右侧的内容提到AlphaGo使用MCMC(马尔科夫链蒙特卡洛方法),并且马尔科夫链是有限状态机的一个特殊情况。这表明,尽管有限状态机在某些领域很有用,但在更复杂的情况下,像马尔科夫链这样的模型(具有更复杂的转移规则)可能会更适用。