Computer science C和图灵机

Computer science C和图灵机,computer-science,turing-machines,formal-languages,Computer Science,Turing Machines,Formal Languages,我知道图灵机器很好用,因为它和我们的计算机有“同样的能力”。 另外,我的讲座说,每一个C代码都可以由一些图灵机执行。 我相信这是学习这门学科的关键,但我没有找到任何证据 将C代码翻译成某种图灵机的算法是什么?该图灵机执行C代码,并给出与C代码相同的输出,作为输入?许多年前,人们没有太多的时间来解释想法和想象事物将如何工作;在计算的历史上有很多“机器”,其中最著名的一个是,它解释并清楚地展示了如何解决简单的数学问题,这些问题对于当时可用的机器和设备来说根本不简单 图灵机展示了如何从计算的构建块开

我知道图灵机器很好用,因为它和我们的计算机有“同样的能力”。
另外,我的讲座说,每一个C代码都可以由一些图灵机执行。 我相信这是学习这门学科的关键,但我没有找到任何证据


将C代码翻译成某种图灵机的算法是什么?该图灵机执行C代码,并给出与C代码相同的输出,作为输入?

许多年前,人们没有太多的时间来解释想法和想象事物将如何工作;在计算的历史上有很多“机器”,其中最著名的一个是,它解释并清楚地展示了如何解决简单的数学问题,这些问题对于当时可用的机器和设备来说根本不简单

图灵机展示了如何从计算的构建块开始,使用一个磁头、一个磁带、一个寄存器和一个查找表,得到一台工作机器,在当时,这件简单的事情是开创性的,事实上,如果你只是将一组有效状态、有效寄存器减少到0和1,您可以了解现代CPU背后的基本原理

尤其是图灵机器+布尔代数是一门好的计算机科学课程的转折点,因为它们教给你使CPU按其工作方式工作的基本逻辑

如果您是一名程序员,您可以将图灵机的本质抽象为
while
构造,内部带有
If
,您可以轻松猜测
while
的作用以及
If
的条件是什么


在现代CPU上,你甚至可能没有
while
循环,只是一个无休止的循环,因为CPU根本不睡觉,它总是有事情要做,即使什么都不做也意味着为CPU做一些事情,闲置循环就是为了这个目的而发明的。

许多年前,人们没有太多的时间来解释思想和想象事物将如何运作;在计算的历史上有很多“机器”,其中最著名的一个是,它解释并清楚地展示了如何解决简单的数学问题,这些问题对于当时可用的机器和设备来说根本不简单

图灵机展示了如何从计算的构建块开始,使用一个磁头、一个磁带、一个寄存器和一个查找表,得到一台工作机器,在当时,这件简单的事情是开创性的,事实上,如果你只是将一组有效状态、有效寄存器减少到0和1,您可以了解现代CPU背后的基本原理

尤其是图灵机器+布尔代数是一门好的计算机科学课程的转折点,因为它们教给你使CPU按其工作方式工作的基本逻辑

如果您是一名程序员,您可以将图灵机的本质抽象为
while
构造,内部带有
If
,您可以轻松猜测
while
的作用以及
If
的条件是什么


在现代CPU上,你甚至可能没有一个
while
循环,只是一个无休止的循环,因为CPU根本不睡觉,它总是有事情要做,即使什么都不做也意味着为CPU做些什么,空闲周期就是为此而发明的。

一种转换(任意)的算法将C代码写入图灵表是相当困难的,我认为这不会很有指导意义。我宁愿建议考虑以下事项:

  • 要执行C程序,必须将其编译为。这段代码是CPU可以理解的:机器代码告诉CPU该做什么。例如,这可以是“从内存中的某个位置读取一个数字,从内存中的另一个位置读取另一个数字,将两个数字相加,将结果存储在内存中的另一个位置”。这大概是C编译器从
    a=b+C创建的。CPU只能做“简单的事情”,比如算术、访问内存和跳转到程序中的不同位置。最后一位用于实现循环和if-then-else构造:“如果某个条件为真,跳转到此位置并在那里执行代码,否则跳转到另一个位置”
  • 图灵机也可以做算术运算:假设我们在磁带上存储了两个数字,例如,要计算4+5,我们的磁带看起来像
    || | | | | | | | | | | | | |
    是磁带的空白部分,
    是磁头),要添加数字,我们的机器只需要删除内部的
    ,将其替换为
    ,并从磁带的开头或结尾移除一个
    ,以获得
    。| | | | | | |
    。使用图灵指令表,您可以根据磁带的当前状态做出决定:如果我们处于状态A并看到A |,则执行此操作(写入符号、移动磁头、更改状态),否则,执行其他操作
  • 所以我的建议是,不要试图从C到图灵机,而是想象/查找/询问现实世界中的CPU执行某个C语句需要做什么,然后找出图灵机可以做同样的事情

    还有另一种方法:执行编译的C程序的真实世界计算机由

    • “做事情”的CPU
    • “存储东西”的内存
    • “协调事物”的程序
    图灵机由以下部分组成:

    • 能在磁带上读写的磁头
    • 一个(无限的!甚至比个人电脑更好)磁带==存储东西
    • 指令表==协调事物

    我希望这会有所帮助。

    将(任意)C代码转换为图灵表的算法编写起来会非常困难,我认为这不会很有启发性。我宁愿建议考虑以下事项:

  • 要执行C程序,必须将其编译为。这段代码是CPU可以理解的:机器代码告诉CPU该做什么。例如,这可以是“读取一个n”