computer-science - 如果我们“假设” P 不等于 NP,为什么 NP 可能等于 co-NP 背后的直觉
问题描述
如果我们“假设” P 不等于 NP ,这表明NP可能等于 co-NP 。
我搜索了很多,浏览了很多材料。我似乎不能很直观地理解为什么这可能是真的。如果有人可以引导我找到任何资源或帮助我直观地理解为什么这是真的,那将非常有帮助。
解决方案
这是一种可能的直觉,鉴于我们尚未解决P与NP的问题,这可能会完全被误导。
复杂性类P可以被认为是以下陈述为真的所有问题:有一个布尔函数solveProblem
使得
solveProblem
在多项式时间内以其输入的大小运行,x
对于答案为“是”的任何输入,solveProblem(x)
返回 true,并且x
对于答案为“否”的任何输入,solveProblem(x)
返回 false。
现在,让我们看一下NP的定义。这是一组问题,以下陈述为真:有一个布尔函数checkYesAnswer
,使得
checkYesAnswer
在多项式时间内运行,- 对于答案为“是”的任何输入
x
,有些y
地方checkYesAnswer(x, y)
返回真,并且 x
对于答案为“否”的任何输入,checkYesAnswer(x, y)
始终返回 false。
那么, P和NP之间的区别在于,当您查看复杂性类P时,您只得到输入并且需要做出是/否决定,而在类NP中可能有一些辅助信息这可以帮助您做出是/否的决定。这使得P和NP的定义之间的区别非常大——在一种情况下,您需要解决问题,而在另一种情况下,您需要检查一些辅助信息是否对您有帮助。
现在,这是 co- NP的另一个等效定义。类 co- NP包含所有存在布尔函数的问题,checkNoAnswer
使得
checkNoAnswer
在多项式时间内运行,x
对于答案为“是”的任何输入,checkNoAnswer(x, y)
始终返回 true,并且x
对于答案为“否”的任何输入,可以选择返回 true的y
位置。checkNoAnswer(x, y)
换句话说,NP和 co - NP的定义非常密切相关,唯一的区别是“是”和“否”的分支交换了。所以从这个意义上说,即使P ≠ NP , NP和 co - NP可能相等仍然是合理的,因为我们基本上只是颠倒了“是”和“否”这两个词的角色。
也有充分的理由来了解为什么NP可能不是 co - NP。您可以将定义之间的区别想象如下:对于NP,如果存在具有某些y
属性的某些属性,则答案是“是”,而对于 co- NP,如果所有 y
东西都成立,则答案是“是”。而且由于 ∃ 和 ∀ 量词的工作方式不同,也许这里还有其他事情发生。
推荐阅读
- kubernetes - 将主机路径用于具有限制的持久卷
- r - 如何在 Windows 中的一组文件名中删除(包括)双下划线之后的所有字符?
- ms-access - OpenQuery 是 RunSQL 更新 SELECT 查询的好选择吗?
- python - MySQL/Python - MySQLdb 无法识别表
- ios - 故事板中导航栏标题视图中的 UIButton 和标签
- sql - SQL聚合和累积求和
- macos - Mix.exs 文件更改 - (SyntaxError) mix.exs:65: unexpected token: "" (column 1, codepoint U+0000)
- c++ - 关于 cv::imwrite 速度的 .bmp 的任何替代方案
- javascript - 按键将数组中的对象推送到不同的数组
- swift - RxTableViewSectionedReloadDataSource