最近,当我与物理学家交谈时,我声称,根据我的经验,当天真的看起来需要花费指数时间的问题变成P或BPP时,这通常可以识别出发生还原的“总体原因” ---并且几乎总是,这个原因属于一打或更少的“通常的可疑对象”(例如:动态编程,线性代数...)。但是,那让我开始思考:我们真的可以写下这样的原因的体面清单吗?这是第一个不完整的尝试:
(0)数学表征。问题具有非显而易见的“纯数学”特征,一旦知道,它就可以立即使您可以对一系列poly(n)可能性进行详尽的搜索。 例如:图平面度,从Kuratowski定理出发,遵循O(n 6)算法。
(正如下面的“平面”所指出的,这是一个糟糕的例子:即使您知道平面度的组合特征,给出多项式时间算法还是很不容易的。因此,让我在这里替换一个更好的例子:如何,例如,“假设输入n用二进制编写,则计算需要多少颜色才能对嵌入在具有n个孔的表面上的任意地图进行着色。”毫无疑问,这是完全可计算的(甚至是有限的!)。但是,有一个已知的公式给出了答案,一旦您知道了该公式,就可以用多项式时间进行计算,与此同时,应该添加“减少未成年未成年人/罗伯逊-西摩理论”作为一个单独的总体原因在P.)
无论如何,这不是我最感兴趣的情况。
(1)动态编程。 可以以一种无需递归分解的方式进行递归求解的方式分解问题-通常是因为要满足的约束以线性或其他简单顺序排列。“完全组合”;不需要代数结构。可以说,图可达性(因此2SAT)是特殊情况。
(2)拟阵 问题具有拟阵结构,可使贪婪算法起作用。示例:匹配,最小生成树。
(3)线性代数。 可以将问题简化为求解线性系统,计算行列式,计算特征值等。可以说,大多数涉及“奇迹般的取消”的问题,包括可以由Valiant的Matchgate形式主义解决的那些问题,也都属于线性代数的范畴。
(4)凸性。 问题可以表示为某种凸优化。半定规划,线性规划和零和博弈是常见的(越来越多)特殊情况。
(5)多项式恒等检验。 可以通过检查多项式恒等式来减少问题,从而使代数的基本定理产生有效的随机算法-在某些情况下,例如素数,甚至是可证明的确定性算法。
(6)马尔可夫链蒙特卡洛。 可以将问题简化为从快速混合步行的结果中取样。(例如:大约计算完美匹配。)
(7)欧几里得算法。 GCD,连续分数...
杂项/分类方法不明确:稳定的婚姻,多项式因式分解,置换组的隶属度问题,数论和群论中的各种其他问题,低维晶格问题...
我的问题是:我遗漏的最重要的事情是什么?
澄清:
我意识到不可能有一个完整的清单:无论您给出多少有限的原因,某人都将能够找到P中的奇特问题,但由于任何这些原因都不会。部分由于这个原因,我对在P或BPP中提出许多不同的,看似无关的问题的想法比只对一个问题有用的想法更感兴趣。
我也意识到,如何划分事物是主观的。例如,拟阵是动态编程的特例吗?深度优先搜索的可溶解性是否足够重要,足以成为其自身的理由,与动态编程分开?同样,通常由于多种原因,P中可能存在相同的问题,具体取决于您如何看待它:例如,由于线性代数,找到一个本征值在P中,这也是因为它是一个凸优化问题。
简而言之,我不希望有一个“分类定理”,只是希望有一个列表能有效地反映我们目前对有效算法的了解。这就是为什么我最感兴趣的是将这些东西应用到P或BPP中的技术,这些技术具有广泛的适用性,但不适合上面的清单-或其他一些改进我的初次尝试以弥补我夸耀的想法。物理学家。