Algorithm 算法和数据结构如何与图灵机相关?

Algorithm 算法和数据结构如何与图灵机相关?,algorithm,data-structures,theory,turing-machines,Algorithm,Data Structures,Theory,Turing Machines,我的副本今天到了。在第一章中,作者介绍了图灵机。我还有另外两本算法教科书,但没有一本是关于图灵机器的,尽管它们在算法和数据结构方面很有名 我想了解图灵机和算法/数据结构之间的关系。理解图灵机成为算法专家真的很重要吗?图灵机只是分析计算的理论工具,也就是说,我们可以通过创建计算算法的图灵机来指定算法。它们在可计算性研究中非常有用,也就是说,如果可以计算函数的话。图灵机和其他几种形式化语言结构在霍普克罗夫特和乌尔曼的经典著作中进行了讨论。图灵机器也出现在讨论NP完备性时,例如在Garey和Johns

我的副本今天到了。在第一章中,作者介绍了图灵机。我还有另外两本算法教科书,但没有一本是关于图灵机器的,尽管它们在算法和数据结构方面很有名


我想了解图灵机和算法/数据结构之间的关系。理解图灵机成为算法专家真的很重要吗?

图灵机只是分析计算的理论工具,也就是说,我们可以通过创建计算算法的图灵机来指定算法。它们在可计算性研究中非常有用,也就是说,如果可以计算函数的话。图灵机和其他几种形式化语言结构在霍普克罗夫特和乌尔曼的经典著作中进行了讨论。图灵机器也出现在讨论NP完备性时,例如在Garey和Johnson的书中


一般来说,书籍和图灵机都是相当理论化的。如果你对algorihhms感兴趣,我会推荐你。然而,如果你想实际了解在真实计算机上实现并在真实数据上运行的算法,那么我想说的是,对图灵机有一个粗略的了解很重要。

图灵机只是分析计算的理论工具,我们可以通过创建一个计算算法的图灵机来指定算法。它们在可计算性研究中非常有用,也就是说,如果可以计算函数的话。图灵机和其他几种形式化语言结构在霍普克罗夫特和乌尔曼的经典著作中进行了讨论。图灵机器也出现在讨论NP完备性时,例如在Garey和Johnson的书中


一般来说,书籍和图灵机都是相当理论化的。如果你对algorihhms感兴趣,我会推荐你。然而如果你想实际了解在真实计算机上实现并在真实数据上运行的算法,那么我想说的是,对图灵机有一个粗略的了解很重要。

图灵机在描述数据结构和算法时很重要的原因是,它们提供了一个数学模型,我们可以在其中可以描述什么是算法。大多数情况下,算法是使用高级语言或伪代码描述的。例如,我可以描述一种算法,用于在数组中查找最大值,如下所示:

Set max = -infinity
For each element in the array:
    If that element is greater than max:
        Set max equal to that element.
从这个描述很容易看出算法是如何工作的,并且很容易将其翻译成源代码。但是,假设我已经写出了以下描述:

Guess the index at which the maximum element occurs.
Output the element at that position.
这是一个有效的算法吗?也就是说,我们能说“猜测指数”并严格定义它的含义吗?如果我们允许这样做,需要多长时间?如果我们不允许,为什么不呢?第一个描述和第二个描述有什么不同

为了对算法有一个严格的数学定义,我们需要有一些关于计算机如何工作以及它能做什么和不能做什么的正式模型。图灵机是正式定义计算的一种常用方法,尽管也可以使用其他方法(字符串重写系统、Church等)。一旦我们定义了计算的数学模型,我们就可以开始讨论什么样的算法描述是有效的——即,那些可以用我们的计算模型实现的

许多现代算法严重依赖于基础计算模型的属性。例如,假设计算模型有一些大小未知的内存缓冲区和两层内存。一些算法要求底层机器是,这意味着机器字的大小必须至少足够大,以容纳任何问题的大小。随机算法需要一个随机性的正式定义,以及机器如何使用随机值。非确定性算法需要一种指定非确定性计算的方法。基于电路的算法必须知道什么是电路原语,什么是不允许的。量子计算机需要一个关于什么操作是被允许的和不被允许的正式定义,以及一个算法的定义,即输出是概率的。分布式算法需要一个跨机器通信的正式定义

简而言之,在描述算法时,明确哪些是允许的,哪些是不允许的,这一点很重要。然而,要成为一名优秀的程序员或对算法有扎实的掌握,您不需要了解图灵机器的内部和外部,也不需要了解如何使用它们编码特定问题的具体细节。不过,您应该知道的是,计算模型可以做什么,不能做什么,以及每个操作的成本是多少。通过这种方式,您可以推断算法的效率,以及它们使用的各种资源(时间、空间、内存、通信、随机性、不确定性等)的数量。但也就是说,如果你不理解底层模型,不要惊慌

还有另外一个原因需要考虑计算的基本模型——讨论它的局限性。每个计算模型都有其局限性,在某些情况下,您可以证明某些算法不可能针对某些问题存在,或者任何解决某些问题的算法都必须使用一定数量的给定资源。算法设计中最常见的例子是NP硬度的概念。一些问题被认为是非常“困难”的,但是这个困难的正式定义依赖于图灵机器和不确定图灵机器的知识。在这种情况下,理解模型是有用的,因为它允许您对某些问题的计算可行性进行推理

<