我正在尝试建立一个“异常有用”的算法/问题列表,例如,解决“似乎”本质上非常指数化的问题,但是有一些最终可以解决这些问题的特别聪明的算法。我的意思示例:
- 线性编程(单纯形算法是指数时间;找到多项式时间解花了很长时间!)
- 更一般而言,半定规划
- 原始性测试
- 2-SAT和HORNSAT
- 计算行列式(如果这听起来并不困难,请考虑永久变量)
- 寻找完美的搭配
- 使用有限简单组的分类可以解决各种硬组理论问题
- 可以使用复杂的禁止次要特征(可嵌入性在任意表面上;树宽和分支宽度的边界; Delta-Wye可约化图)来解决各种硬图问题
- 计算有界组中的指数(即以步骤计算,通过重复平方来完成)
- 计算依赖于LLL算法。(作为特殊情况:Euclidean算法。作为更一般的情况:PSLQ或HJLS算法。)
- 没有泰勒术语(?)的约束问题。我承认我还没有完全理解这一点,但是听起来它可能包含了上面的2-SAT / HORNSAT情况以及有限域上的任何线性代数。在这里看到更长的帖子
- 可通过全息缩小计算的问题。
值得一提的是,我还要提到图同构,因为它仍然非常简单(),它等效于许多其他同构问题:
- 有向图/多重图/超级图(一种“较难”的问题)
- 有限自动机/ CFG
显然,这些方面存在一定的困难,但是所有人都会给至少某些人带来某种“惊奇”的感觉,因为这个问题听起来很困难,但事实证明这很容易解决。LP听起来可能相对简单,但是人们花了相当长的时间来建立一个实际的解决方案。反复平方或求解2-SAT是大学生可能会自己想到的事情,但是如果您只看过NP-Complete问题而没有看过HORNSAT,则听起来像是NP-Completeness的自然人选。解决CFSG或采用多项式方法来检查Delta-Wye可还原性并不是一件容易的事。
我希望这是有道理的; 这里显然有很多主观属性,但是我很想知道其他人发现什么是解决“显然很困难”问题的有效解决方案。