Computing--图灵机


关于状态机,请点击链接: https://blog.csdn.net/qq_46041930/article/details/107733400.

Computing–图灵机

什么是图灵机?

图灵机是最小的抽象模型。事实上,图灵机非常类似于人类的大脑,拥有计算功能和存储功能。
图灵机由三部分组成:

  1. Finite-state control 有限状态机
  2. Infinite Tape 无限长的磁带
  3. Tape Head 磁头

实际上对于有限状态机而言,状态数是有限的,也就是说有限状态机由于状态数有限而无法计算无限长的序列,或者说有限状态机没有办法存储大量的状态数。虽然它具备计算能力,但是却没有足够的存储空间。

磁带相对于有限状态机而言是一个外部的存储设备,用来记录有限状态机的输入、输出和空间结果。磁带是一个任意长的条状带,而且它可以分成一个个小的区域,每一个小的区域中存储的字符都来自于有限状态机的字符集。

磁头指向磁带中的一个个小的区域,然后从这当中读入字符,再重新向这个区域中写入新的字符,最后磁头选择左移或者右移到下一个小的区域。

实际上图灵机是现代计算机的雏形了,这里的磁带就是CPU中的内存,小的区域就是内存中的一个个内存单元,tape head就是用来寻址的CS:IP(指令计数器)。

Input and Tape Alphabet

图灵机有两个字符集,一个是输入的字符集,另一个是磁带中的字符集。初始时图灵机中的磁带是一串输入和无限多的空格,同时磁头指向第一个输入字符所在的区域。

Accepting and Rejecting States

图灵机开始工作后会一直进行,除非进入停止状态,因此存在图灵机一直处于无限循环当中。

设计图灵机

实例1

设计一个图灵机,输入字符集为 Σ \Sigma Σ= { 0 , 1 } \{0,1\} {0,1},功能为:判断输入的序列是否为L= { 0 n 1 n ∣ n ϵ N } \{0^n1^n|n\epsilon N\} {0n1nnϵN}。即序列是否为n个0与n个1拼接在一起?

solution:如图所示,从初始位置开始判断,若该位为1则小块区域重写成空格,磁头右移一位且进入reject state;若为0则重写成空格,磁头右移一位之后再一直右移走到序列的最后(序列最后的空格前一位判断是否为1),若为1则重写成空格,以此类推序列两头对称的比较0和1的个数是否相等。直到最后序列若全部重写成空格(说明0和1的个数对等)则进入accept state,否则进入reject state。
在这里插入图片描述

实例2

设计一个图灵机,统计序列中字母A的个数,并将个数转换成二进制数显示

solution
实际上就是用二进制数来表示字母A的个数,每一轮去扫描序列。每轮扫描之后都在初始位置前一位填上一位二进制数。如果扫描到A的个数为偶数个,则这个一位二进制数填0,奇数个填1。 同时扫描的时候如果当前位置到初始位置的A为偶数就将该位置的A替换成X。换言之,这不就相当于是在除2取余吗?
在这里插入图片描述
在这里插入图片描述

实例3

设计一个图灵机,判断序列中的0和1的个数是否相等?
!注意啦!这个题目和实例1就有所不同了,为啥呢?这是因为这个不要求序列是有序的0和1排列了,只要序列中0和1的个数相等就ok了。

solution:那么实际上我依然还是对称的去匹配0和1,怎么理解呢?
就是说我从序列最左边位置开始,每次找到一个0或者1,我就把这个数替换成x,然后接着立马回到初始位置从头扫描去找到1或者0。这样0和1就这样一个个匹配在一块然后被替换成x了。所以最后序列就成了两种情况,要么整个序列同时都变成x,那就说明0和1的个数相等了;要么序列中还有多余的0或者1,那就说明0和1的个数不等了。

在这里插入图片描述
~啦啦啦啦,说到这里大家明白了么,有啥问题留言哈,写到这里也不容易,大家给个关注吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

傻fufu滴人儿~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值