复杂类gydF4y2Ba
复杂类gydF4y2Ba是核心gydF4y2Ba复杂性理论gydF4y2Ba这是计算机理论科学的一个中心话题。一个复杂类包含一组需要相似的空间和时间范围来解决的问题,例如“关于输入大小的所有问题在多项式时间内可解”,“关于输入大小的所有问题在指数空间内可解”,等等。通过在抽象的计算模型(通常是a)上运行问题,通常可以证明问题属于特定的复杂类gydF4y2Ba图灵机gydF4y2Ba.计算机科学中的一些最大的未解决问题与证明两种复杂性等级是否等同,最值得注意的例子是臭名昭着的gydF4y2BaP = NPgydF4y2Ba问题-到目前为止,科学家还无法证明或反驳P类和NP类的相等性。gydF4y2Ba
有数百个复杂性类,此页面将描述一些最常见的类。gydF4y2Ba
内容gydF4y2Ba
复杂类gydF4y2Ba
复杂类可以帮助计算机科学家根据解决问题和验证答案所需的时间和空间对问题进行分组。例如,复杂性可以帮助描述需要多少步骤gydF4y2Ba图灵机gydF4y2Ba决定问题gydF4y2Ba 还是坚固的掌握gydF4y2BaBig-O表示法gydF4y2Ba对于理解复杂类是必要的。gydF4y2Ba
某些复杂性类是其他复杂性类的子集。例如,在确定的多项式时间内可解的一类问题,gydF4y2Ba ,是在非确定性多项式时间中可解决的问题类别的子集gydF4y2Ba .gydF4y2Ba
的gydF4y2Ba时间复杂性gydF4y2Ba通常使用算法在描述解决问题的步骤数时使用,但它也可以用来描述它需要多长时间验证答案(更重要的是gydF4y2BaNPgydF4y2Ba部分)。有很多方法可以计算时间复杂度。人们可以通过确定某一行代码在程序中执行了多少次,或者通过计算图灵机在解决问题时执行了多少步来计算时间复杂度。了解算法的时间复杂度有助于程序员和计算机科学家了解算法是否有效。它帮助我们知道一个算法需要多长时间才能给出答案。gydF4y2Ba
的gydF4y2Ba空间复杂性gydF4y2Ba算法的定义描述了算法运行所需的内存量。就图灵机而言,解决问题所需的空间与解决问题所需的图灵机磁带上的空间数量有关。gydF4y2Ba
有关空间复杂度和时间复杂度的更多信息,请参见gydF4y2Ba空间层次定理gydF4y2Ba和gydF4y2Ba时间层次定理gydF4y2Ba
复杂性类是组织类似类型问题的有用方式。对于许多复杂性类,存在许多打开问题 - 例如,如果gydF4y2Ba这gydF4y2Ba复杂性类等于gydF4y2Ba那个gydF4y2Ba复杂性类。在这些问题中,如果答案是"是的,他们是平等的"就会产生巨大的理论后果gydF4y2Ba多项式层次gydF4y2Ba复杂的类可以从几百个层次分解成几个层次,而且也有许多实际的应用。比如,如果结果是gydF4y2Ba ,许多保护计算机、银行等的安全算法将被淘汰。gydF4y2Ba
PgydF4y2Ba
班级gydF4y2Ba 包含决策问题(具有“是”的问题或“否”答案),其在多项式时间通过确定性图灵机可解决。有时这是措辞:gydF4y2Ba 是由确定性图灵机通过多项式时间可解除的语言。gydF4y2Ba
许多问题可以用a来解决gydF4y2Ba强力攻击gydF4y2Ba方法,但这通常需要gydF4y2Ba幂数gydF4y2Ba时间如果一个问题有一个多项式时间算法,它可以比蛮力法更有效地解决。许多实际使用的算法都是多项式时间算法——指数时间算法通常不太有用,并且尽可能避免使用。gydF4y2Ba
一个问题gydF4y2Ba 可以在gydF4y2Ba 某个常数的时间gydF4y2Ba 在哪里gydF4y2Ba 是输入的大小。gydF4y2Ba
一旦发现了一些多项式时间算法问题,通常可以改善其运行时间。例如,用于乘以两个n位数的野生算法具有运行时间gydF4y2Ba .的gydF4y2BaKaratsuba算法gydF4y2Ba改进了朴素算法,可以将两个n位数相乘gydF4y2Ba 时间。这些都是多项式时间运行时间,但Karatsuba方法具有较小的恒定因素。gydF4y2Ba
P问题gydF4y2Ba
查找数字是否为gydF4y2Ba相对素质gydF4y2Ba
NP与coNPgydF4y2Ba
班级gydF4y2Ba 包含决策问题(回答为“是”或“否”的问题),这些问题可由图灵机在中解决gydF4y2Ba不确定的gydF4y2Ba多项式时间-包括多项式时间内可解的问题,以及指数时间内可解的问题。虽然这些问题可能需要很长时间才能解决,但问题仍然存在gydF4y2Ba 可以gydF4y2Ba验证gydF4y2Ba由图灵机在多项式时间内完成。这意味着如果给一个“是”的答案gydF4y2Ba 问题,你可以在多项式时间内检查它是否正确。这个“是”的答案通常被称为agydF4y2Ba目击者gydF4y2Ba或者gydF4y2Ba证明书gydF4y2Ba.gydF4y2Ba
例如,要考虑大数字是一个gydF4y2Ba 问题如果给你一个很大的数,问它的素因式分解是什么,你可能要花很长时间去做。然而,如果有人声称他们知道一个给定的大数的素因子分解,那么很容易验证这一点——只需将他们产生的因子相乘,看看乘积是否是原始的大答案。gydF4y2Ba
证明存在问题gydF4y2Ba 通常包括显示您可以提供可以在多项式时间内验证的见证字符串。gydF4y2Ba
包含在gydF4y2Ba ,这是可以写的gydF4y2Ba ,但是否gydF4y2Ba 和gydF4y2Ba 是gydF4y2Ba平等的gydF4y2Ba.然而,大多数理论计算机科学家都相信gydF4y2Ba .gydF4y2Ba
骗子gydF4y2Ba
如果是问题gydF4y2Ba 在gydF4y2Ba ,然后是它的补码,gydF4y2Ba 在gydF4y2Ba .gydF4y2Ba 包含有关“否”答案的多项式时间验证的问题 - 如果给定不解决问题的解决方案,则易于验证该解决方案是否不起作用。gydF4y2Ba
一个问题gydF4y2Ba 是A.gydF4y2Ba可满足性问题gydF4y2Ba被称为gydF4y2Ba 哪里gydF4y2Ba .提供“否”目击者只提供一个实例gydF4y2Ba做gydF4y2Ba具有令人满意的作业,这可以在多项式时间中进行检查。如果建议的任务导致令人满意的分配,我们知道该实例不是成员gydF4y2Ba . 但是,如果见证字符串未提供令人满意的赋值,则不会gydF4y2Ba证明gydF4y2Ba这个问题gydF4y2Ba是gydF4y2Ba在gydF4y2Ba -一个“不”的证人可能还没有被提出。gydF4y2Ba
为gydF4y2Ba 和gydF4y2Ba proble米年代,you don’t need to be able to verify all of the “yes” or “no” answers at once in polynomial time, you just need to be able to verify a particular “yes” or “no” answer in polynomial time in order for a problem to be in 或gydF4y2Ba [2]gydF4y2Ba.证明存在问题gydF4y2Ba 通常需要提供一个见证字符串,该字符串可以在多项式时间内进行验证。gydF4y2Ba
有些问题在于gydF4y2Ba .此类中的问题可以在多项式时间中检查“是”和“否”证明字符串的属性。这包括所有问题gydF4y2Ba .换句话说,gydF4y2Ba 是两者的子集吗gydF4y2Ba 和gydF4y2Ba .gydF4y2Ba
比如说拿这个问题来说,,gydF4y2Ba 这决定了一个数字gydF4y2Ba 是A.gydF4y2Ba主要的gydF4y2Ba号码。这是中国的一个问题gydF4y2Ba 因为它真的很容易检查一个数字不是素数 - 所提出的反击,证人字符串只会包括数字的因素。如果因素是以外的数字gydF4y2Ba 和gydF4y2Ba ,我们已成功验证了“否”答案。这也是如此gydF4y2Ba 在gydF4y2Ba 这意味着它也需要多项式时间来验证一个“是”的见证。事实上,gydF4y2Ba素性测试gydF4y2Ba这是一个问题gydF4y2Ba 证明这是计算机科学的一个巨大进步。gydF4y2Ba
它是未知的gydF4y2Ba 虽然大多数理论计算机科学家认为它们不平等。gydF4y2Ba
键关系gydF4y2Ba
NP中的问题gydF4y2Ba
保理gydF4y2Ba(另见gydF4y2BaRSAgydF4y2Ba)gydF4y2Ba
布尔可满足性(gydF4y2BaCircuit-SATgydF4y2Ba,gydF4y2Ba星期六gydF4y2Ba,gydF4y2Ba3-SATgydF4y2Ba(等)gydF4y2Ba
np完全问题gydF4y2Ba
问题是gydF4y2Ba ,有时书面gydF4y2Ba ,如果两者都在gydF4y2Ba 并且是gydF4y2Ba .gydF4y2Ba
NP-HARD.gydF4y2Ba
一个gydF4y2Ba 问题是gydF4y2Ba至少一样难gydF4y2Ba作为最困难的问题gydF4y2Ba .一个问题gydF4y2Ba 是gydF4y2Ba 如果每一个问题gydF4y2Ba 在gydF4y2Ba ,有多项式时间gydF4y2Ba减少gydF4y2Ba从gydF4y2Ba 到gydF4y2Ba .另一种更普遍的说法是,一个问题gydF4y2Ba 可归结为问题gydF4y2Ba 一种求解问题的算法gydF4y2Ba 也可以用来解决问题gydF4y2Ba .gydF4y2Ba
问题不一定存在gydF4y2Ba ,它们不必是可决定的。例如,gydF4y2Ba停顿问题gydF4y2Ba是一个gydF4y2Ba 问题,但不是问题gydF4y2Ba 问题gydF4y2Ba
非完全多项式gydF4y2Ba
问题非常特别,因为任何问题gydF4y2Ba 类可以转换或gydF4y2Ba减少gydF4y2Ba进入gydF4y2Ba 多项式时间问题。这意味着如果你能解出angydF4y2Ba 问题,您可以在中解决任何其他问题gydF4y2Ba .一个重要的结论是如果你能解AngydF4y2Ba 多项式时间内的问题,那么你可以解决任何问题gydF4y2Ba 多项式时间的问题。gydF4y2Ba
的gydF4y2BaCook-Levin定理gydF4y2Ba证明了可满足性问题是gydF4y2Ba .gydF4y2Ba
NP完全问题gydF4y2Ba
布尔可满足性(电路SAT、SAT、3-SAT等)gydF4y2Ba
rp和corp.gydF4y2Ba
班级gydF4y2Ba ,随机化多项式时间,是存在gydF4y2Ba概率图灵机gydF4y2Ba具有以下属性:gydF4y2Ba
它始终在输入大小的多项式时间内运行gydF4y2Ba
如果正确答案是“否”,则表示gydF4y2Ba总是gydF4y2Ba返回“不”gydF4y2Ba
如果正确的答案是“是的”,那么它至少会返回“是”的概率gydF4y2Ba *,否则返回“no”。gydF4y2Ba
这意味着,如果正确答案是“否”,那么算法肯定会返回“否”,但如果正确答案是“是”,算法可能会返回错误答案(“否”),最多有一半的时间。如果算法确实返回“是”,那么答案肯定是“是”——“是”的答案总是正确的,但“否”的答案可能是错误的。gydF4y2Ba
*gydF4y2Ba 这里是任意选择的,但是类gydF4y2Ba 定义了一半。由于错误是片面的,运行许多试验可以减少错误,这被称为gydF4y2Ba放大gydF4y2Ba. 如果重复该算法gydF4y2Ba 独立时间:拒绝字符串gydF4y2Ba 如果有gydF4y2Ba 运行拒绝和接受gydF4y2Ba 除此以外。算法造成错误并返回错误答案的概率gydF4y2Ba 次是gydF4y2Ba ,趋近于0gydF4y2Ba 增加。gydF4y2Ba
类似于gydF4y2Ba 和gydF4y2Ba ,有一个类包含gydF4y2Ba 被称为gydF4y2Ba .gydF4y2Ba
定义如下:gydF4y2Ba
它始终在输入大小的多项式时间内运行gydF4y2Ba
如果正确答案是“是”,它gydF4y2Ba总是gydF4y2Ba返回“是”gydF4y2Ba
如果正确答案是“否”,那么它至少会以概率返回“否”gydF4y2Ba ,否则,它返回“是”。gydF4y2Ba
这意味着如果答案是“是”,那么算法肯定会返回“是”,但是如果答案是“否”,那么算法可能会返回错误的答案。gydF4y2Ba
两者都存在一些问题gydF4y2Ba 和gydF4y2Ba ,即gydF4y2Ba .gydF4y2Ba
是gydF4y2Ba . 不知道是否gydF4y2Ba .gydF4y2Ba 也是?的子集gydF4y2Ba 现在还不知道gydF4y2Ba .gydF4y2Ba 是gydF4y2Ba ,及gydF4y2Ba 是gydF4y2Ba .gydF4y2Ba
键关系gydF4y2Ba
与…有关gydF4y2Ba随机算法gydF4y2Ba.gydF4y2Ba
BPP与ZPPgydF4y2Ba
BPPgydF4y2Ba
(有界误差概率多项式时间)是一类存在gydF4y2Ba概率图灵机gydF4y2Ba具有以下属性:具有以下属性:gydF4y2Ba
它保证在多项式时间内运行gydF4y2Ba
在任何给定的算法运行中,它最多有可能gydF4y2Ba 无论答案是“是”还是“否”,都会给出错误的答案gydF4y2Ba
这意味着如果正确的答案是“是的,”算法将输出概率的“是”gydF4y2Ba . 如果正确答案为“否”,算法将以概率输出“否”gydF4y2Ba . 如果正确答案为“否”,算法将以概率输出“是”(错误答案)gydF4y2Ba .如果正确的答案是“是”,则该算法将以概率输出“否”(错误答案)gydF4y2Ba .gydF4y2Ba
蒙特卡罗算法gydF4y2Ba你在办公室吗gydF4y2Ba 班级。gydF4y2Ba
它是未知的gydF4y2Ba ,但许多计算机科学家认为两者是平等的。发现如果gydF4y2Ba 会和解决gydF4y2Ba 问题它将显示每种概率算法是否可以由确定性替换。gydF4y2Ba
ZPP.gydF4y2Ba
(零误差概率多项式时间)是一类存在gydF4y2Ba概率图灵机gydF4y2Ba具有以下属性:gydF4y2Ba
它保证在多项式时间内运行gydF4y2Ba
它可能会返回“是”、“否”或“我不知道”的答案gydF4y2Ba
如果它返回“是”或“否”,那么这就是正确答案gydF4y2Ba
它以概率返回“我不知道”gydF4y2Ba
这意味着如果总是返回正确答案或“我不知道”,那么机器将以小于或等于一半的概率返回“我不知道”。gydF4y2Ba
班级gydF4y2Ba 等于gydF4y2Ba 和gydF4y2Ba .gydF4y2Ba
拉斯维加斯算法gydF4y2Ba包括在gydF4y2Ba 班级。gydF4y2Ba
键关系gydF4y2Ba
pspace,npspace和expspacegydF4y2Ba
班级gydF4y2Ba 是可以通过a解决的决策问题集gydF4y2Ba确定性gydF4y2Ba图灵机在一个多项式量的空间相对于输入大小。gydF4y2Ba 是可以通过a解决的决策问题集gydF4y2Ba不确定的gydF4y2Ba图灵机在一个多项式量的空间相对于输入大小。同样的,gydF4y2Ba 是一组决策问题,可以通过gydF4y2Ba确定性gydF4y2Ba相对于输入大小,图灵机在指数量空间中。gydF4y2Ba
通过gydF4y2Ba萨维奇定理gydF4y2Ba 和gydF4y2Ba .gydF4y2Ba
和gydF4y2Ba 包含在gydF4y2Ba ,但不知道它们是否等价。gydF4y2Ba
键关系gydF4y2Ba
另请参阅gydF4y2Ba
参考文献gydF4y2Ba
- 雅各布,k。gydF4y2Ba计算理论gydF4y2Ba. 2016年6月26日检索自gydF4y2Bahttp://ocw.mit.edu/courses/mathematics/18-404j-theory-of-computation-fall-2006/gydF4y2Ba
- , .gydF4y2Ba骗子gydF4y2Ba. 2016年6月26日检索自gydF4y2Bahttps://en.wikipedia.org/wiki/co-np.gydF4y2Ba
- B。gydF4y2Banp np-complete np-hard.svggydF4y2Ba. 2016年6月29日检索自gydF4y2Bahttps://en.wikipedia.org/wiki/File:P_np_np-complete_np-hard.svggydF4y2Ba
- QgydF4y2Ba复杂性集群pspace.gydF4y2Ba. 2016年6月29日检索自gydF4y2Bahttps://en.wikipedia.org/wiki/file:compledity_subsets_pspace.svg.gydF4y2Ba