说起这个都是泪啊。

在学校搞了有一年的机器人,阅读了一些 BHuman 的源码,只是会用罢了。对于思想没有深入学习和没有总结与思考。上次魔门塔面试,面试官一直追问关于有限自动机的事情(为什么要用有限状态自动机?他比 if else or switch case 好在哪里?),我却支支吾吾回答不上来。我陷入了对自己学习方式的思考中。

学习一个东西,要多问一个 WHY?

有限自动机(finite automata)亦称时序机,有限离散数字系统的抽象数学模型。一个有限自动机M由五元组(X,Y,S,δ,λ)给定,其中X,Y和S都是非空有限集,分别称为M的输入集、输出集和状态集;δ是笛卡儿积集合S×X到S的映射,称为M的下一状态函数;λ是S×X到Y的单值映射,称为M的输出函数。当δ是单值映射时,称M为确定型有限自动机;当δ是多值映射时,称M为非确定型有限自动机。有限自动机有三种功能:作为序列转换器,将输入序列变换为输出序列;作为序列识别器,识别输入的序列是否具有某种性质;作为序列产生器,产生具有所要求性质的序列。

上面的引用来自百度百科),巴拉巴拉说了一顿,没接触过的同学可能很懵逼。

简单的说一下就是:有限自动机(有穷状态的机器),由一个有限的内部状态集和一组控制规则组成,这些规则是用来控制在当前状态下读入输入符号后应转向什么状态。对应在 BHuman 中的 CABSL 状态就是:options、states、transition、actions。这些可以参考我之前的博客)

那么回到那个问题上:有限状态机比 if else or switch case 好在哪里?

  1. 状态可控
  2. 上下文有关
  3. 抽象、封装

继续学习。