Answers:
为简单起见,我将仅考虑“决策”问题,该问题的回答为是/否。功能问题的工作方式大致相同,不同的是,每个输入字都有一个特定的输出字,而不是是/否。
语言:语言只是一组字符串。如果您有一个字母,例如 ,那么是仅包含符号的所有单词的集合。例如,是任意长度的所有二进制序列的集合。不过,字母不必是二进制的。它可以是一元,三元等。Σ * Σ { 0 ,1 } *
字母语言是任何子集。Σ *
问题:问题是一些有关我们希望回答的问题。具体地说,决策问题是这样一个问题:“我们给定的输入是否满足属性?
语言是问题的正式体现。当我们想从理论上对决策问题进行推理时,我们通常会检查相应的语言。对于问题,相应的语言是:
y X y X }为输入的编码到问题,答案输入为问题为“是”
确定针对决策问题的输入的答案是否为“是”等同于确定该输入在字母表上的编码是否为相应的语言。
算法:算法是解决问题的逐步方法。注意,有一种算法可以用多种方式和多种语言来表示,并且有许多不同的算法可以解决任何给定的问题。
图灵机:图灵机是算法的形式类似物。在给定字母上的图灵机,对于每个单词,会或不会停在接受状态。因此,对于每个图灵机,都有对应的语言:
w }在输入处于接受状态。
(图灵机在所有输入上都停止,在yes输入上都暂停,这之间存在细微的区别,这定义了复杂度类和之间的区别。)R E
语言和图灵机之间的关系如下
每台图灵机只接受一种语言
可能有不止一台图灵机接受一种给定的语言
可能没有图灵机接受给定的语言。
关于算法和问题,我们可以说大致相同的东西:每个算法都可以解决一个问题,但是可能有0个或多个算法可以解决一个给定的问题。
时间复杂度:算法和问题之间最常见的混淆源之一是关于复杂度类。正确的分配可以总结如下:
算法可能具有一定的时间复杂度。我们说,如果对于大小为任何输入,算法最多停止步,则该算法具有最坏情况的上限复杂度 。f (n )n
问题没有运行时,因为问题与实际运行的特定算法无关。相反,如果存在某种在给定时间复杂度下解决该问题的算法,我们就说问题属于复杂度类别。
P X X P X X P等都是复杂度类别。这意味着它们包含问题,而不是算法。一个算法永远不能在,但是如果有一个多项式时间算法可以解决给定的问题,那么就在。也可能有一堆接受的指数时间算法,但是由于存在一个接受多项式时间算法,因此它在。