Finite automata 什么是有限状态自动机?程序员为什么要知道它们?
呃,问题是怎么说的。这是我一直听说的事情,但我还没有时间去调查Finite automata 什么是有限状态自动机?程序员为什么要知道它们?,finite-automata,Finite Automata,呃,问题是怎么说的。这是我一直听说的事情,但我还没有时间去调查 (更新)我可以查一下定义。。。但为什么不(正如@erikson所指出的)深入了解你的真实经历和轶事呢。社区维基将帮助人们投票选出最有见解的答案。到目前为止读得很有趣,谢谢 是的!你可以查一下 简而言之,这是一种可以用来表示具有具体状态的系统的技术(与量子状态/概率分布相反) 引述: 有限状态机(FSM)或有限状态机 状态自动机(复数:自动机)或 简单地说,状态机就是 由有限数组成的行为 状态之间的转换 国家、政策和行动。有限状态
(更新)我可以查一下定义。。。但为什么不(正如@erikson所指出的)深入了解你的真实经历和轶事呢。社区维基将帮助人们投票选出最有见解的答案。到目前为止读得很有趣,谢谢 是的!你可以查一下
简而言之,这是一种可以用来表示具有具体状态的系统的技术(与量子状态/概率分布相反) 引述: 有限状态机(FSM)或有限状态机 状态自动机(复数:自动机)或 简单地说,状态机就是 由有限数组成的行为 状态之间的转换 国家、政策和行动。有限状态 机器是机器的抽象模型 具有基本内部结构的机器 记忆 那么,这对你意味着什么?简单地说,它是表示您所关心的系统从开始状态到结束状态的路径的有效方法。使用正则表达式作为一个相当容易理解的示例,让我们看看AB+C模式(假设那个加号是上标)。我希望这种模式能够接受诸如“ABC”、“ABBC”、“ABBC”等字符串。在开始时,C的结尾是B的中间数(大于或等于1)。 如果你想一想,用一幅图片来思考这个问题几乎更容易。用文本假装它(我的括号是一个回环弧),你可以看到a(在左边)是开始状态,C(在右边)是结束状态
_
( )
A --> B --> C
从FSAs开始,您可以继续您的计算复杂性之旅,前往地球
但是,您也可以使用状态机来表示真实的行为和系统。在我的世界里,我们使用它们来模拟实际工作人员的特定工作流,这些人员使用的组件极不容忍状态顺序中的错误。例如,“A最好在C之前出现,否则会有一个非常严重的问题。现在就不可能了。”每个程序员都应该知道它们,因为它们是解决某些类型问题的优秀工具,通常的“迭代思考”方法会产生令人讨厌的复杂代码 一个典型的例子是游戏AI,NPC有不同的状态,根据玩家所在的位置而变化,比如:
- NPC_状态_空闲
- NPC_状态_警戒(100米以下玩家)
- NPC状态(玩家攻击NPC)
- NPC_州_逃离(健康状况不佳)
形式上,FSA是代数结构F=〈∑,S,s0,F,δ〉 其中,∑是输入字母表,S是一组状态,s0∈ S是一个特定的开始状态,F⊆ S是一组接受态,δ:S×∑→ S是状态转换函数。其他网站(如Wikipedia)更好地回答它,因为已经有了相当广泛的答案 为什么您应该了解它们:因为您可能已经实现了它们 任何时候,当您的代码具有有限数量的可能状态(即“有限状态”部分)并在某个输入/事件发生后切换到另一个状态(即“机器”部分)时,您已经编写了有限状态机
这是一个非常常用的工具,了解这方面的理论基础,能够对此进行推理,并知道如何将两个FSM组合成一个执行相同工作的FSM,这将是一个很大的帮助。无论何时在完成操作之前必须释放线程,都需要状态机 由于web服务通常不是全状态的,所以在web服务中通常看不到这一点——您需要重新排列URL,使每个URL对应于代码中的单个路径 我想另一种思考方式可能是,每个web服务器都是一个FSM,状态信息保存在URL中 在处理输入时,您经常会看到它。你必须在输入完成之前释放你的线程,所以你设置了一个标记“input in progress”或者类似的东西。完成后,将标志设置为“等待输入”。那面旗子是你的状态监视器 通常情况下,FSM是作为一个开关语句来实现的,该语句在变量上进行开关操作。每种情况都是不同的状态。在案例结束时,可以将状态设置为新值。你几乎肯定在什么地方见过 FSM的好处在于,您可以将状态作为数据的一部分,而不是代码的一部分。