强大的算法过于复杂,难以实施


67

有哪些合法实用程序的算法过于复杂而难以实现?

让我清楚一点:我不是在寻找像当前的渐近最优矩阵乘法算法(Coppersmith-Winograd)这样的算法,该算法可以合理实施,但具有一个常数,使其在实践中毫无用处。我正在寻找一种可能具有实用价值,但很难编码的算法,以至于它们从未实现,仅在极其人为的环境中实现,或者仅针对非常特殊的应用而实现。

还欢迎具有良好渐近性但实际性能可能不佳的几乎不可能实现的算法。


1
制作此CW,因为可能会很长。
Suresh Venkat

4
是否存在“几乎不可能实现”的度量标准?有定义它的理论吗?
Ritwik Bose

@Mechko,也许是最小图灵机的大小的下限,该最小图灵机输出作为算法实现的图灵机的描述。:)
Radu GRIGore

@Radu GRIGore是公认的度量标准还是应该制定的度量标准?我想(现在)有一条简单的,固定的行定义了“嗯,不值得”……:D
Ritwik Bose

4
我对Coppersmith-Winograd合理实施的建议很感兴趣。有没有人看到过用高级伪代码写下来的实现,并且有没有人估计过常数?
拉斐尔

Answers:


33

Chazelle给出了用于对简单多边形进行三角剖分的线性时间算法。Skiena写道(算法设计手册,第575页),“实施它足以证明存在证明是完全没有希望的”


3
该算法是否具有合理的常数?
jbapple 2011年

这是唯一已知的线性时间算法吗?
Thomas Ahle 2013年

2
@ThomasAhle我相信这是唯一已知的确定性线性时间算法。Amato,Goodrich和Ramos有一个更简单的随机变量
Sasho Nikolov

据我所知,Chazelle的线性时间简单多边形三角剖分算法从未实现过,也可能永远不会实现,因为它的复杂性以及常数很高,因此在实践中将无法与替代方法竞争。虽然有重大理论成就。Ralph Boland
Ralph Boland 2015年

我再问一遍:该算法是否具有合理的常数?
user1271772

29

用于计算基本反导数的Risch算法。根据Wikipedia的介绍,由于其复杂性,没有软件包可以实现完整算法。


3
维基百科还指出,这不是算法而是半算法,因为它需要启发式方法来解决恒定问题。
sclv 2011年

什么是启发式?您能否提供一些链接以了解更多信息?
zygimantus

22

任何使用罗伯逊-西摩结果的算法为涉及图的事物(不包括固定未成年人)推断出“多时”算法都在麻烦。隐藏在结果中的常数是“银河”。


3
这是否也难以实施或具有巨大的常数?
列夫Reyzin

5
是的,这看起来不是一个很好的例子。如果我理解正确,那么问题是关于可能实用的算法(因此可能是“小”常量),但实施起来太复杂了。当然,整个问题都有不同的解释:-)
Aryabhata

5
问题在于常量来自大量未成年人,而这些未成年人需要为特定财产而排除。我不知道如何为给定的属性生成所需的排除未成年人列表,因此这不仅仅是规模问题。
Suresh Venkat

2
例如,我们甚至不知道可嵌入圆环图的排除未成年人列表。
Derrick Stolee 2011年

17
这里的问题似乎更深:目前尚无有效的方法来生成未成年人名单,因此实际上根本不会产生算法。如果直接翻译逻辑表达式,则大多数未成年人封闭属性会产生无限的排除未成年人列表。罗伯逊-西摩定理(瓦格纳猜想)告诉我们,一个被排除的未成年人的有限列表正潜伏在该无限列表之内,但是该定理在实际找到他们的过程中没有任何帮助。因此,罗伯逊·西摩因此通常会得出纯粹的存在证明。
安德拉斯·萨拉蒙

16

丹·威拉德(Dan Willard)的“一种密度控制算法,用于在最坏的情况下在顺序排序的文件中执行插入和删除操作”,描述了一种算法,用于在大小为的数组中维护有序集合,并在最坏的情况,其中是页面大小。O log 2 nO(n)O(log2nB)B

该论文长达55页,其结论指出了由于空间原因作者未描述的常数的一些改进。这使我怀疑常数可能不是那么银河,并且该数据结构将具有“合法效用”,尤其是因为它已被多次引用。


12

Qian的线性时间高阶模式统一算法由于其复杂性AFAIK尚未实现。


幸运的是,仍然有一些实用的算法。自动推理手册说,它可以在多时制中完成(引用钱氏算法的地方就在旁边),所以真是太棒了。
2015年

11

用于检查图形是否可以嵌入固定表面的线性时间算法。

Ken-ichi Kawarabayashi,Bojan Mohar,Bruce A. Reed:一种用于将图嵌入任意曲面和有界树宽图属的更简单的线性时间算法。FOCS 2008:771-780。

Bojan Mohar:将图形嵌入到任意曲面中的线性时间算法。SIAM J.离散数学。12(1):6-26(1999)


1
由于对属的指数(sic)依赖性很大,因此即使实施也不太可能具有实用价值。
Jeffε

8

我不确定它在实践中有多大用处(尽管我正在考虑蛋白质折叠和比较以及RNA二级结构预测),但是Wolfgang Haken给出了第一个多项式时间算法来确定一个结是否是一个简单循环(Theorie derNormalflächen。Acta Math.105,1961,pp.245--375)。我记得,几十年来仍无法实施。

如果可以相信Wikipedia,那么以后还会提供其他几种算法,并且“了解这些算法的复杂性是一个活跃的研究领域”。


4
Haken给出了第一个算法,但是它不能在多项式时间内运行;实际上,还不知道多重时间算法(或NP硬度结果)。最近的工作已将结平凡度(通过Haken的法向曲面公式化)减少为整数编程,通常在实践中可以很快解决。
Jeffε

3

树分解,也许斐波那契堆


14
斐波那契堆的实现当然不是太复杂。他们已经实施和测试。它们的问题在于,由于运行时间中恒定的常量因素,它们的实际性能不如其他堆好。
David Eppstein

1
我写了一个软件包来查找树分解,而且我认为实现yaroslavvb.blogspot.com/2011/01/building-junction-trees.html并不困难
Yaroslav

2
我的代码只是一个启发式的树分解,而不是像分支定界法和动态编程方法那样的最优方法……我猜你是在说Bodlaender的“线性时间算法...”吗?我还没有看到任何实现方式
Yaroslav Bulatov

4
Bodlaender的线性时间算法使用较早论文的动态编程算法作为子例程:当给出近似树分解时,该算法以时间计算最佳树分解。宽度k作为输入。我想我记得Hans Bodlaender曾经告诉过我,他们实现了这种动态编程算法,并将其用作子例程,但是对于k = 3而言,它已经太慢了。动态编程是线性时间算法的主要部分,因此Bodlaender的算法并不是很难实现,只是太慢了。2O(k3)O(n)
Bart Jansen

3
我认为这是最好的实施方案:hein.roehrig.name/dipl
Diego de Estrada

1

完美的哈希构造(https://en.wikipedia.org/wiki/Perfect_hash_function#Construction)将适用于具有静态或不经常更改密钥的任何用例(例如,路由器上的顶级域名,编译器中的关键字或函数名)在标准库中),但最后一次我找不到任何实现。

参数搜索可以解决许多困难的优化问题,包括在多项式时间内可能看起来像是NP难的问题。广为人知的论文《参数化搜索》使实用化实现了参数化搜索的一种变体,但我仍然认为它尚未在实用软件中实现。

Chazelle和Edelsbrunner提出的线段相交最佳算法是在时间内找到线段的所有交点,但是很复杂。CGAL是一个复杂的几何算法库,但实现了一个简单的算法是。n O n log n + k O n + k log n knO(nlogn+k)O((n+k)logn)


1
我拒绝相信FKS建设太复杂而无法实施。实际上非常简单。也许不切实际,但实施起来并不太复杂。
Sasho Nikolov
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.