先决条件:图灵机
任务 :
我们必须设计一个图灵机来将二进制数增加1。
例子 –
Input: 10111
Output: 11000
Input: 1000
Output: 1001
Input: 10101011
Output: 10101100
分析 :
从以上三个示例中,我们可以得出两个条件–
- 当最右边的数字为0时:
在这里,我们可以看到,当我们向以0为最右位数的二进制数添加内容时,二进制数的最右数位将发生变化,即,如果最右数位为0,它将变为1,反之亦然,而其他所有数位都保持不变。同样,当我们得到Blank(B)时,我们的机器将停止。 - 当最右边的数字是1时:
在这里我们可以看到,当我们向二进制数中添加一些东西时,最右边的数字为1,那么所有的1都将变为0,直到得到0,而得到的0将变为1,而之后的所有其他数字将保持不变。同样,当我们得到Blank(B)时,我们的机器将停止。假设我们在字符串没有任何0,例如1111,那么我们向左移动,直到得到将所有1都更改为0的Blank(B)并将其Blank(B)更改为1,然后机器停止运行。
方法 :
- 我们必须从右到左扫描元素。首先,我们的指针在最左侧。因此,我们必须将指针移到最右边。
- 为了将指针移到最右边,通常我们跳过所有的0和1,直到得到Blank(B)。
- 完成此步骤后,我们现在可以将指针从左向右移动。
- 如果获得第一个数字1,则将所有的1更改为0,直到获得0,然后将其0更改为1。此后,所有数字保持不变,并且机器在Blank(B)处停止。
- 如果我们获得第一个数字1,则出现条件,例如1111,我们得不到任何0,那么我们向左移动,直到获得将所有1都改为0的Blank(B)并将其Blank(B)更改为零。到1,我们的机器停止运行。
- 如果我们将第一个数字设为0,则必须将0更改为1,然后,所有数字保持不变,并且我们的机器将在Blank(B)处停止。