【自然语言处理】形式语言和自动机

实验名称

形式语言和自动机

  • 实验目的

熟悉形式语言和自动机,设计程序实现有限自动机,学习对字符串进行合法性检测,使用有限自动机判断字符串是否是可以被接受的。书写出能够成功运行的代码。

  • 实验内容:

状态集为{ q0, q1, q2, q3 },输入符号集为{ 0,1 },初始状态为q0,终止状态为q0,在如下的状态转移函数中输入字符串,判断该字符串的合法性以及能否被接受。

输入:三行,每行一个字符串,询问能否被接受。

输出:三行,对于每一个输入,判断字符串合法性并由有限自动机判断是否可以被接受。

  • 实验过程:
  1. 先想办法怎样保存状态图,这里用二维数组来进行保存。

将状态图转化为二维数组,二维数组的第一维保存的是每个状态,也就是q0到q3,分别用0-3表示;第二维保存的是符号集,也就是转移的指标0、1;而数组的值表示的是转移后的状态。将所给的状态图转化为二维数组表示如下:

      

  1. 判断字符串中的字符是否在输入符号集中,也就是判断字符串中是否仅包含0和1;先将字符串中每个数字保存在数组求q[ ]中,之后通过flag进行标记,如果遇到非0或1,则flag标记为1,之后通过flag进行判断。

  

  1. 最关键的判断字符串是否可以被有限自动机接收。

通过check()函数实现。依据之前创建的二维数组状态表,进行字符串中每个符号到相应状态的转化。通过a1和a2分别得到状态数组的一维和二维,由上述数组创建可知第一维保存的是每个状态,也就是q0到q3,分别用0-3表示;第二维保存的是符号集,也就是转移的指标0、1;整体通过for循环实现状态的转化。最终的状态通过a1的值得到。若最终返回状态q0,则a1最终的值为0。

判断check()函数判断完成后进行输出

  • 结果展示:
  • 心得体会:

通过此次形式语言和自动机的实验,我更加深刻的认识了有限自动机,掌握了有限自动机转换过程,熟悉了状态转移的具体过程以及代码实现方法,通过思考和状态转移的演示,想到了二维数组来存储状态图,编写代码过程中也逐渐发现二维数组可以实现。

参考代码:
 


#include <iostream>
using namespace std;
int a[4][2];
int sum=0;
int q[100];
int check(){
    int a1=0,a2;
    for(int i=0;i<sum;i++)
    {
        a2=q[i];
        a1=a[a1][a2];
    }
    if(a1==0)
        return 1;
    else
        return 0;
}
int main(int argc, const char * argv[]) {
    // insert code here...
    int flag=0;
    int i=0,j=0;
    int ch;
    a[0][0]=2;
    a[0][1]=1;
    a[1][0]=3;
    a[1][1]=0;
    a[2][0]=0;
    a[2][1]=3;
    a[3][0]=1;
    a[3][1]=2;
    while(i<3){
        cin>>ch;
        int ch2=ch;
        while(ch){
            ch/=10;
            sum++;
        }
        for(j=sum-1;j>=0;j--)
        {
            q[j]=ch2%10;
        }
        for(int i=0;i<sum;i++)
        {
            if(q[i]!=0&&q[i]!=1)
            {
                flag=1;
            }
        }
        if(flag==1)
            cout<<"字符串中的字符不再输入符号集中\n";
        else{
            if(check())
                cout<<"字符串可以被有限自动机接收\n";
            else
                cout<<"字符串不可以被有限自动机接收\n";
        }
        flag=0;
        i++;
    }
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/631713.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

职业生涯第一课---“Redis分布式锁优化:确保唯一性与效率“

前言 最近因为刚入职公司开启自己的实习生涯&#xff0c;工作和毕设论文同步进行&#xff0c;导致有段时间没更新博客了&#xff0c;今天来分享一下最近学到的一些知识。 场景介绍 BOSS让我写一些接口&#xff0c;他提出这样一个需求&#xff0c;该接口的参数有多个&#xf…

linux系统查看CPU信息

1、查看cpu型号 [rootMaster ~]# cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c 40。Intel(R) Xeon(R) CPU E5-2650 v3 2.30GHz 2、查看系统中实际物理CPU的颗数&#xff08;物理&#xff09; [rootMaster ~]# grep physical id /proc/cpuinfo | sort | uniq | w…

IT行业现状与探索未来发展趋势

​​​​​​​ 我眼中的IT行业现状与未来趋势 随着技术的不断进步&#xff0c;IT行业已成为推动全球经济和社会发展的关键力量。从云计算、大数据、人工智能到物联网、5G通信和区块链&#xff0c;这些技术正在重塑我们的生活和工作方式。你眼中IT行业的现状及未来发展趋势是…

Python函数之旅专栏(导航)

Python内置函数(参考版本:3.11.8)AELRabs( )enumerate( )len( )range( )aiter( )eval( )list( )repr( )all( )exec( )locals( )reversed( )anext( )round( )any( ) ascii( )FM  filter( )map( )S float( )max( )set( )Bformat( )memoryview( )setattr( )bin( )frozenset( )…

Spring实现数据库读写分离(MySQL实现主从复制)

目录 1、背景 2、方案 2.1 应用层解决: 2.2 中间件解决 3、使用Spring基于应用层实现 3.1 原理 3.2 DynamicDataSource 3.3 DynamicDataSourceHolder 3.4 DataSourceAspect 3.5 配置2个数据源 3.5.1 jdbc.properties 3.5.2 定义连接池 3.5.2 定义DataSource 3.6…

【Linux】线程周边001之多线程

&#x1f440;樊梓慕&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》《Linux》《算法》 &#x1f31d;每一个不曾起舞的日子&#xff0c;都是对生命的辜负 目录 前言 1.线程的理解 2.地址…

停车场车位引导管理系统工作原理是什么,由哪些软硬件设备组成?

在现代城市中&#xff0c;随着汽车保有量的持续增长&#xff0c;停车难成为了许多城市面临的共同问题。有效管理停车场资源&#xff0c;提高车位利用率&#xff0c;减少寻找停车位的时间&#xff0c;对于缓解交通拥堵、提高城市运行效率具有重要意义。车位引导管理系统正是为了…

YOLOv8改进 | 图像修复 | 适用多种复杂场景的全能图像修复网络AirNet助力YOLOv8检测(全网独家首发)

一、本文介绍 本文给大家带来的改进机制是一种适用多种复杂场景的全能图像修复网络AirNet&#xff0c;其由对比基降解编码器&#xff08;CBDE&#xff09;和降解引导修复网络&#xff08;DGRN&#xff09;两个神经模块组成&#xff0c;能够在未知损坏类型和程度的情况下恢复受…

Java | Leetcode Java题解之第91题解码方法

题目&#xff1a; 题解&#xff1a; class Solution {public int numDecodings(String s) {int n s.length();// a f[i-2], b f[i-1], cf[i]int a 0, b 1, c 0;for (int i 1; i < n; i) {c 0;if (s.charAt(i - 1) ! 0) {c b;}if (i > 1 && s.charAt(i …

主流短视频评论采集python爬虫(含一二级评论内容)

声明 仅用于学习交流&#xff0c;不用于其他用途 正文 随着主流短视频评论采集更新需要登录&#xff0c;由于不懈的努力&#xff0c;攻破这一难点&#xff0c;不需要登录采集作品所有评论信息 话不多说上代码看效果&#xff1a; 输入作品id: 这样就拿到评论信息了&#xff…

小程序|锁定查询功能如何使用?

学生或家长想要实现自己查询完成后&#xff0c;任何人都无法再次查询&#xff0c;老师应该如何设置&#xff1f;易查分的【锁定查询功能】就可实现&#xff0c;下面教大家如何使用吧。 &#x1f4cc;使用教程 &#x1f512;锁定查询功能介绍 ✅学生或家长自主锁定&#xff1a;开…

webpack优化构建体积示例-并行压缩:

uglifyjs-webpack-plugin和terser-webpack-plugin都可以开启多进程并进行压缩来减小构件体积大小。 当在 Webpack 配置中启用 minimize: true 时&#xff0c;构建时间通常会增加&#xff0c;这是因为 Webpack 会在构建过程中添加一个额外的步骤&#xff1a;代码压缩。代码压缩是…

分布式搜索——ElasticSeach简介

一般都用数据库存储数据&#xff0c;然后对数据库进行查询获取数据&#xff0c;但是当数据量很大时&#xff0c;查询效率就会很慢&#xff08;具体下面会讲到&#xff09;&#xff0c;所以这种情况下就会使用到ElasticSeach ElasticSeach的基本介绍 ElasticSeach是一 款非常强…

202012青少年软件编程(Python)等级考试试卷(三级)

第 1 题 【单选题】 在Python正则表达式中&#xff0c;用来匹配任意空白字符的是&#xff08; &#xff09;。 A &#x1f612; B :S C :d D &#x1f604; 正确答案:A 试题解析: 第 2 题 【单选题】 在Python正则表达式中&#xff0c;用来匹配任意非数字字符的是&…

【神经网络与深度学习】Transformer原理

transformer ENCODER 输入部分 对拆分后的语句x [batch_size, seq_len]进行以下操作 Embedding 将离散的输入&#xff08;如单词索引或其他类别特征&#xff09;转换为稠密的实数向量&#xff0c;以便可以在神经网络中使用。位置编码 与RNN相比&#xff0c;RNN是一个字一个字…

代码随想录——二叉树的最小深度(Leetcode111)

题目链接 层序遍历 遍历整棵树&#xff0c;当找到一个叶子节点时&#xff0c;直接返回这个叶子节点的深度。 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNod…

C语言 | Leetcode C语言题解之第86题分隔链表

题目&#xff1a; 题解&#xff1a; struct ListNode* partition(struct ListNode* head, int x) {struct ListNode* small malloc(sizeof(struct ListNode));struct ListNode* smallHead small;struct ListNode* large malloc(sizeof(struct ListNode));struct ListNode* …

ELF 1技术贴|如何在Ubuntu上配置Samba服务器

Samba是一个开源的软件套件&#xff0c;提供了一种实现SMB/CIFS协议的方式&#xff0c;可以无缝链接Linux与Windows系统&#xff0c;让开发者在局域网络框架下实现共享文件、打印资源等&#xff0c;确保了数据交流的高效与稳定。 相较于在Ubuntu环境下运用传统的Vim编辑器&…

Wiley数据库文献哪里比较全?去哪里下载比较高效

Wiley出版社1807年创建于美国&#xff0c;是一家具有超过200年历史的全球知名的出版机构&#xff0c;面向专业人士、科研人员、教育工作者、学生、终身学习者提供必需的知识和服务。 Wiley及旗下的子品牌出版了超过500位诺贝尔奖得主的作品。Wiley Online Library为全学科期刊全…

VMware17虚拟机安装Kali Linux2024详解

目录 简介 一、环境搭建 二、下载ISO镜像 三、新建虚拟机 为虚拟机选择合适的操作系统类型和版本 分配适当的内存、硬盘空间和其他虚拟机配置选项 四、硬件配置 编辑虚拟机设置 选择安装介质 五、界面化安装配置 简介 Kali Linux是一个基于Debian的Linux发行版&#…