C和图灵机

时间:2014-04-08 20:09:42

标签: computer-science turing-machines formal-languages

我了解到图灵机很好用,因为它具有与计算机相同的“相同功率”。
另外,我的讲座说每个C代码都可以由一些图灵机执行。 我相信这是倾向于这个主题的关键,但我没有找到任何证据。

将C代码转换为执行它的某个图灵机并为c代码提供相同输出的算法是什么?

3 个答案:

答案 0 :(得分:2)

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

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

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

    组成
    • 一个"做事情的CPU"
    • 记忆"存储事物"
    • 一个程序,以协调事物"

    图灵机由

    组成
    • 一个可以在磁带上读写的头==做事
    • an(无限!甚至比PC还要好!)tape == store things
    • 指令表==协调事物

    我希望这会有所帮助。

答案 1 :(得分:1)

许多年前,人们没有太多的东西来解释想法并想象事情是如何运作的;在计算史上有许多机器"最着名的机器之一是Babbage machine,它解释并清楚地说明如何解决简单的数学问题,这些问题并不简单。全部用于当时可用的机器和设备。

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

特别是图灵机+布尔代数是一个优秀的计算机科学课程的转折点,因为它们教会了使CPU工作的基本逻辑。

如果您是程序员,您可以将图灵机的本质抽象为while内部if的构造,您可以轻松猜出while做什么以及什么是有条件的if

在现代CPU上,你可能甚至没有while循环,只是一个无穷无尽的循环,因为CPU根本就不会睡觉,它总是有事可做,甚至什么都不做就意味着为了CPU,IDLE循环就是为此而发明的。

答案 2 :(得分:1)

您可以轻松地在图灵机中实现一个非常简单的算法,并发现它需要运行宇宙的年龄或更长的时间。 这并不意味着图灵机是一个坏主意,不仅仅是说晶体管是一个坏主意。但是为了获得有用的计算设备,您可能想要考虑并行运行图灵机(可能是许多图灵机)。在过去的50年里,这已经超出了我在计算领域所学到的一切。

Richard Mullins