我了解到图灵机很好用,因为它具有与计算机相同的“相同功率”。
另外,我的讲座说每个C代码都可以由一些图灵机执行。
我相信这是倾向于这个主题的关键,但我没有找到任何证据。
将C代码转换为执行它的某个图灵机并为c代码提供相同输出的算法是什么?
答案 0 :(得分:2)
将(任意)C代码转换为图灵表的算法很难编写,我认为它不会很有启发性。我宁愿建议考虑以下事项:
a = b + c;
创建的内容。 CPU只能做简单的事情"例如算术,访问存储器,以及跳转到程序中的不同位置。最后一位用于实现循环和if-then-else结构:"如果某些条件为真,则跳转到此位置并在那里执行代码,否则,跳转到另一个位置"。#@||||#|||||#
(#
是磁带的空白部分,@
是磁头),要添加数字,我们的机器只需要删除内部#
,将其替换为|
,并从磁带的开头或结尾删除一个|
以获取#@|||||||||#
。使用图灵指令表,您可以根据磁带的当前状态做出决定:如果我们处于状态A并看到|,请执行此操作(写入符号,移动头部,更改状态),否则,执行某些操作别的。所以我的建议是你不要试图从C到图灵机,而是想象/查看/询问现实世界的CPU必须做什么来执行某个C语句,然后才能图灵机可以做同样的事情。
另一种方法:执行编译C程序的真实计算机由
组成图灵机由
组成我希望这会有所帮助。
答案 1 :(得分:1)
许多年前,人们没有太多的东西来解释想法并想象事情是如何运作的;在计算史上有许多机器"最着名的机器之一是Babbage machine,它解释并清楚地说明如何解决简单的数学问题,这些问题并不简单。全部用于当时可用的机器和设备。
图灵机显示了如何从计算的构建块开始,使用磁头,磁带,寄存器和查找表并获得工作机器,那时这个简单的事情是开创性的,事实上如果你只是将有效状态集,有效寄存器减少到0和1,就可以得到现代CPU背后的基本原理。
特别是图灵机+布尔代数是一个优秀的计算机科学课程的转折点,因为它们教会了使CPU工作的基本逻辑。
如果您是程序员,您可以将图灵机的本质抽象为while
内部if
的构造,您可以轻松猜出while
做什么以及什么是有条件的if
。
在现代CPU上,你可能甚至没有while
循环,只是一个无穷无尽的循环,因为CPU根本就不会睡觉,它总是有事可做,甚至什么都不做就意味着为了CPU,IDLE循环就是为此而发明的。
答案 2 :(得分:1)
您可以轻松地在图灵机中实现一个非常简单的算法,并发现它需要运行宇宙的年龄或更长的时间。 这并不意味着图灵机是一个坏主意,不仅仅是说晶体管是一个坏主意。但是为了获得有用的计算设备,您可能想要考虑并行运行图灵机(可能是许多图灵机)。在过去的50年里,这已经超出了我在计算领域所学到的一切。
Richard Mullins