图灵机1:简介

图灵机(TM)的特点:                         

1:在带子上既能读又能写

2:读写头既能左移又能右移

3:带子是无限长的(可以无限存储)

4:在进入接受或者拒绝时候便会停机(TM有一个内部状态存储器)


图灵机的形式定义:

图灵机是一个七元组:(),其中是有穷集合。

Q:是状态集,是Q三个特别的状态,即:一个初始状态,两个停机状态。

要求:接收状态不等于初始状态。

两个字母表:

是输入字母表,一般由确定的语言给出。不能包含空格B.

\tau是带字母表,由于TM的写功能,可以引入更多的字母,所以:

转移函数:\delta

\delta:即:TM在读入带字母表当前符号后,确定状态是否改变,并确定读写头的左移或右移。(这里讨论的图灵机不包含读写头不动的情况)


图灵机的格局:

格局用来描述某一瞬时图灵机的所有信息状态。

形式:串U状态Q串V(简记:UQV),串u+串v构成了带上字母,q指向当前v的第一个字母。

格局之间的产生:

如果:,则说:格局1 uaq_{i}bv产生 格局2 uq_{j}acv

,则说:格局1 uaq_{i}bv产生 格局2 uacq_{j}v

特别地,在左端点时,状态位于最前面,不允许左移了;在右端点时,假设没有符号的为空格,则: uaq_{i}等价于 uaq_{i}B.

(用格局来定义图灵机可接受的语言)


一个例子:

一个图灵机可识别所有由0组成,长度为2的方幂的字符串

即:TM可识别语言A=

解:M2="对于输入的字符串w:

1:   从左往右扫描带子,隔一个消去一个0(相当于对0的长度减半操作)。

2:如果第一步之后,带子上剩余唯一1个0则接受。

3:  如果在第一步之后剩余不止一个0,当0的个数为奇数个,则拒绝。(2k+1不可能是2的幂次

4:让读写头回到带子最左端(要有标记带头最左端的操作)。

5:转到第一步

"结束


分步画出状态转移图:

合在一起就是:

下面画出对于字符串“0000”的格局:


例子2:让图灵机识别下列语言:

分析:

这里每消去一个a,就让c去掉b个,也就是将b与c一一消去,然后再读写头返回a是,恢复b.

M3="对于输入字符串w:

1:从左往右扫描字符串,确认输入形式为:a_b_c_.如不然拒绝。

2:让读写头回到左端点。(故读第一个a后可标记为#)

1,2步保证了先出现a,然后读b后不能出现a,读c后不能出现a,b

3:消去一个a,向右扫描直到b出现,然后读写头在b与c来回移动,成对地消去b和c,直至把所有的b消去。

4:如果还有a没消去,则在读写头移动a前,恢复所有已消去的b,重复3,当所有的a都消去后,检查是否有c,c都被消去了则接受,反之,拒绝。

"


最后区分:图灵可判断和图灵可识别

一个TM,最后只有三种状态,两种停机状态,接受或拒绝;一种循环状态,这里是永不停机的意思。

即:

两者都能接受语言,但对于不能接受的语言,判定一定会拒绝,判定(yes or no)

而识别的话,一般要么停机要么永不停机

图灵可识别=递归可枚举(数学角度)=计算可枚举=半可判定

图灵可判定=递归=可解=可计算=可判定

  • 12
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python 是一种流行的编程语言,它可以用于构建各种类型的应用程序,包括图灵机图灵机是一种理论模型,用于描述计算和自动化。它由英国数学家艾伦·图灵提出,被认为是计算机科学的重要基础。 在 Python 中,你可以使用基本的编程概念和数据结构来模拟图灵机的行为。例如,你可以使用条件语句、循环和变量来控制图灵机的状态转移和符号操作。你可以通过定义状态集合、符号集合、转移函数和停机状态来实现图灵机的功能。 以下是一个简单的 Python 代码示例,模拟了一个简化的图灵机: ```python # 定义图灵机的状态集合 states = {'q0', 'q1'} # 定义图灵机的符号集合 symbols = {'0', '1'} # 定义转移函数 transitions = { ('q0', '0'): ('q1', '1', 'R'), ('q1', '1'): ('q0', '0', 'L'), ('q1', '0'): ('q1', '1', 'R') } # 定义初始状态和输入串 initial_state = 'q0' input_string = '000111' # 初始化图灵机 current_state = initial_state tape = list(input_string) head_position = 0 # 模拟图灵机运行 while current_state != 'q1': symbol = tape[head_position] if (current_state, symbol) not in transitions: raise Exception('No transition defined for current state and symbol') new_state, new_symbol, move = transitions[(current_state, symbol)] tape[head_position] = new_symbol if move == 'R': head_position += 1 elif move == 'L': head_position -= 1 current_state = new_state # 输出最终的结果 output_string = ''.join(tape) print('Output:', output_string) ``` 请注意,这只是一个简化的示例,实际的图灵机可能更加复杂。在实际应用中,你可能需要使用更高级的编程技术和库来处理更复杂的图灵机模型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值