算法,语言和问题之间有什么区别?


Answers:


53

为简单起见,我将仅考虑“决策”问题,该问题的回答为是/否。功能问题的工作方式大致相同,不同的是,每个输入字都有一个特定的输出字,而不是是/否。

语言:语言只是一组字符串。如果您有一个字母,例如 ,那么是仅包含符号的所有单词的集合。例如,是任意长度的所有二进制序列的集合。不过,字母不必是二进制的。它可以是一元,三元等。Σ * Σ { 0 1 } *ΣΣΣ{0,1}

字母语言是任何子集。Σ *ΣΣ

问题:问题是一些有关我们希望回答的问题。具体地说,决策问题是这样一个问题:“我们给定的输入是否满足属性?X

语言是问题的正式体现。当我们想从理论上对决策问题进行推理时,我们通常会检查相应的语言。对于问题,相应的语言是:X

y X y X }L={ww为输入的编码到问题,答案输入为问题为“是” yXyX}

确定针对决策问题的输入的答案是否为“是”等同于确定该输入在字母表上的编码是否为相应的语言。

算法:算法是解决问题的逐步方法。注意,有一种算法可以用多种方式和多种语言来表示,并且有许多不同的算法可以解决任何给定的问题。

图灵机:图灵机是算法的形式类似物。在给定字母上的图灵机,对于每个单词,会或不会停在接受状态。因此,对于每个图灵机,都有对应的语言:M

w }L(M)={wM在输入处于接受状态。w}

(图灵机在所有输入上都停止,在yes输入上都暂停,这之间存在细微的区别,这定义了复杂度类和之间的区别。)R ERRE

语言和图灵机之间的关系如下

  1. 每台图灵机只接受一种语言

  2. 可能有不止一台图灵机接受一种给定的语言

  3. 可能没有图灵机接受给定的语言。

关于算法和问题,我们可以说大致相同的东西:每个算法都可以解决一个问题,但是可能有0个或多个算法可以解决一个给定的问题。

时间复杂度:算法和问题之间最常见的混淆源之一是关于复杂度类。正确的分配可以总结如下:

  • 算法具有时间复杂度
  • 问题属于复杂性类别

算法可能具有一定的时间复杂度。我们说,如果对于大小为任何输入,算法最多停止步,则该算法具有最坏情况的上限复杂度 。f n nf(n)f(n)n

问题没有运行时,因为问题与实际运行的特定算法无关。相反,如果存在某种在给定时间复杂度下解决该问题的算法,我们就说问题属于复杂度类别。

P X X P X X PP,NP,PSPACE,EXPTIME等都是复杂度类别。这意味着它们包含问题,而不是算法。一个算法永远不能在,但是如果有一个多项式时间算法可以解决给定的问题,那么就在。也可能有一堆接受的指数时间算法,但是由于存在一个接受多项式时间算法,因此它在。PXXPXXP


1
如果您认为合适,请随时编辑此答案。
jmite

我认为应该提到其他类型的计算问题(例如搜索问题),这会很好。
卡夫

1
谁说的?这种想法是为什么人们在没有图灵机意图之前就很难进行形式化和算法上的麻烦。Church-Turing论文说,算法是图灵机,反之亦然,并不是所有图灵机都停止运行。
jmite 2014年

4
杜德,这是我见过的最棒的答案。您只是在1页中总结了所有计算机科学。
CaptainCodeman '16

1
@ gnasher729有一个定理,它可以根据验证来定义,但是它的实际定义是针对非确定性机器的时间复杂度,因此名称NP:非确定性多项式
jmite
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.