有没有有时间复杂广泛使用的算法 更糟 比其它已知的算法,但它是一个 更好 的选择, 所有的 实际情况( 更糟糕的 复杂性,但 更好的 其他方式)?
可接受的答案可能是以下形式:
有算法A和B具有O(N**2)和O(N)时间复杂性相应,但B 具有这样的大恒定,它具有超过没有优势A,用于输入小于一个数量在宇宙的原子。
A
B
O(N**2)
O(N)
示例从答案中突出显示:
单纯形算法-最坏的情况是指数时间- 与 已知的多项式时间算法进行凸优化问题比较。
天真的中位数算法-最坏情况下的O(N ** 2) 与 已知的O(N)算法。
回溯正则表达式引擎-最坏情况的指数 与 基于O(N)Thompson NFA的引擎相比。
所有这些示例均利用最坏情况与平均情况。
有关:
``越糟越好’‘的兴起。(出于这个问题的目的,“更糟”的用语比本文中的含义 更窄 (即,算法时间复杂度))
Python的设计理念:
ABC集团追求完美。例如,他们使用了基于树的数据结构算法,该算法被证明对于渐近大集合是最佳的(但对于小集合来说并不是那么好)。
如果没有能够存储这些大集合的计算机(换句话说,在这种情况下,大不够大),将是这个示例的答案。
用于正方形矩阵乘法的Coppersmith- Winograd算法。其时间复杂度是O(n 2.376) 相对于 为O(n 3幼稚乘法算法或) 相对于 为O(n 2.807对)的Strassen算法。
从维基百科文章:
但是,与Strassen算法不同,它没有在实践中使用,因为它仅对大型矩阵提供了一个优势,以至于现代硬件无法对其进行处理(Robinson 2005)。