Muh*_*aza 5 binary automata turing-machines turing-complete computation-theory
今天是个好日子!
我正在尝试解决这个练习以达到学习目的。有人可以指导我解决这 3 个问题吗?
就像我尝试了第一个问题,将两个由“+”分隔的二进制数相加。我尝试通过用相应数量的 1 或零表示每个数字来进行 2 个数字加法,例如 5 = 1 1 1 1 1 或 0 0 0 0 0,然后将它们相加,结果也将采用与所表示的相同的格式,但如何添加或表示 2 个二进制文件并用 + 分隔它们,但没有得到任何线索。图灵机的头会从左边移动到+号,然后再向+号左右移动吗?但是添加将如何执行。就我所知而言,TM 不能简单地添加二进制数,我们必须制定一些逻辑来表示其二进制数,就像简单地添加 2 个数字的情况一样。比较两个二进制文件的情况是否相似?问候
以下程序受到edX / MITx 课程 Paradox and Infinity的启发,展示了如何使用图灵机执行二进制加法,其中要相加的数字被输入到图灵机并以空格分隔。
图灵机
直到第二个数变为0。
下面的图灵机模拟动画展示了如何将 13(二进制1101)和 5(二进制101)相加得到 18(二进制10010)。
我将从问题 2 和问题 3 开始,因为它们实际上比问题 1 更容易。
我们假设我们有有效的输入(两侧都是非空二进制字符串,没有前导零),因此我们不需要进行任何输入验证。要检查数字是否相等,我们只需在 = 符号上来回跳动并一次划掉一位数字即可。如果我们发现任何一点不匹配,我们都会拒绝。如果左边还有一位数字而右边找不到,我们就会拒绝。如果左边的数字用完了,而右边还有一些,我们就会拒绝。否则,我们接受。
Q T Q' T' D
q0 0 q1 X right // read the next (or first) symbol
q0 1 q2 X right // of the first binary number, or
q0 = q7 = right // recognize no next is available
q1 0 q1 0 right // skip ahead to the = symbol while
q1 1 q1 1 right // using state to remember which
q1 = q3 = right // symbol we need to look for
q2 0 q2 0 right
q2 1 q2 1 right
q2 = q4 = right
q3 X q3 X right // skip any crossed-out symbols
q3 0 q5 X left // in the second binary number
q3 1,b rej 1 left // then, make sure the next
q4 X q4 X,b right // available digit exists and
q4 0,b rej 0,b left // matches the one remembered
q4 1 q5 X left // otherwise, reject
q5 X q5 X left // find the = while ignoring
q5 = q6 = left // any crossed-out symbols
q6 0 q6 0 left // find the last crossed-out
q6 1 q6 1 left // symbol in the first binary
q6 X q0 X right // number, then move right
// and start over
q7 X q7 X right // we ran out of symbols
q7 b acc b left // in the first binary number,
q7 0,1 rej 0,1 left // make sure we already ran out
// in the second as well
Run Code Online (Sandbox Code Playgroud)
该 TM 可以首先通过确保两个二进制字符串非空且不包含前导零(划掉它找到的任何内容)来清理输入。
做到“大于”,您可以轻松执行以下操作:
检查第一个二进制数的长度(删除前导零后)是否大于、等于或小于第二个二进制数的长度(删除前导零后)。如果第一个比第二个长,则接受。如果第一个比第二个短,则拒绝。否则,继续步骤 2。
与另一个问题一样检查是否相等,但如果在任何时候第一个数字为 1 而第二个数字为 0,请接受。这是可行的,因为我们知道没有前导零,数字具有相同的位数,并且我们按重要性降序检查数字。如果您发现其他不匹配或确定数字相等,则拒绝。
要添加数字,问题说要递增和递减,但我觉得仅添加进位不会变得更加困难。该过程的概要如下:
磁带可能经历的不同步骤的示例:
#1011+101#
#101X+101#
#101X+10X#
#101X+10X=#
#101X+10X=0#
#10XX+10X=0#
#10XX+1XX=0#
#10XX+1XX=00#
#1XXX+1XX=00#
#1XXX+XXX=00#
#1XXX+XXX=000#
#XXXX+XXX=000#
#XXXX+XXX=0000#
#XXXX+XXX=00001#
#XXXX+XXX=0000#
#1XXX+XXX=0000#
#1XXX+XXX=000#
#10XX+XXX=000#
#10XX+XXX=00#
#100X+XXX=00#
#100X+XXX=0#
#1000+XXX=0#
#1000+XXX=#
#10000XXX=#
#10000XXX#
#10000XX#
#10000X#
#10000#
Run Code Online (Sandbox Code Playgroud)