NP-被高估
2026年8月13日 如果你在大学学习过NP难问题,你的收获可能是这样的:NP难问题在理论上是可解的,但在实际中代价高昂。基本上已经证明没有好的算法存在。至少这是我学到的结论。几乎我交谈过的每个人以及许多网上的人也都是如此。我一直看到 "不,你无法解决。它是NP难的。blah blah" 的讨论。这个神话很普遍,但这些问题并不难解。在那个时候,我的教授用戏剧化的话语结束了最后一堂课(我稍微转述一下):现在你们已经了解到几乎所有有趣的问题都是不可判定的,而剩下的问题中几乎全部都是NP难的。对于计算机科学的项目来说,这无疑是给最终结果钉上了一根钉子。真是的。不知道大家是否都得到了这么悲观的框架,但这就解释了。理论并没有错,但在实际中往往无关紧要。确实,你提出的任何算法在某些输入时都会爆炸。但你可能会在99.9%的输入上找到快速的解决方案。或者在100%的相关输入上。理论并没有排除这种可能性。从理论上说,理论和实践之间没有区别。但在实践中,确实是有区别的。 -- 本杰明·布鲁斯特 一些突出的NP难问题: 依赖解析(在软件包管理器中) 类型检查(并非所有类型系统) 调度 旅行商问题 布尔可满足性(SAT) 对于(1)和(2),最坏情况根本不会发生。我的意思是,安装软件包和类型检查当然可能会很慢。但是,就我职业生涯而言,我从未见过巨大爆炸。(3)和(4)在技术上是优化问题。每个人都知道你可以用启发式方法来处理这些问题,但你不必牺牲最优性。我们绝对拥有可以在合理时间内找到可证明的最优解决方案的工具。没有魔法。没有量子计算机。只是更加深入的思考,想出更好的算法。这正是人们所做的。事实上,算法的加速在过去几十年中超过了硬件的进步。综合来看,这篇论文引用了1991年至2015年间4500亿倍的加速。最后但同样重要的是:即使是(5),NP难问题的典型,也在规模上常规解决。亚马逊每天解决十亿个SMT问题。SMT是SAT的一个更难的版本。SAT算法变得如此强大,以至于现在被认为是简单的部分。但是如果你遇到最坏情况呢?你不必等待宇宙的热寂。HTTP请求有时也不会返回。添加超时,显示错误信息,...你知道该怎么做。
本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。
☕请我喝杯咖啡