我碰巧需要一个图灵机的算法,它读取一串 0,然后在磁带上写下有多少是二进制的。
我意识到在实践中机器实际上不会计算 0,但我很困惑如何去做。
我假设首先我需要标记二进制数以 X 或其他东西开头的位置,然后只为第一个 0 和后面的每个 0 写一个 1,如果最低有效位是 0,它就变成了1 但如果是 1 呢?也许把它变成 0 并继续左转将所有 1 变成 0,直到我找到一个 0 或空白变成 1?再说一次,在那种情况下,不管 LSB 是什么都是一样的,因为我会做同样的事情,只有 0 是第一个位置......
嗯……橡皮鸭……
最佳答案
假设输入磁带是 #00000000000#
,其中初始读取位置是第一个 0。
#
末尾,保持遇到的 0
数量的奇偶校验(最初是 0,然后是 1,然后是 0,...)。用 0
替换每对的第一个 -
。 -
读取被忽略并且不改变奇偶校验。 #
,并转到 1. 在第一遍结束时,输入磁带为
#-0-0-0-0-0-#
,输出为 1
。在第二遍结束时:
#---0---0---#
和 11
。在第三遍结束时:
#-------0---#
和 011
。在第四遍结束时:
#-----------#
和 1011
。关于algorithm - 图灵机算法计算0并写出二进制数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4661546/