如何正式描述这个算法用于图灵机?

时间:2018-05-16 21:01:37

标签: algorithm discrete-mathematics turing-machines

Waring :这项任务是由我80岁以上的教授给出的,没有人理解他有时会想要什么,我不期望更多的标准方法来解决这个问题,而不仅仅是因为问题很难,但是因为我的教授是老派的前苏联疯子;)(他喜欢简单易事,只是为了解释为什么会在这里发布)

这个任务是纯粹的理论,但我不知道如何用文字形式化它 问题:

  

输入时给出9位二进制代码,我们必须打印" 0"在输出中   如果值的数量为" 1"比数量少两倍   具有值" 0"的位,如果此条件为假,则必须打印   " 1"在输出中。

我在我的描述中提出的是引入一个计数器,然后计算值为1的位,然后根据此计数器进行输出,但我被认为是一个白痴,我被告知有'没有柜台的方式,我选择最难的方式。有人知道确定输出内容的更好方法吗?

提前致谢,如果描述看起来很乱,那就很抱歉

2 个答案:

答案 0 :(得分:3)

当TM读取输入位时,状态编号必须捕获从0到9的所看到的位数,这样我们才能识别到达结束的时间,以及看到的1位数,相关案例为0,1,2,3和> = 4。

编码所有相关可能性所需的状态少于10 * 5 = 50个。当机器进入指示已经看到9个输入位的状态之一时,如果它表示已经看到3个1,则写入0,否则写入1,然后停止。

请注意,我们不需要使用磁带进行存储 - 输入语言是常规的,因此可以使用有限状态机来决定,并且不需要无限存储。

答案 1 :(得分:0)

虽然Matt是正确的,但您可以使用存储将此问题概括为任意输入大小。

  1. 转到录像带的开头
  2. 继续寻找未加标记的1。标记它。
    • 如果找不到未加标记的1,请转到第7步。
  3. 返回录像带的开头
  4. 寻找未加标记的0。标记它。
    • 如果找不到未标记的0,请转到第9步。
  5. 寻找另一个未加标记的0。标记它。
    • 如果找不到未标记的0,请转到第9步。
  6. 转到第1步
  7. 转到输入的开头。
  8. 寻找未加标记的0
    • 如果您找不到,请输出0。停止。
  9. 输出1。停止。
  10. 这适用于任何输入尺寸。直观地说,我们为输入中的每个0寻找2 1 s,确保0位的1位是<a th:href="@{/order/{id}/details(id=3,action='show_all')}"> 位的两倍。