谁能帮我捋一下自动机和算法这两个概念? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技问题时复制粘贴 AI 生成的内容
Saitama
V2EX    程序员

谁能帮我捋一下自动机和算法这两个概念?

  •  
  •   Saitama 2023-05-30 17:34:36 +08:00 2261 次点击
    这是一个创建于 867 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我最近在看编译原理的书。
    在词法分析这一章经常写构造有限自动机来实现 scanner 。
    在我看来这不就是某个算法吗?

    然后我又在知乎上看到这个问题。
    算法、自动机理论、形式语言、可计算性理论之间都是什么关系? https://www.zhihu.com/question/28932188

    但是这些回答就像黑话一样,看完了我更蒙蔽了。
    求大神指点一下。
    10 条回复    2023-05-31 09:26:21 +08:00
    DenseHazy
        1
    DenseHazy  
       2023-05-30 17:46:20 +08:00
    009694
        2
    009694  
       2023-05-30 17:47:52 +08:00 via iPhone
    算法用于描述和解决问题的具体步骤,形式语言是用来描述算法的工具,自动机用于实现和理解算法的模型,可计算性理论则是用来界定算法可能和不可能达到的范围。
    Kumo31
        3
    Kumo31  
       2023-05-30 18:17:19 +08:00
    2 楼说的比较清楚了,在我看来还有一个区别是他们的研究目的不同。算法研究通常是为了利用计算机解决某一类问题,这就需要知道什么是计算机,怎么抽象计算机。自动机就是计算的数学模型,属于计算理论的一部分,是为了抽象和研究计算机本身的基本能力
    Saitama
        4
    Saitama  
    OP
       2023-05-30 18:43:50 +08:00
    @009694 @Kumo31
    我用大白话来说一下我的理解。
    比方说我作为一个编程小白,没读过编译原理的书,也可以写出一个简单的 Scanner 。比如简单的 int, variable 识别,指需要 if else 判断+循环即可。这可以看作是一个算法。
    但是当词法变的复杂,比如识别不同进制的整数,整数的后缀等,这时候程序就很难写,即便写出来可读性和可维护性也不好。
    于是有人抽象出了 NFA, DFA 这些模型,还有他们之间的转换算法。这样不管程序的词法变得多复杂,不管我们的程序有多复杂,我们都可以通过 DFA ,来读懂或者维护这个程序。
    也就是“自动机用于实现和理解算法的模型”。

    这样理解对吗?
    goldiorl
        5
    goldiorl  
       2023-05-30 19:24:46 +08:00
    @Saitama 看主题还以为楼主已经知道了一点了,看最新的回答感觉楼主搞混了,混成这样了建议问 Bing chat

    算法和计算机没有关系,跟实现没有关系,你可以理解为算法是数学层面的对解决问题步骤的描述.

    说白了算法更抽象,包含的范围更大

    你说得"构造有限自动机来实现 scanner"是种算法,这句话某种意义上讲是正确的,他是一个具体的算法

    可计算理论是讲算法能否被现有计算机架构实现的.

    至于自动机,下推自动机,图灵机,是可计算理论里面讨论可计算架构的理论模型

    冯诺依曼架构是实现,可实现上述所有模型
    tyzandhr
        6
    tyzandhr  
       2023-05-30 20:19:32 +08:00 via Android
    自动机是实在的,算法只是概念
    leonshaw
        7
    leonshaw  
       2023-05-30 20:39:39 +08:00
    @Saitama
    词法分析里讨论的自动机是一类解决具体问题的自动机。计算理论里讨论的是更抽象的自动机全体。
    mobpsycho100
        8
    mobpsycho100  
       2023-05-30 20:56:19 +08:00 via iPhone
    这确实是个算法呀,这个算法构造了一个自动机,读取字符串然后运行这个自动机,最后处理运行结果。至于自动机是不是算法?从定义上看,算法至少得是指令的序列,所以自动机不是算法。建议去 Wikipedia 看看两者的定义。
    Saitama
        9
    Saitama  
    OP
       2023-05-30 22:21:24 +08:00
    @mobpsycho100 你这个说法挺通俗易懂的,谢谢!
    SmiteChow
        10
    SmiteChow  
       2023-05-31 09:26:21 +08:00
    算法是一个类目,自动机是一个子类
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1056 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 33ms UTC 23:02 PVG 07:02 LAX 16:02 JFK 19:02
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86