zoukankan      html  css  js  c++  java
  • 下推自动机(PDA)在程序设计中的应用

    (一)下推自动机简介(Pushdown Automation)

        下推自动机﹙PDA﹚是自动机理论中定义的一种抽象的计算模型。下推自动机比有限状态自动机复杂:除了有限状态组成部分外,还包括一个长度不受限制的栈;下推自动机的状态迁移不但要参考有限状态部分,也要参照栈当前的状态;状态迁移不但包括有限状态的变迁,还包括一个栈的出栈或入栈过程。

    物理模型如下:

    image

    PDA 应该含有三个基本结构:①存放输入符号串的输入带   ②存放文法符号的栈   ③有穷状态控制器。

    PDA的动作:在有穷状态控制器的控制下根据它的当前状态、栈顶符号、以及输入符号作出相应的动作,在有的时候,不需要考虑输入符号。

    (二)PDA的形式语言定义

    下推自动机 (pushdown automaton,PDA) M = (Q, ∑, Γ, δ, q0 , Z0 , F)
    Q——状态的非空有穷集合。q∈Q,q 称为M 的一个状态(state);
    ∑——输入字母表 (input alphabet)。要求 M 的输入字符串都是∑上的字符串;
    Γ——栈符号表 (stack alphabet)。∀A∈Γ,叫做一个栈符号;
    Z0——Z0∈Γ叫做开始符号(start symbol),是 M 启动时候栈内惟一的一个符号。所以,习惯地称其为栈底符号;
    q0——q0∈Q,是 M 的开始状态(initial state),也可叫做初始状态或者启动状态;
    F——FQ,是 M 的终止状态(final state) 集合,简称为终态集。∀q∈F,q 称为 M 的终止状态,也可称为接受状态 (accept state),简称为终态。
    δ——状态转移函数(transition function),有时候又叫做状态转换函数或者移动函数。 描述如下:
    ①:δ(q, a, Z )={ (p1, γ1) , (p2, γ2) , … , (pm, γm) }  表示 M 在状态 q,栈顶符号为 Z 时,读入字符 a,对于i = 1, 2, …, m,可以选择地将状态变成 pi并将栈顶符号 Z 弹出,将 γi 中的符号从右到左依次压入栈,然后将读头向右移动一个带方格而指向输入字符串的下一个字符。
    ②:δ(q,ε, Z)={(p1, γ1), (p2, γ2),…,(pm, γm)}  表示 M 进行一次ε-移动 (空移动),即 M 在状态 q,栈顶符号为 Z 时,无论输入符号是什么,对于 i = 1, 2, …, m,可以选择地将状态变成 pi,并将栈顶符号 Z 弹出,将 γi 中的符号从右到左依次压入栈,读头不移动。

  • 相关阅读:
    正则表达式
    Requests库基本使用(转载)
    prometheus + grafana + pushgateway 搭建监控可视化系统
    Docker的系统资源限制(转载)
    DAY8 文件操作
    DAY7 集合,深浅copy
    DAY6 Python之代码块,小数据池的详解
    DAY5 Python基础类型之字典
    DAY4 Python数据类型之列表
    DAY3 python基础之数据类型总览
  • 原文地址:https://www.cnblogs.com/lihuali/p/8399462.html
Copyright © 2011-2022 走看看