从中国象棋到NP完全问题报告.docx
《从中国象棋到NP完全问题报告.docx》由会员分享,可在线阅读,更多相关《从中国象棋到NP完全问题报告.docx(23页珍藏版)》请在冰豆网上搜索。
从中国象棋到NP完全问题报告
从中国象棋到NP完全问题
【摘要】数学发展到21世纪,便和计算机的发展有了不解之缘。
文章从古老的象棋谈起,围绕计算机的的灵魂——算法,也是数学最古老的本质论题,谈到了数学机械化的可能性。
通过对可计算理论和复杂性理论的阐述,引出“千禧年数学难题”中最重要的问题之一——NP完全问题的基本理论和研究思想,在加深对NP完全性的理解之上,探讨我们所生活的这个世界的本质所在,我们所研究的数学问题的本质所在以及它的终极结论。
全文涉及到很多基本概念,主要内容是围绕算法谈论NP完全问题的来龙去脉,从思想上深入理解这一千年难题的根本所指。
【关键字】算法机械证明数学千年难题计算复杂性NP完全性终极理论
0.引言
这个世界的本质是什么?
这是一个无人能回答的问题,也是一个值得人们永无止尽地去探求的问题。
也许借助于“数学”这个人类至今所发明的最强有力的工具,我们会离答案更近一点。
从万物的起源谈起,人类总不忘尝试着去复原那远古混沌的图景,也渴望着发现终极理论来诠释我们所在的宇宙。
数学先于人类诞生,毋庸置疑!
数学就是那万物得以有序运行的机制所在,数学就是我们所渴求的终极理论的美妙琴弦!
霍金借助于数学工具,写出《时间简史》,增进了我们认识宇宙的深度;菜场上的老大娘默默念叨着菜价,为生计精打细算;华尔街的金融师做着大量的分析和计算,预测出全球金融市场的风起云涌;活跃在21世纪IT舞台的精英们也在尝试着把人类的实际需求转化成一个个的程序,交给计算机去处理……
由此可见,数学的深入发展与人类的命运息息相关,不管是对个人还是群体。
纵观数学辉煌的发展史,在各类简单的或是复杂的数学问题中,有没有共通的东西呢?
有!
那就是算法!
你会惊讶地发现,算法似乎就是数学的本质!
任何在数学上已解决了的问题都可以交给算法去处理,任何运行的机制和运动的物体都可以用算法来描述!
于是我们就有了这样一个疑问:
是否任何问题的解决都可以归结为寻求到相应的算法?
然而,情况并不乐观,仍然存在着大量的不可计算的问题,也就是不能用算法来描述的问题让人们困惑不已。
事实上,我们现在所掌握的数学并不是完美的。
就像我们建立的现代科学体系,数学也只是对客观世界的近似刻画,是人类为获得外界信息所发明的一个有力工具。
类似于语言,数学使得先辈们的生活经验得以记录下来,数学符号使得人们精确思维有了载体。
数学的不完美性和持续发展性也能够从数学史上的三大悖论窥得,而每一个难题的解决则是人类思维升华、大脑进化的必然过程!
数学需要深刻的思考,而正是这深入的思考促进了社会的发展。
当不可思议的悖论发生的时候,那必然是我们的工具出了漏洞,在苦苦思索之后,我们的蒙昧与无知得到洗涤,我们对世界的认识也更加深入了。
本文较系统地阐述了算法的一个高级话题——NP难问题——的其来龙去脉。
文章从古老的中国象棋谈起,深入认识算法的本质,并由此延伸到数学的机械化。
在对当今世界数学七大难题核心思想的了解下,进一步探析了计算复杂性的理论。
文章最后围绕NP难问题,尝试着使其在思维上明朗化,以摆脱框框条条的束缚,站在哲学的高度来审视数学的本质所在,从而提高我们认识世界的广度和深度。
1.美妙的算法
1997年5月,深蓝第二次次挑战国际象棋世界冠军卡斯巴罗夫,比赛在5月11日结束,最终深蓝电脑以3.5:
2.5击败卡斯巴罗夫,成为首个在标准比赛时限内击败国际象棋世界冠军的电脑系统。
深蓝战胜人脑的根本所在在于它使用了更加优良的算法,而国际象棋大师的脑海中也储存了大量的棋谱和固有的逻辑推理。
中国古代象棋也是一种基于推理的益智游戏,它是对古代战争的抽象模拟,对提高战将们的逻辑推理和思维的严密性很有帮助。
弈棋高手大都熟悉很多棋谱(如下图所示),而那一张张棋谱实际上就是某一算法确定的一步,谁的算法更优,谁就能赢得棋局。
图1-0中国象棋图1-1棋谱
1.1算法的定义
那么到底什么是算法呢?
算法可以理解为有基本运算及规定的运算顺序所构成的完整的解题步骤。
或者看成按照要求设计好的有限的确切的计算序列,并且这样的步骤和序列可以解决一类问题。
定义1.1算法是求解问题类的、机械的、统一的方法,它由有限多个步骤组成,对于问题类中的每个给定的具体问题,机械地执行这些步骤就可以得到问题的解答。
正是由于算法的这种特性,才使得计算不仅可以由人,而且可以由计算机来完成。
这也是深蓝得以战胜人脑的依据所在。
用计算机解决问题的过程可以分成三个阶段:
分析问题、设计算法和实现算法。
1.2算法的历史
中国古代的筹算口诀与珠算口诀及其执行规则就是算法的雏形,这里,所解决的问题类是算术运算。
古希腊数学家欧几里得在公元前3世纪就提出了一个算法,来寻求两个正整数的最大公约数,这就是有名的欧几里得算法,亦称辗转相除法。
中国早已有“算术”、“算法”等词汇,但是它们的含义是指当时的全部数学知识和计算技能,与现代算法的含义不尽相同。
英文algorithm(算法)一词也经历了一个演变过程,最初的拼法为algorism或algoritmi,原意为用阿拉伯数字进行计算的过程。
这个词源于公元9世纪波斯数字家阿尔·花拉子米的名字的最后一部分。
在古代,计算通常是指数值计算。
现代计算已经远远地突破了数值计算的范围,包括大量的非数值计算,例如检索、表格处理、判断、决策、形式逻辑演绎等。
欧几里得算法被人们认为是史上第一个算法。
第一次编写程序是AdaByron于1842年为巴贝奇分析机编写求解伯努利方程的程序,因此AdaByron被大多数人认为是世界上第一位程序员。
因为查尔斯·巴贝奇(CharlesBabbage)未能完成他的巴贝奇分析机,这个算法未能在巴贝奇分析机上执行。
因为“well-definedprocedure”缺少数学上精确的定义,19世纪和20世纪早期的数学家、逻辑学家在定义算法上出现了困难。
20世纪的英国数学家图灵提出了著名的图灵论题,并提出一种假想的计算机的抽象模型,这个模型被称为图灵机。
图灵机的出现解决了算法定义的难题,图灵的思想对算法的发展起到了重要作用的。
在20世纪以前,人们普遍地认为,所有的问题类都是有算法的。
20世纪初,数字家们发现有的问题类是不存在算法的,遂开始进行可行性研究。
在这一研究中,现代算法的概念逐步明确起来。
30年代,数字家们提出了递归函数、图灵机等计算模型,并提出了丘奇-图灵论题,这才有可能把算法概念形式化。
按照丘奇-图灵论题,任意一个算法都可以用一个图灵机来实现,反之,任意一个图灵机都表示一个算法。
按照上述理解,算法是由有限多个步骤组成的,它有下述两个基本特征:
每个步骤都明确地规定要执行何种操作;每个步骤都可以被人或机器在有限的时间内完成。
人们对于算法还有另一种不同的理解,它要求算法除了上述两个基本特征外,还要具有第三个基本特征:
虽然有些步骤可能被反复执行多次,但是在执行有限多次之后,就一定能够得到问题的解答。
也就是说,一个处处停机(即对任意输入都停机)的图灵机才表示一个算法,而每个算法都可以被一个处处停机的图灵机来实现
1.3算法分类
算法可大致分为基本算法、数据结构的算法、数论与代数算法、计算几何的算法、图论的算法、动态规划以及数值分析、加密算法、排序算法、检索算法、随机化算法、并行算法等。
算法还可以宏泛的分为三类:
有限的,确定性算法这类算法在有限的一段时间内终止。
他们可能要花很长时间来执行指定的任务,但仍将在一定的时间内终止。
这类算法得出的结果常取决于输入值。
有限的,非确定算法这类算法在有限的时间内终止。
然而,对于一个(或一些)给定的数值,算法的结果并不是唯一的或确定的。
无限的算法是那些由于没有定义终止定义条件,或定义的条件无法由输入的数据满足而不终止运行的算法。
通常,无限算法的产生是由于未能确定的定义终止条件。
1.4算法的特征
一个算法应该具有以下五个方面的重要特征:
输入一个算法有零个或多个输入,以刻画运算对象的初始情况。
例如,在欧几里得算法中,有两个输入,即m和n。
确定性算法的每一个步骤必须要确切地定义。
即算法中所有有待执行的动作必须严格而不含混地进行规定,不能有歧义性。
例如,欧几里得算法中,步骤1中明确规定”以m除以n,而不能有类似以m除n以或n除以m这类有两种可能做法的规定。
有穷性一个算法在执行有穷步滞后必须结束。
也就是说,一个算法,它所包含的计算步骤是有限的。
例如,在欧几里得算法中,m和n均为正整数,在步骤1之后,r必小于n,若r不等于0,下一次进行步骤1时,n的值已经减小,而正整数的递降序列最后必然要终止。
因此,无论给定m和n的原始值有多大,步骤1的执行都是有穷次。
输出算法有一个或多个的输出,即与输入有某个特定关系的量,简单地说就是算法的最终结果。
例如,在欧几里得算法中只有一个输出,即步骤2中的n。
可行性算法中有待执行的运算和操作必须是相当基本的,换言之,他们都是能够精确地进行的,算法执行者甚至不需要掌握算法的含义即可根据该算法的每一步骤要求进行操作,并最终得出正确的结果。
1.5算法的基本方法
下面简单介绍算法的一些基本方法,而基于这些方法的分治策略、贪心策略、动态规划策略、分支限界法、回溯法等则是五种通用的算法设计技术。
递推法递推法是利用问题本身所具有的一种递推关系求问题解的一种方法。
它把问题分成若干步,找出相邻几步的关系,从而达到目的。
递归法递归指的是一个过程:
函数不断引用自身,直到引用的对象已知。
穷举搜索法穷举搜索法是对可能是解的众多候选解按某种顺序进行逐一枚举和检验,并从中找出那些符合要求的候选解作为问题的解。
贪婪法贪婪法是一种不追求最优解,只希望得到较为满意解的方法。
贪婪法一般可以快速得到满意的解,因为它省去了为找最优解要穷尽所有可能而必须耗费的大量时间。
贪婪法常以当前情况为基础作最优选择,而不考虑各种可能的整体情况,所以贪婪法不要回溯。
分治法分治法是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。
动态规划法动态规划是一种在数学和计算机科学中使用的,用于求解包含重叠子问题的最优化问题的方法。
其基本思想是,将原问题分解为相似的子问题,在求解的过程中通过子问题的解求出原问题的解。
动态规划的思想是多种算法的基础,被广泛应用于计算机科学和工程领域。
迭代法迭代法是数值分析中通过从一个初始估计出发寻找一系列近似解来解决问题(一般是解方程或者方程组)的过程,为实现这一过程所使用的方法统称为迭代法。
分支界限法与贪婪算法一样,这种方法也是用来为组合优化问题设计求解算法的,所不同的是它在问题的整个可能解空间搜索,所设计出来的算法虽其时间复杂度比贪婪算法高,但它的优点是与穷举法类似,都能保证求出问题的最佳解,而且这种方法不是盲目的穷举搜索,而是在搜索过程中通过限界,可以中途停止对某些不可能得到最优解的子空间进一步搜索(类似于人工智能中的剪枝),故它比穷举法效率更高。
1.6典型算法举例
算法可以用自然语言描述。
自然语言是人们日常所用的语言,如汉语、英语、德语等。
使用这些语言不用专门训练,所描述的算法也通俗易懂。
算法也可以用流程图描述。
在数学课程里,我们学习了用程序框图来描述算法。
在程序框图中流程图是描述算法的常用工具,即由一些图形符号来表示算法。
算法还可以用伪代码描述。
伪代码是用介于自然语言和计算机语言之间的文字和符号来描述算法的工具。
它不用图形符号,因此,书写方便、格式紧凑,易于理解,便于向计算机程序设计语言过度。
公元前250年古希腊的数学家埃拉托塞尼提出一种筛法来求素数,下面我们用自然语言来描述该算法:
Step1要得到不大于某个自然数N的所有素数,只要在2~N中将不大于√N的素数的倍数全部划去即可。
Step2将上面的内容等价转换:
“如果N是合数,则它有一个因子d满足1Step3再将Step2的内容等价转换:
“若自然数N不能被不大于√N的任何素数整除,则N是一个素数”。
Step4这句话的汉字可以等价转换成为用英文字母表达的公式:
N=p1m1+a1=p2m2+a2=…=pkmk+ak.
(1)
其中p1,p2,…,pk表示顺序素数2,3,5,…,a≠0。
即N不能是2m+0,3m+0,5m+0,…,pkm+0形。
若N
Step5可以把
(1)等价转换成为用同余式组表示:
N≡a1(modp1),N≡a2(modp2),…,N≡ak(modpk).
(2)
例1.6.129不能够被根号29以下的任何素数2,3,5整除,29=2×14+1=3×9+2=5×5+4。
29≡1(mod2),29≡2(mod3),29≡4(mod5)。
29小于7的平方49,所以29是一个素数。
由于
(2)的模p1,p2,…,pk两两互素,根据孙子定理(中国剩余定理)知,
(2)在p1~pk范围内有唯一解。
例1.6.2k=1时,N=2m+1,解得N=3,5,7。
求得了(3,32)区间的全部素数。
k=2时,N=2m1+1=3m2+1,解得N=7,13,19;N=2m1+1=3m2+2,解得N=5,11,17,23。
求得了(5,52)区间的全部素数。
k=3时,N=2m1+1=3m2+1=(5m3+1/5m3+2/5m3+3/5m3+4),解得N=13,19,31,37,43。
N=2m1+1=3m2+2=(5m3+1/5m3+2/5m3+3/5m3+4),解得N=11,17,23,29,41,47。
求得了
(7,72)区间的全部素数。
仿此下去,可以求得任意大的数以内的全部素数。
2.数学机械化
数学问题的机械化,就是要求在运算或证明过程中,每前进一步之后,都有一个确定的、必须选择的下一步,这样沿着一条有规律的、刻板的道路,一直达到结论。
即所谓的机械化就是刻板化和规格化。
这一起源于中国古代传统数学,由于计算机的出现而呈现旺盛生命力的数学机械化思想在数学研究上已经发挥出它的巨大威力,并且对当今数学及数学教学产生了具大的影响。
计算机科学被认为是算法的科学。
以算法为核心的机械化思想,既传统又前瞻,将为信息时代数学科学的创新发挥重大作用。
“计算机证明数学问题”是由吴文俊提出的,华人美籍数学家王浩也是最初的研究人员之一。
它是极为神奇的超级工程数学,有可能引发工程技术的革命和某些基础数学的革命。
数学机械化研究,是在初等几何定理的机器证明研究方面取得突破的。
公理化体系的几何定理证明非常灵活。
以中学课程中的几何为例,-个定理的证明,往往要经过冥思苦想,奇巧构思,无章可循地填加辅助线,迂回曲折地给出证明。
如何利用计算机进行自动推理,特别是进行几何定理的自动证明,是学术界长期研究的课题。
所谓定理的机械化证明,就是对一类定理(这类定理可能成千上万)提供一种统一的方法,使得该类定理中每个定理,都可依此方法给出证明。
在证明过程中,每前进一步,都有章可循地确定下一步该做什么和如何做。
从“一理一证”到“-类一证”,是数学的认识和实践的飞跃。
吴先生创立了初等几何(泛指不具有微分运算的几何,如欧氏几何、非欧几何、仿射几何、投影几何、代数几何等等)定理证明的机械化方法,国际上称“吴方法”,首次实现了高效的几何定理的机器证明。
“吴方法”也可用于几何定理的自动发现和未知关系的自动推导。
吴文俊先生的开创性成果,打破了国际自动推理界在几何定理自动证明研究中长期徘徊不前的局面,也使我国在这一领域处于领先地位。
数学是研究数量关系和形体性质的科学。
“数”与“形”在现实世界中无处不在,因此,数学科学是自然科学的基础,也是高新技术的基础,甚至是工程建设的基础,这已是人们的共识。
数学科学的好处是,可以化难为易,把奥妙变为常识,为各类问题的解决提供框架。
吴文俊先生强调:
“数学机械化方法的应用,是数学机械化研究的生命线”。
他本人的研究工作己涉及许多应用领域,如线性控制系统、机构综合设计、平面星体运行的中心构形、化学反应方程的平衡、代数曲面的光滑拼接、从开普勒定律自动推出牛顿定律、全局优化求解等等。
在他的指导和带动下,数学机械化方法己在一些交叉研究领域获得初步应用,如理论物理、计算机科学、信息科学、自动推理、工程几何、机械机构学等等。
数学机械化研究不断开拓更多的应用方面。
吴文俊先生说过,从事数学研究,要有良好的思维方式,在思想观念上要有所突破。
许多事例表明,-些数学分支正是由于踏上了机械化的道路而获得了蓬勃的发展,使之成为重要的研究方向,甚至成为数学的主流。
这是因为,抽象的数学概念和结论,往往是难于掌握和运用的。
当把抽象的概念变成具体可算的(算法经常用公式表达),既有定性的结论又有定量的计算,数学理论才臻于完善,易于接受和适宜应用。
运用机械化思想考察数学,将会发现数学的不同侧面,建立新的模式,活跃和启迪数学家的思维,从而产生大量的原始创新。
证定理和解方程,大体上涵盖了数学活动的主要内容。
在机器证定理和机器解方程两个方面,吴文俊先生在理论和方法上都做出了原创性的贡献。
机器定理证明机器定理证明就是把人证明数学定理和日常生活中的演绎推理变成一系列能在计算机上自动实现的符号演算的过程和技术,又称自动定理证明和自动演绎。
机器定理证明是人工智能的重要研究领域,它的成果可应用于问题求解、自然语言理解、程序验证和自动程序设计等方面。
数学定理证明的过程尽管每一步都很严格有据,但决定采取什么样的证明步骤,却依赖于经验、直觉、想象力和洞察力,需要人的智能。
因此,数学定理的机器证明和其他类型的问题求解,就成为人工智能研究的起点。
早在17世纪中叶,莱布尼兹就提出过用机器实现定理证明的思想。
19世纪后期G.弗雷格的“思想语言”的形式系统,即后来的谓词演算,奠定了符号逻辑的基础,为自动演绎推理提供了必要的理论工具。
20世纪50年代,由于数理逻辑的发展,特别是电子计算机的产生和应用,机器定理证明才变为现实。
A.纽厄尔和H.A.西蒙首先用探试法实现了用以证明命题逻辑中重言式的逻辑理论家系统。
L.T.后来开始探讨通用的机器定理证明的方法,归结原理是其中突出的例子。
归结原理和非归结定理证明一阶谓词逻辑的恒真性问题是不可解的,即不存在能判定一阶逻辑中任意合式公式是不是永真式的算法,但是这个问题又是部分可解的。
如果A是永真式,那么必有算法可以证明。
许多一阶逻辑的证明算法都以J.厄尔布朗定理为基础,其中以1965年J.A.鲁宾逊提出的、对于一阶逻辑是完备的证明算法即归结原理最为著名。
归结原理的提出,把机器定理证明的研究推向高潮。
但归结原理不依赖于领域知识,不使用依赖问题领域的探试法,证明过程冗长,不能在合理的时间和计算机存储容量内证明较为复杂的数学定理,因此人们又提出非归结定理证明方法,后来又对以探试法为基础的问题求解技术发生兴趣。
与此同时还出现了因否定归结原理进而否定所有自动演绎方法的倾向。
但是人工智能所要解决的问题,其信息往往是不完全的,而且即使信息完全,要对有限的但为数众多的情形一一列举,实际上也不可行,因而只有用演绎推理的方法。
逻辑程序设计和日本以PROLOG为原型开发第五代计算机系统的核语言,进一步恢复了归结原理和自动演绎技术的地位。
人工智能的历史表明,以认知心理学为基础的探试法和以逻辑为基础的自动演绎相辅相成,不可偏废。
自动演绎与探试法等技术相结合而不用归结原理的定理证明技术,主要用于数学定理的机器证明。
几何定理的机器证明在数学定理机器证明中,有一类问题已有判定算法,如1951年W。
斯米列夫给出的阿贝尔群判定算法,1951年A.塔斯基给出的初等几何和代数的判定算法,1960年王浩提出的命题逻辑判定算法和1976年以来吴文俊提出的初等几何和微分几何定理机器证明的理论和方法。
非标准逻辑中的自动演绎以经典的一阶逻辑为基础的自动演绎技术比较成熟。
为了适应人工智能中复杂的推理形式,需要研究高阶逻辑和非标准逻辑中的自动演绎技术并从实用角度将这类逻辑表示形式转换成等价的经典一阶逻辑的表示形式。
逻辑程序设计将一阶谓词演算的子集直接作为程序设计语言的技术和方法。
PROLOG语言是初步实现逻辑程序设计基本思想的第一个语言,R.科瓦尔斯基则曾对HORN子句作了过程性解释,系统地阐明了逻辑程序设计的基本理论。
3.千年大奖问题
20世纪是数学大发展的一个世纪。
数学的许多重大难题得到完满解决,如费马大定理的证明,有限单群分类工作的完成等,从而使数学的基本理论得到空前发展。
计算机的出现是20世纪数学发展的重大成就,同时极大推动了数学理论的深化和数学在社会和生产力第一线的直接应用。
回首20世纪数学的发展,数学家们深切感谢20世纪最伟大的数学大师大卫·希尔伯特。
希尔伯特在1900年8月8日于巴黎召开的第二届世界数学家大会上的著名演讲中提出了23个数学难题。
希尔伯特问题在过去百年中激发数学家的智慧,指引数学前进的方向,其对数学发展的影响和推动是巨大的,无法估量的。
效法希尔伯特,许多当代世界著名的数学家在过去几年中整理和提出新的数学难题,希冀为新世纪数学的发展指明方向。
这些数学家知名度是高的,但他们的这项行动并没有引起世界数学界的共同关注。
2000年初美国克雷数学研究所的科学顾问委员会选定了七个“千年大奖问题”,克雷数学研究所的董事会决定建立七百万美元的大奖基金,每个“千年大奖问题”的解决都可获得百万美元的奖励。
克雷数学研究所“千年大奖问题”的选定,其目的不是为了形成新世纪数学发展的新方向,而是集中在对数学发展具有中心意义、数学家们梦寐以求而期待解决的重大难题。
2000年5月24日,千年数学会议在著名的法兰西学院举行。
会上,98年费尔兹奖获得者伽沃斯以“数学的重要性”为题作了演讲,其后,塔特和阿啼亚公布和介绍了这七个“千年大奖问题”。
克雷数学研究所还邀请有关研究领域的专家对每一个问题进行了较详细的阐述。
克雷数学研究所对“千年大奖问题”的解决与获奖作了严格规定。
每一个“千年大奖问题”获得解决并不能立即得奖。
任何解决答案必须在具有世界声誉的数学杂志上发表两年后且得到数学界的认可,才有可能由克雷数学研究所的科学顾问委员会审查决定是否值得获得百万美元大奖。
“千年大奖问题”公布以来,在世界数学界产生了强烈反响。
这些问题都是关于数学基本理论的,但这些问题的解决将对数学理论的发展和应用的深化产生巨大推动。
认识和研究“千年大奖问题”已成为世界数学界的热点。
不少国家的数学家正在组织联合攻关。
可以预期,“千年大奖问题”将会改变新世纪数学发展的历史进程。
这七个“千年大奖问题”分别是:
NP完全问题、霍奇猜想、庞加莱猜想、黎曼假设、杨-米尔斯理论、纳卫尔-斯托可方程、BSD猜想。
难题一P(Polynomial算法)问题对NP(Non-deterministicPolynomial算法)问题
在一个周六的晚上,你参加了一个盛大的晚会。
由于感到局促不安,你想知道这一大厅中是否有你已经认识的人。
你的主人向你提议说,你一定认识那位正在甜点盘附近角落的女士罗丝。
不费一秒钟,你就能向那里扫视,并且发现你的主人是正确的。
然而,如果没有这样的暗示,你就必须环顾整个大厅,一个个地审视每一个人,看是否有你认识的人。
生成问题的一个解通常比验证一个给定的解时间花费要多得多。
这是这种一般现象的一个例子。
与此类似的是,如果某人告诉你,数13,717,421可以写成两个较小的数的乘积,你可能不知道是否应该相信他,但是如果他告诉你它可以因子分解为3607乘上3803,那么你就可以用一个袖珍计算器容易验证这是对的。
不管我们编写程序是否灵巧,判定一个答案是可以很快利用内部知识来验证,还是没有这样的提示而需要花费大量时间来求解,被看作逻辑和计算机科学中最突出的问题之一。
NP完全问题是不确定性图灵机在P时间内能解决的问题。
整个计算机科学的大厦就建立在图灵机可计算理论和计算复杂性理论的基础上,