在与理论计算机科学相关的主题中总有一种应用方法。但是,教科书和本科课程通常无法解释自动机理论成为重要课题的原因,也无法解释其在实践中是否仍具有应用价值。因此,大学生可能难以理解自动机理论的重要性,并可能认为它已不再具有实际用途。
自动机理论在实践中仍然有用吗?
它应该成为本科CS课程的一部分吗?
在与理论计算机科学相关的主题中总有一种应用方法。但是,教科书和本科课程通常无法解释自动机理论成为重要课题的原因,也无法解释其在实践中是否仍具有应用价值。因此,大学生可能难以理解自动机理论的重要性,并可能认为它已不再具有实际用途。
自动机理论在实践中仍然有用吗?
它应该成为本科CS课程的一部分吗?
Answers:
曾经使用过grep / awk / sed之类的工具吗?正则表达式构成了这些工具的核心。
您会惊讶于通过原则上使用正则表达式可以避免多少编码-在“实际项目”中,例如电子邮件服务器。
如果您是CS专业的学生,那么肯定会为(至少是一种很小的)语言编写编译器/解释器。如果您曾经尝试过此任务而陷入困境,那么您将不胜感激,一点点理论(即上下文无关文法)可以为您提供帮助。这个理论将过去不可能完成的任务变成了可以在一个周末完成的任务。(它为发明家赢得了图灵奖-Google BNF)。
如果您是CS专业的学生,则有时需要坐下来考虑计算的哲学基础,而不只是考虑下一版Android API有多酷。与此相关的是,大学的工作不是为您的下一个五年做好准备,而是为您的下一个五十年做好准备。在这方面,他们唯一可以做的就是帮助您思考-思考自动机理论作为这些课程之一。
CS的更实际的体现之一是编译器构造。1965年,Knuth开始研究LR解析器。很快(不到十年),我们有了LALR解析器,它是确定性下推自动机的子集,可让我们实现移位/缩减解析器。
LALR解析的可行性和效率的核心是Knuth的证明,证明该语言的“前缀”是规则的(有限自动机)。这是自动解析器生成器(如yacc / bison等)的起源。
可以肯定地说,我们所知道的编程语言很大程度上归功于这些发展。
这是另一个示例:TCP / IP协议的核心是有限状态机。它可以获得多少实用性?
每个认真的CS学生,尤其是实践型学生,都应注意自动机理论。它是计算机科学丰富性的基础。
你能听到那声音吗?这是在自动机理论的天堂里笑出的上千种出色定理,应用和工具的声音。
语言和自动机是优雅而强大的概念,您可以在计算机科学的各个领域中找到它们。语言不是计算史前的枯燥,形式主义的惯用语。语言理论的观点将关于复杂,不透明对象的看似复杂的问题提炼成关于单词和树的简单陈述。形式语言在计算机科学中扮演着类似于代数和拓扑学为经典数学带来的基本观点和改变游戏规则的观点。这是通过语言理论解决的一些实际,相当复杂的实际问题。
上面暗示的减少将语言视为抽象的数学对象。为了在实践中应用这些思想,我们需要一个数据结构来表示语言和算法来操纵这些数据结构。
输入自动机。自动机使我们能够将有关抽象数学对象(如语言)的问题减少为有关标记图的具体算法问题。语言和自动机理论除了数量众多的实际应用之外,还提供了非常重要的智力服务。我们可以考虑各种问题,从格式化邮政编码到统一且整齐的概念空间中单子二阶逻辑的决策程序。那太神奇了!
关于逻辑和决策程序,我什么也没说。(是的,它们有实际应用。)有关权威概述,请参见Kaveh的答案。
正如在其他答案中所解释的那样,自动机理论在概念上很重要,因为它是我们很好理解的简单计算模型,并且正则表达式和自动机具有许多实际应用。
这是现代研究的一个小例子,可以追溯到自动机理论来理解现代概念。在本文中,研究人员证明了常规语言都具有属性测试器: “常规语言可以通过恒定数量的查询进行测试”
不只是香草自动机。您正在学习(计算)模型的基础知识(接受状态,ε转换等),该模型有助于推理哪些可以,更重要的是某些查询语言无法表达的内容。一些有趣的结果包括:
(当然,我正在跳过很多其他课程)
基本上,这是一个非常通用的模型。您的课程可能会强调自动机,语言和逻辑之间的联系。
如果我想将其与具体的“世俗”工具联系起来,我会在图书馆度过一个悠闲的早晨,阅读Abiteboul等人的《数据库基础》中的几篇文章(AB?),然后尝试将其与课堂资料联系起来。 。当然,这只是一个的找一个自动机类的应用程序(很多)的方式,我想不是最明显的-但是这正是为什么它是一个有趣的练习。
正如在各种答案中已经指出的那样,UG课程中的自动机理论提供了一个基本的概念框架,用于介绍更高级的(和实际的)主题,并指出了被忽略的联系。例如:二元决策图(它们是最小化的DFA;在教过DFA之后,我经常教基于BDD的难题解决方法);脚本编写,包括BioPerl和BioPython中的脚本编写(以及一个强大的设置,可以增强现实脚本正则表达式中可能隐藏了多少意外匹配),正式调试(状态属性为否定FA,相交),甚至VCR或家庭入侵者警报编程(每天通过指定不完整的示例来说明自动机指定不当的压力情况;也许可以使用基于用户界面综合的Harel的播放/播放场景来形式化)。我还使用该设置来教Python
我将从完全不同的实践角度提出另一个答案:有限状态机(或至少对它们进行一些简单的概括/扩展)经常用于游戏编程的AI端。事实证明,它们为封装角色行为提供了一个出色的模型。例如,一个敌人可能具有代表“巡逻”,“搜索”,“进近”,“攻击”,“防御”,“撤退”,“死亡”等状态,并且它们之间有明确的过渡。这不涉及诸如常规语言之类的自动机的任何形式方面,但是自动机的概念是一个非常核心的概念。
在业界使用的模型检查中,已经有很多与自动机理论相关的研究。查看Moshe Vardi最近在Fields Institute的演讲,特别是第三次演讲“逻辑,自动机,游戏和算法”,以了解为什么自动机理论仍然重要和有用。
抽象:
由Buechi,Elgot,Rabin和Trakhtenbrot在1950年代和1960年代提出的决策程序自动理论方法是决策程序的最基本方法之一。近来,这种方法已经在硬件和软件系统的形式验证中找到了工业应用。从逻辑到实用算法的路径不仅通过自动机,而且还通过游戏,其算法方面由Chandra,Kozen和Stockmeyer在1970年代后期进行了研究。在本概述演讲中,我们描述了通过自动机和游戏从逻辑到算法的路径。
我们应该考虑“实用”和“应用”这两个词的语义。对于某些学生来说,实用是可以帮助他们通过考试的任何东西。对于其他人来说,任何可以在工作中完成的事情。在这两种情况下,自动机理论确实非常实用。
正如其他人指出的那样,例如,在研究编译器时,将使用语法。但是,不仅如此:了解整个状态的概念和状态之间的转换规则可以使您成为一名更好的程序员,例如,当您意识到自己的代码在这里和那里都是多余的,而当您对其进行改进时,在您的代码中应用了相同的概念了DFA最小化背后。
对于“应用程序”也是如此。那个字你懂什么?即使您是“脚踏实地的工程师”,您也将在现实世界的项目中看到并使用类似于“自动机理论”的想法:编程代码,流程图,甚至是简单而精巧的堆栈概念。对于理论书呆子像我一样,我认为应用在其他领域的自动机理论,如逻辑,代数和有限元模型理论。当然,在超市购物时,我可能永远不需要使用抽引式引理,但是像这样的定理帮助我理解了某些类语言的结构,更不用说它们所对应的逻辑和代数结构了。这是我比任何实用性评估都更有价值的东西。
有限自动机,通常被描述为在不同上下文中的有限状态机,或者具有它们的概率变体,可以将隐马尔可夫模型应用于模式识别和量化模式结构。例如,最小的随机有限自动机将或多或少地根据给定的概率分布生成字符串,或者根据某种分布匹配字符串样本(或时间序列)的统计属性。
例如参见CSSR,一种用于盲目重建隐藏状态的算法。它比隐马尔可夫模型更有效,更灵活。