决策问题:对于输入的问题,它的回答要么是YES要么是NO算法
想一想程序都是"人"一个一个写下来的,他们存在硬盘上实际也是一系列的0 1 组合,也就是说它是一个可数的数。这里须要去掉错误的程序,错误的程序自己是没法解决问题的。数组
表示空串函数
每个决策问题能够看作是一个输入是有限的字符串,输出是0 1的函数。全部的这些函数组成的集合假设他是可数的spa
![]()
全部集合的元素为
,
,
...
,这样的构造是能够无限进行下去。定义一个新的无限长的字串:
,其中.net
![]()
其中
表示原集合中的一个结果,
表示
的第i个比特。这样获得的
确定和
不同,也就是说它不在集合里头,那么意味着包含全部无限字符串的集合自己是不可数的。3d
不可数的集合原数确定是比可数的集合要大,这就意味着大多数的决策问题是没法用程序解决的。cdn
证实出处,见第3小节blog
好比最后一个进来的人把门关上,实际上每一个进来的人都不知道本身是否是最后一我的,由于未来任什么时候候都有可能有人进来,这种状况,实际上就没法用程序的方式写下来。若是你知道一共有多少我的,那么是明白本身是不是最后一个进来的人,但关键是你不知道一共有多少我的,因此你只能让这个程序一直跑下去,可是跑不出结果字符串
halt problem,运行一段代码,它会中止吗?它在有限的时间内可以解决,只要一直运行这个程序就知道get
验证是指若是决策问题的答案是YES,可以证实它是正确的,而且证实的验证所花的时间在多项式时间以内。
所谓的运气就是说只须要一次尝试就找到了解决问题的方法。
nondeterministic model指算法自己来猜想,最终获得一个YES或者NO的回答,获得的猜想自己若是问题自己是YES,那么它的回答必定是YES
P!=NP: 证实问题要比验证问题要难
去证实一个问题须要不少的“灵光”一现,而验证问题只要描述的够精确,按照特定的步骤去执行,保证上下连贯,基本是没有问题。这里的“灵光”也就是说的“运气”
对于P的问题能够在任何计算机上面作实现,可是NP须要机器可以神奇的知道那种方法可以得到正确的解答。而这种机器可以神奇的知道正确答案的是不存在的。也就是说不存在"工程上的幸运"
从集合上来讲就是存在这样的问题,它属于NP,可是不属于P
NP-hard: 起码和在NP里头的问题同样的难
NP-complete:
好比 俄罗斯方块问题
NP-complete问题之间均可以互相转化(reduce)
转换一个问题A到一个问题B,这样表示B起码和A同样难
好比把没有权重的最短路径问题,转换成有权重的最短路径问题