图灵机和算法之间的区别是什么



根据我的理解,图灵机只是算法的机器表示。算法和图灵机之间有什么区别吗?

它们非常不同。

算法是一个过程。它可以用多种方式指定,通常是用某种编程语言写下程序。相比之下,图灵机描述了一种适用于在非常具体和不切实际的机器上运行的过程。

然而,算法的特性取决于它运行的机器。图灵机看起来与现实世界中任何感兴趣的机器都不一样。因此,虽然每个算法都可以用图灵机来表示,但图灵机并不是首选的表示方式。图灵机的表示掩盖了算法最有趣的特性。

例如,合并排序是众所周知的O(n log(n))。从20世纪60年代Donald Knuth的人工MIX架构到如今云中高度并行化的分布式实现,它都是以这种方式扩展的。

但在图灵机中,并行迭代两个数组并写入第三个数组需要不断地在磁带中两个遥远的位置之间来回寻找以进行比较,然后再次寻找写入输出的位置。因此,虽然您可以构建一个实现可识别合并排序的图灵机,但它不会是O(n log(n))。一英里也不远。事实上,它的性能要比冒泡排序差得多。(因为冒泡排序只比较磁带上接近的东西,所以来回搜索的时间更少。(

算法比图灵机更广泛。一个算法实际上只是由一些输入和一组指令组成的。这里有一个非常简单的算法:

Algorithm SumNumbers
Input: A list of numbers L.
Output: The sum of all numbers in L.
if L.size = 0 return null
sum <- 0
for each item in L, do
sum <- sum + item
return sum 

在这里,我们定义了和算法。甚至还没有讨论过图灵机。

一旦定义了m元组,图灵机就只是一种算法。输入是通过设置磁带的初始状态来定义的。算法的输出是过程停止后磁带的最终状态和/或最终状态。在给定输入的情况下,获得输出的步骤由m元组和车削机床的一般计算规则确定:https://en.wikipedia.org/wiki/Turing_machine#Formal_definition

现在,确定图灵机是否真的会停止并为你提供一个";输出";是另一个兔子洞:https://en.wikipedia.org/wiki/Halting_problem

相关内容

最新更新