【计算理论】下推自动机 PDA ( 设计下推自动机 | 上下文无关语法 CFG 等价于 下推自动机 PDA )(一)

简介: 【计算理论】下推自动机 PDA ( 设计下推自动机 | 上下文无关语法 CFG 等价于 下推自动机 PDA )(一)

I . 下推自动机 设计


设计下推自动机 , 可以识别 { w w R : w ∈ { 0 , 1 } ∗ } \{ ww^R : w \in \{ 0, 1\} ^* \}{ww

R

:w∈{0,1}

} 语言 ;



R RR 表示镜面反射 , 如果 w ww 是由 0 , 1 0 , 10,1 组成的字符串 011 011011 , 那么 w R w^Rw

R

 就是其镜面反射 100 100100 字符串 , 然后将 w ww 和 w R w^Rw

R

 串联在一起 , w w R = 011100 ww^R = 011100ww

R

=011100 ;



1 . 首先生成开始状态 ;


开始状态是接受状态 , 因为如果字符串是空字符串 , 空字符串的镜面反射还是空字符串 , 因此读取空字符串后的状态 , 是接受状态 , 开始状态其本身就是接受状态 ;

image.png




2 . 向栈底放入 字符 S SS , 用于作为栈底的标识 , 生成 ε , ε → S \varepsilon , \varepsilon \to Sε,ε→S 指令 ;



ε , ε → S \varepsilon , \varepsilon \to Sε,ε→S 指令包含 2 22 部分 : 读取字符 , 和 栈内操作 ;


读取字符 : 指的是读取的带子上的字符串 , ε , ε → S \varepsilon , \varepsilon \to Sε,ε→S 中前面的 ε \varepsilonε 指的是从带子上读取 ε \varepsilonε ;


栈内操作 : 使用某个字符 替换 栈顶字符 ; ε , ε → S \varepsilon , \varepsilon \to Sε,ε→S 中后面的 ε → S \varepsilon \to Sε→S 指的是使用 S SS 字符替换栈顶的空字符 ε \varepsilonε ;


image.png



3 . 镜面反射的前半个镜面 :



0 00 入栈 : 每读取一个 0 00 , 就将 0 00 放入栈中 , 生成指令 0 , ε → 0 0, \varepsilon \to 00,ε→0 ;


1 11 入栈 : 每读取一个 1 11 , 就将 1 11 放入栈中 , 生成指令 1 , ε → 1 1, \varepsilon \to 11,ε→1 ;

image.png




4 . 跳转到新的状态 , 在新的状态执行 后半个镜面的操作 :



无条件跳转就是读取 ε \varepsilonε , 并且栈中元素保持不变 , 即使用 ε \varepsilonε 替换栈顶的 ε \varepsilonε ;


生成的指令为


ε , ε → ε \varepsilon , \varepsilon \to \varepsilon

ε,ε→ε



当前的下推自动机 :



image.png


5 . 镜面反射的后半个镜面 :



0 00 出栈 : 每读取一个 0 00 , 从栈里拿走一个 0 00 , 生成指令 0 , 0 → ε 0, 0 \to \varepsilon0,0→ε ;


1 11 出栈 : 每读取一个 1 11 , 从栈里拿走一个 0 00 , 生成指令 1 , 1 → ε 1, 1 \to \varepsilon1,1→ε ;

image.png




6 . 栈清空 , 跳转到最后的 接受状态 : 上述出栈操作执行若干次后, 总能将栈内的字符取出完毕 , 只剩下一个 S SS 字符 , 该字符是栈底的标识 ; 此时将 S SS 字符从栈内取出即可 ;



生成如下指令 :


ε , S → ε \varepsilon , S \to \varepsilon

ε,S→ε


指令含义是 读取 ε \varepsilonε 字符 , 使用 ε \varepsilonε 字符替换栈中的 S SS 字符 ;



最后跳转到的状态是接受状态 ;



当前下推自动机为 :



目录
相关文章
|
机器学习/深度学习 存储 算法
深度学习中的稀疏注意力
深度学习中的稀疏注意力
1060 0
VUE3(三十九)自定义loading组件~
VUE3(三十九)自定义loading组件~
690 0
|
8月前
|
传感器 算法 数据挖掘
Python时间序列平滑技术完全指南:6种主流方法原理与实战应用
时间序列数据分析中,噪声干扰普遍存在,影响趋势提取。本文系统解析六种常用平滑技术——移动平均、EMA、Savitzky-Golay滤波器、LOESS回归、高斯滤波与卡尔曼滤波,从原理、参数配置、适用场景及优缺点多角度对比,并引入RPR指标量化平滑效果,助力方法选择与优化。
1606 0
|
传感器 安全 Linux
linux为什么不是实时操作系统
标准Linux内核并不是实时操作系统,因为它在任务调度、中断处理和内核抢占方面无法提供严格的时间确定性。然而,通过使用PREEMPT_RT补丁、Xenomai等实时扩展,可以增强Linux的实时性能,使其适用于某些实时应用场景。在选择操作系统时,需要根据具体应用的实时性要求,综合考虑系统的性能和可靠性。
461 1
|
Cloud Native 安全 应用服务中间件
云原生|docker本地仓库的搭建(简易可快速使用的本地仓库)(修订版)
云原生|docker本地仓库的搭建(简易可快速使用的本地仓库)(修订版)
537 0
|
小程序
微信小程序拖拽实现(真实测试管用)
微信小程序拖拽实现(真实测试管用)
|
Web App开发
Chrome浏览器与迅雷协同批量下载网页内全部链接的方法
本文介绍在Chrome浏览器中,通过迅雷自动批量选中网页中全部下载链接并进行下载的方法~
2108 1
Chrome浏览器与迅雷协同批量下载网页内全部链接的方法
|
存储 缓存 JSON
fastjson2为什么这么快
fastjson2 提升速度的核心技术
76415 6
fastjson2为什么这么快
java获取时间间隔,获取当天每隔15分钟的时间
Java开发中日常遇到的关于时间的问题
java获取时间间隔,获取当天每隔15分钟的时间
|
Java
Java中return、continue和break的区别(案例详解)
案例学习Java中return、continue和break的区别!
1819 1
Java中return、continue和break的区别(案例详解)

热门文章

最新文章