博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
编译原理:偶数个0偶数个1 的正规式为什么是(00|11 | ( (01|10) (00|11) * (01| 10)))*
阅读量:3936 次
发布时间:2019-05-23

本文共 724 字,大约阅读时间需要 2 分钟。

首先应该明确一下问题

我们的问题等价于“偶数个0偶数个1的正规式是什么”,而不是“(00|11 | ( (01|10) (00|11) * (01| 10))) *就能表示偶数个0偶数个1 的正规式”。

可以想一下,在二进制串中0和1的个数的状态无非以下四种:

  1. 偶数个0,偶数个1 -------------0
  2. 偶数个0,奇数个1 -------------①
  3. 奇数个0,偶数个1 -------------②
  4. 奇数个0,奇数个1 -------------③

注:虚线后面的数值是相应的状态,我们将在接下来的状态转换图中看到

  • 接下来我们画一下状态转换图:

在这里插入图片描述

注:圆内的是状态值,箭头旁边的是二进制值
箭头的方向和箭头旁的数值需要结合状态值的意义理解

  • 接下来,我们把1状态拿掉,整理之后是这样的:

    在这里插入图片描述

  • 接下来,把2状态拿掉,整理之后是这样的:

    在这里插入图片描述

  • 接下来,把状态3拿掉,整理之后是这样的:

    在这里插入图片描述

  • 进而可以表示为:(00|11 | (01|10) (00|11) * (01| 10))*

    注:该式与题目中的少一个括号,其实是一样的,因为连接运算的优先级大于选择运算 |

  • 现在我们尝试用代码实现图一:

#include
int main(){
using namespace std; int mov(int,int); string s=""; cout<<"请输入一个二进制序列"<
>s; int i=0; int b=-1; int im=0; int om=-1; for(i=0;i

运行一下,就可以判断输入的二进制串是否包含偶数个0和偶数个1啦

你可能感兴趣的文章
Linux下逻辑地址-线性地址-物理地址图解
查看>>
vim安装SrcExpl 插件,实现自动显示跳转函数及变量定义功能
查看>>
linux 版本中 i386/i686/x86-64/pcc 等... 的区别
查看>>
机器学习 | 台大林轩田机器学习基石课程笔记11 --- Linear Models for Classification
查看>>
机器学习 | 台大林轩田机器学习基石课程笔记12 --- Nonlinear Transformation
查看>>
线性代数 | (2) 矩阵Part Two
查看>>
机器学习 | 台大林轩田机器学习基石课程笔记13 --- Hazard of Overfitting
查看>>
机器学习 | 台大林轩田机器学习基石课程笔记14 --- Regularization
查看>>
机器学习 | 台大林轩田机器学习基石课程笔记15 --- Validation
查看>>
机器学习 | 台大林轩田机器学习基石课程笔记16 --- Three Learning Principles
查看>>
机器学习 | 台大林轩田机器学习技法课程笔记1 --- Linear Support Vector Machine
查看>>
机器学习 | 台大林轩田机器学习技法课程笔记2 --- Dual Support Vector Machine
查看>>
线性代数 | (3) 行列式
查看>>
学术英语 | (1) wordList1
查看>>
机器学习 | 台大林轩田机器学习技法课程笔记3 --- Kernel Support Vector Machine
查看>>
机器学习 | 台大林轩田机器学习技法课程笔记7 --- Blending and Bagging
查看>>
学术英语 | (6) WordList6
查看>>
线性代数 | (5) 线性方程组
查看>>
学术英文 | (7) Unit3Words
查看>>
线性代数 | (6) 相似对角形
查看>>