首页 > 编程知识 正文

有限状态机的组成部分,动态规划的适用条件

时间:2023-05-05 22:43:04 阅读:137945 作者:3583

状态机是有限状态自动机的简称,是对现实事物运行规律的抽象数学模型。

“状态”(State )现实中的事物有不同的状态。 例如,自动门有两种状态:打开和关闭。 通常,状态机是有限状态机,也就是说所记述的状态的数量是有限的,例如自动门的状态是2个open和closed。

状态机,即State Machine,指的是数学模型,而不是实际的机器。 说白了,一般是指状态转移图。 例如,根据自动门的运行规则,可以抽象出如下图。

自动门有两种状态。 在open和closed、closed的状态下,读取开门信号后,状态将切换为open。 在open状态下读取关门信号时,状态切换为closed。

状态机的全名是有限状态自动机,自动一词也含有重要的含义。 给定状态机,同时给定其当前状态和输入,输出状态时可以明确运算。 例如自动门的情况下,给出初始状态的closed,在给出的输入中输入“开门”,可以在下一个状态时进行运算。

状态机的基本定义到此结束。 再说一遍,状态机是有限状态自动机的简称,是对现实事物执行规则的抽象数学模型。

在四个概念下展示了状态机的四个概念。

第一个是State,状态。 一个状态机必须至少包含两个状态。 例如,在上面的自动门示例中,有两种状态:打开和关闭。

二是事件。 事件是执行操作的触发条件或密码。 自动门的情况下,“按开门按钮”是事件。

第三,行动。 事件发生时执行操作。 例如,事件是“按下开门按钮”,动作是“开门”。 编程时,一个操作一般对应一个函数。

第四个是Transition,转换。 也就是从一种状态变化到另一种状态。 例如,“开门的过程”就是变换。

上面的四个概念在使用状态机思想编写程序时经常使用。 参见https://github.com/jakes Gordon/JavaScript-state-machine。

应用最后谈谈状态机的应用。 状态机是现实世界的抽象,逻辑上是严密的数学抽象,所以明显适合数字领域。 它可以应用于硬件设计、编译器设计,以及编程实现各种具体业务逻辑时等各个层面。

举个例子吧。 在街上的自动售货机上明显可以看到状态机的逻辑。 试着简化一下吧。 假设这是一台只卖2元一瓶汽水的售货机,只收五毛和一枚硬币。 初始状态为“未支付”,中间状态为“已支付5毛”、“已支付1张”、“已支付1.5张”、“已足额支付”4种状态。 状态切换的触发条件有“扔一枚硬币”和“扔5毛硬币”两种,状态为“到达过小支付”,还进行余额清除和汽水排出操作。 所以,如果画出完整的状态转移图,就会变成复杂的图。 与实际售货机对应的状态机变得更加复杂。

总之,状态机的应用范围很广,所以不在这里展开。 一句话,图灵机的概念类似于状态机。 图灵机是计算机基础上采用的计算模型。

总结

这就是状态机的概念的简单说明。 总之,状态机不是实际的机械设备,而是数学模型,通常表现为状态转移图。 相关的概念是State状态、Event事件、Action动作、Transition变换。 状态机是计算机科学的重要基础概念之一,也可以说是归纳问题的思想,应用范围非常广泛。

有限状态机和动态计划2008年9月23日,谷歌、T- Mobile和HTC发布了首款基于开源Android的3G智能手机G1。 其杀手级功能是利用全球卫星定位系统实现全球导航,该功能当时已完全与任何卫星导航设备相媲美,其地址识别技术(采用有限状态机)优于卫星导航设备严格的地址匹配技术(一个字不得错)

在地图的本地检索中,在判断住址正确性的同时,非常正确地提取合适的地理信息(省、市、街道、地址等)是不可缺少的技术。 例如:

四川省成都市武侯区高升大厦

成都市一环路南一段高升大厦

四川省成都市高升桥高升大厦

这些地址并不完全标准化,但快递小哥能识别包裹并移动,表明准确无误。 但是,让程序员写分析器分析这些地址的描述可能不是一件容易的事。 其根本原因是,地址的记述虽然看起来很简单,但与上下文无关,仍然是复杂的上下文相关语法。

幸运的是,地址语法在上下文相关语法中比较简单,所以有很多识别和分析的方法,但效果最好的是有限状态机。 *有限状态机是一种特殊的有向图,包含几个状态(节点)和连接这些状态的有向圆弧。 *实际上,有限状态机在计算机科学方面的初期成功是程序语言编译器的设计,相信学习了编译原理的学生们还抱有印象。 作为程序员,你一定用过“正则表达式”。 那是有限状态机的具体实现。

全球导航的重要算法是计算机科学图论中的动态规划(Dynamic Programming )算法。

北京到广州的最短或最快路线。 当然,最直接的愚蠢方法是走所有可能的路

线看一遍,然后找到最优的。这种办法在节点数是个位数的图中还行得通,当图的节点数(城市数目)达到几十个时,计算的复杂度就已经让人甚至计算机难以接受了,因为所有可能路径的数量随着节点数的增长而呈指数(或者说几何级数)增长,即每增加一个城市,复杂度要大一倍。显然导航系统不会用这种笨办法——任何导航仪或者导航软件都能在几秒钟内就找到最佳行车路线。所有的导航系统都采用了**动态规划( Dynamic Programming,DP)**的办法,这里面的 Programming一词在数学上的含义是“规划”,不是计算机里的“编程”。

动态规划的原理其实很简单,假如:要找出从北京到广州最短路径。其实我们知道,从广州到北京的最短路径必须经过这一条线上的某个城市(乌鲁木齐、西宁、兰州、西安、郑州、济南)。因此可以先找到从北京出发到这条线上所有城市的最短路径,最后得到的全程最短路线一定包括这些局部最短路线中的一条,这样,就可以将一个“寻找全程最短路线”的问题,分解成一个个寻找局部最短路线的小问题。只要将这条横切线从北京向广州推移,直到广州为止,我们的全程最短路线就找到了。这便是动态规划的原理。

采用动态规划可以大大降低最短路径的计算复杂度。在上面的例子中,每加入一条横切线,线上平均有10个城市,从广州到北京最多经过15个城市,那么采用动态规划的计算量是10×10×15,而采用穷举路径的笨办法是10的15次方,前后差了万亿倍。正确的数学模型可以将一个计算量看似很大的问题的计算复杂度大大降低。这便是数学的妙用。

有限状态机和动态规划的应用非常广泛,远远不止识别地址、导航等地图服务相关领域。它们在语音识别、拼写和语法纠错、拼音输入法、工业控制和生物的序列分析等领域都有着极其重要的应用。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。