Open murphywuwu opened 4 years ago
怎样才能设计一台能实际运行程序而不总是执行某个硬编码任务的机器呢?
能访问一条无限长纸带的有限状态自动机叫作图灵机(Turing Machine,TM)。这个名字通常指一条拥有确定性规则的机器,但我们也可以毫无歧义地叫它确定性图灵机(Deterministic Turing Machine,DMT)
提供一条纸带的目的就是允许在纸带上的任何位置存储任意量的数据,并以任意顺序读取,那么我们如何设计一台能与整条纸带交互的机器呢?
一种选择是让纸带可以被随机寻址访问,就像计算机的RAM一样给每个方格标记一个独立的数字地址,这样机器可以立即读取和写入任何位置。这增加了不必要的复杂性,而且需要规划出细节上的东西,比如如何给一条无限纸带的所有方格分配地址,以及如何在它需要访问方格时如何指定方格的地址。
用一个纸带头(tape head)指向纸带的一个特定位置,并且只能在那个位置读取或写入字符。每一步计算后,纸带头都可以向左或向右移动一个方格,这意味着一台图灵机为了达到远处的位置只能费力地在纸带上往复移动
这个统一的规则格式有5部分:
机器的当前状态
必须出现在纸带头当前位置的字符
机器的下一状态
要写入纸带头当前位置的字符
写入纸带之后纸带头的移动方向(向左还是向右)
要根据图灵机的当前状态和当前纸带头下的字符来选择它的下一个动作,因此一台确定性机器只能由状态和字符组成的一个规则——“无矛盾”规则,这是为了避免下一个动作有任何歧异。 简单起见,我们会像处理 DPDA时那样,放松“无遗漏”规则,并假设在没有规则可用的时候机器可以进入一个隐含的卡死状态,而不是坚持对于每一个可能的情况都要有一个规则。
标签:a/b:L,表示一条规则,它从纸带上读取字符a,写入字符b,然后把纸带头向左移动一个方格。
递增一个二进制数
字符串识别问题
我们使用配置一词来代表下推自动机状态和栈的组合,同样的理念在这里也很有帮组。可以说一个图灵机的配置是一个状态和一条纸带的组合
知道一个规则能在一个特定的配置下应用之后,我们需要能够通过写入一个新字符、移动纸带头以及按照规则改变机器状态来更新配置