除了单纯形算法以外,还有其他算法在最坏情况下的运行时间是指数的,同时在实践中效果很好吗?


9

如果在最坏的情况下运行时间是多项式,我们通常将算法称为“好的算法”。但是在某些情况下(例如Simplex算法),即使该算法的最坏情况是指数级的,它在实践中也可以很好地工作。

除了单纯形算法以外,是否还有其他(确定性)示例?


1
:您可能会感兴趣的相关问题cstheory.stackexchange.com/questions/305/...
拉杜·格里戈里

Answers:


13

现代SAT求解算法能够快速求解大多数实例,即使最坏情况下的运行时间当然是指数级的。然而,在这种情况下,实际速度更多是算法工程多年的结果,而不是单个优雅算法的结果。虽然我已经了解到,冲突驱动子句学习导致SAT解算器的性能大幅度提高,但后来的改进通常是通过在算法中巧妙地使用各种启发式方法来实现的。


13

即使在平面中,用于聚类的均值算法也证明是指数的,但在实践中效果很好。k


13

Hindley-Milner类型推断是EXPTIME完整的,但是在人们通常编写的程序中,它非常接近线性。


1
不过这有什么不同吗?我的回忆是,我们可以描述Hindley-Milner表现不佳(深度嵌套的let)的必要条件,因此HM在实践中良好的原因是,这种嵌套在实践中边界很低(通常我们缩进的越多)当我们走向屏幕的最右边时,会更深地陷入束缚并变得紧张...)当然,我以前从记忆中提出过这种主张,而我最近无法为其找回参考。
罗伯·西蒙斯

2
不,这不是必要条件。您可以给出一个let绑定序列(无嵌套!),以使推断类型的大小与序列中每个其他条目的平方成正比。有关示例,请参见cstheory.stackexchange.com/questions/2428/…
Neel Krishnaswami

该示例使用SML,并且我对OCaml的处理方式更为熟悉,但是如果绑定序列是“ let”,那么我认为它们是嵌套的。只是因为它们没有定义全局函数,而是在这里进行隐式嵌套:给定的定义可以访问其上的所有定义,而不能访问其下的所有定义。
amnn 2016年

1
@amnn:嵌套是指以绑定形式绑定嵌套-即,let z = (let y = e in e') in e''与than相对 let y = e in let z = e' in e''
Neel Krishnaswami

9

布伦丹·麦凯(Brendan McKay)的恶作剧程序(否AUTomorphisms,是吗?)解决了图的规范标注问题(同时解决了图同构和图自同构问题),并且具有指数级的最坏情况性能(Miyazaki,1996年)。但是,它对于大多数图形,尤其是具有一些自同构的图形,都非常有效。

具体来说,该算法开始于按度对顶点进行分区,然后按每个部分之间的度对分区进行划分。当此过程稳定后,必须做出选择以区分非平凡部分中的顶点,这将导致指数行为。在大多数图中,此分支过程的深度很小。


我以为恶心还使用了一些随机性来帮助提炼?在那种情况下,这可能与单纯形算法非常相似(尽管显然没有图同构的平滑分析概念)。
Joshua Grochow 2010年

1
它不使用随机性,因为它需要进行一致的规范标记。但是,它可以使用自定义的顶点不变过程来帮助划分顶点。有时,这个不变量看起来是随机的,它是如何产生的(通常,它是距离度序列的一个复杂函数),但这只是为了减少冲突。
Derrick Stolee 2010年

1
可以将此顶点不变性与单纯形算法的反循环规则进行比较。
Derrick Stolee 2010年

4

几个简单的随机游戏算法在实践中很好地工作,即使他们有指数最坏情况下的运行时间。当然,这个问题在某种意义上与线性编程有关,尽管它不知道是在多项式时间内。


1

有一种查找混合纳什均衡的算法,类似于LP的单纯形算法。(我忘记了这个名字。)它具有指数级的最坏情况复杂性,但我记忆模糊,它在实践中通常表现良好。


您是说Lemke-Howson算法吗?
Rahul Savani

1

Bin打包(许多变体)是一个复杂性已知为NP难的问题:

http://en.wikipedia.org/wiki/Bin_packing_problem

但是,将许多启发式方法应用于“实用”版本时效果很好。对于一维箱式装箱,其中一些启发式方法(例如首次拟合);首次拟合递减;最适合; 最佳拟合递减作为吸引学生的主题非常吸引人。学生通常可以自己发现一些基本的启发式方法。


即使问题是NP完全问题,也有很多例子,简单的算法就可以解决这个问题。但是我实际上正在寻找指数时间算法,您的示例与一个棘手的问题有关,可以通过简单的算法轻松解决。也许有一种指数时间算法可以精确地解决Bin装箱(或其他问题);实际上,它需要多项式时间。
阿曼2010年

0

持久性算法(来自Edelsbrunner-Letscher-Zomorodian,最初有很多变化)是最坏的情况,但从实验看来通常是线性运行的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.